From 060268b770c9623e457afc849e3933364914951d Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Mon, 7 Jun 2021 16:08:23 +0300 Subject: [PATCH 001/173] docs: update CHANGELOG --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8446fcd688a..15148a6e885 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [4.7.1](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.7.0...webpack-cli@4.7.1) (2021-06-07) + +### Bug Fixes + +- not found module after ask installation ([#2761](https://github.com/webpack/webpack-cli/issues/2761)) ([557ad05](https://github.com/webpack/webpack-cli/commit/557ad05ae8168255b57698bdd2d98cbc7b53812d)) +- prettier config ([#2719](https://github.com/webpack/webpack-cli/issues/2719)) ([181295f](https://github.com/webpack/webpack-cli/commit/181295fb1b1973c201c221813562219d85b845ae)) + # [4.7.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.6.0...webpack-cli@4.7.0) (2021-05-06) ### Bug Fixes From 2d7ab3549c429193b4ed5fbc6174153c847e0330 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Mon, 7 Jun 2021 19:13:04 +0300 Subject: [PATCH 002/173] fix: broken serve with new CLI API (#2770) --- packages/serve/src/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/serve/src/index.ts b/packages/serve/src/index.ts index bc2d6f7db6e..d310cc4f01b 100644 --- a/packages/serve/src/index.ts +++ b/packages/serve/src/index.ts @@ -14,7 +14,7 @@ class ServeCommand { let options = {}; if (isNewDevServerCLIAPI) { - if (typeof webpack.cli.getArguments === "function") { + if (webpack.cli && typeof webpack.cli.getArguments === "function") { options = webpack.cli.getArguments(devServer.schema); } else { options = devServer.cli.getArguments(); @@ -176,7 +176,7 @@ class ServeCommand { }, {}); const result = Object.assign({}, compiler.options.devServer); const problems = ( - typeof webpack.cli.processArguments === "function" + webpack.cli && typeof webpack.cli.processArguments === "function" ? webpack.cli : devServer.cli ).processArguments(args, result, values); From 68ef0563afd105652dc0fd0b2391a0a766cd24fe Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Mon, 7 Jun 2021 19:38:10 +0300 Subject: [PATCH 003/173] chore(release): publish new version - @webpack-cli/serve@1.5.1 - webpack-cli@4.7.2 --- packages/serve/CHANGELOG.md | 6 ++++++ packages/serve/package.json | 2 +- packages/webpack-cli/CHANGELOG.md | 4 ++++ packages/webpack-cli/package.json | 4 ++-- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/serve/CHANGELOG.md b/packages/serve/CHANGELOG.md index 27218f220a7..ef8bdab199a 100644 --- a/packages/serve/CHANGELOG.md +++ b/packages/serve/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.5.1](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.5.0...@webpack-cli/serve@1.5.1) (2021-06-07) + +### Bug Fixes + +- broken serve with new CLI API ([#2770](https://github.com/webpack/webpack-cli/issues/2770)) ([2d7ab35](https://github.com/webpack/webpack-cli/commit/2d7ab3549c429193b4ed5fbc6174153c847e0330)) + # [1.5.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.4.0...@webpack-cli/serve@1.5.0) (2021-06-07) ### Bug Fixes diff --git a/packages/serve/package.json b/packages/serve/package.json index 48d7b30329b..46186e5067e 100644 --- a/packages/serve/package.json +++ b/packages/serve/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/serve", - "version": "1.5.0", + "version": "1.5.1", "description": "", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/webpack-cli/CHANGELOG.md b/packages/webpack-cli/CHANGELOG.md index f39f8186089..26ce028de7e 100644 --- a/packages/webpack-cli/CHANGELOG.md +++ b/packages/webpack-cli/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. +## [4.7.2](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.7.1...webpack-cli@4.7.2) (2021-06-07) + +**Note:** Version bump only for package webpack-cli + ## [4.7.1](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.7.0...webpack-cli@4.7.1) (2021-06-07) ### Bug Fixes diff --git a/packages/webpack-cli/package.json b/packages/webpack-cli/package.json index 37f1314fa25..10aca903e59 100644 --- a/packages/webpack-cli/package.json +++ b/packages/webpack-cli/package.json @@ -1,6 +1,6 @@ { "name": "webpack-cli", - "version": "4.7.1", + "version": "4.7.2", "description": "CLI for webpack & friends", "license": "MIT", "repository": { @@ -32,7 +32,7 @@ "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^1.0.4", "@webpack-cli/info": "^1.3.0", - "@webpack-cli/serve": "^1.5.0", + "@webpack-cli/serve": "^1.5.1", "colorette": "^1.2.1", "commander": "^7.0.0", "execa": "^5.0.0", From b11966b6f29fde9185a8e8e98cf5a8494e4ee400 Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Mon, 7 Jun 2021 19:39:48 +0300 Subject: [PATCH 004/173] docs: update CHANGELOG --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15148a6e885..b97bc7e1135 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## [4.7.2](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.7.1...webpack-cli@4.7.2) (2021-06-07) + +**Note:** Version bump only for package webpack-cli (due `@webpack-cli/serve`) + ## [4.7.1](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.7.0...webpack-cli@4.7.1) (2021-06-07) ### Bug Fixes From c5dc4cf4668b34172f6ffd29df95499182ac451f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Jun 2021 14:22:54 +0200 Subject: [PATCH 005/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin (#2772) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 4.26.0 to 4.26.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.26.1/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 58 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index d3626735084..13293a2a8f4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2026,12 +2026,12 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.0.tgz#12bbd6ebd5e7fabd32e48e1e60efa1f3554a3242" - integrity sha512-yA7IWp+5Qqf+TLbd8b35ySFOFzUfL7i+4If50EqvjT6w35X8Lv0eBHb6rATeWmucks37w+zV+tWnOXI9JlG6Eg== + version "4.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.1.tgz#b9c7313321cb837e2bf8bebe7acc2220659e67d3" + integrity sha512-aoIusj/8CR+xDWmZxARivZjbMBQTT9dImUtdZ8tVCVRXgBUuuZyM5Of5A9D9arQPxbi/0rlJLcuArclz/rCMJw== dependencies: - "@typescript-eslint/experimental-utils" "4.26.0" - "@typescript-eslint/scope-manager" "4.26.0" + "@typescript-eslint/experimental-utils" "4.26.1" + "@typescript-eslint/scope-manager" "4.26.1" debug "^4.3.1" functional-red-black-tree "^1.0.1" lodash "^4.17.21" @@ -2039,15 +2039,15 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.26.0": - version "4.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.0.tgz#ba7848b3f088659cdf71bce22454795fc55be99a" - integrity sha512-TH2FO2rdDm7AWfAVRB5RSlbUhWxGVuxPNzGT7W65zVfl8H/WeXTk1e69IrcEVsBslrQSTDKQSaJD89hwKrhdkw== +"@typescript-eslint/experimental-utils@4.26.1": + version "4.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.1.tgz#a35980a2390da9232aa206b27f620eab66e94142" + integrity sha512-sQHBugRhrXzRCs9PaGg6rowie4i8s/iD/DpTB+EXte8OMDfdCG5TvO73XlO9Wc/zi0uyN4qOmX9hIjQEyhnbmQ== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.26.0" - "@typescript-eslint/types" "4.26.0" - "@typescript-eslint/typescript-estree" "4.26.0" + "@typescript-eslint/scope-manager" "4.26.1" + "@typescript-eslint/types" "4.26.1" + "@typescript-eslint/typescript-estree" "4.26.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -2069,11 +2069,24 @@ "@typescript-eslint/types" "4.26.0" "@typescript-eslint/visitor-keys" "4.26.0" +"@typescript-eslint/scope-manager@4.26.1": + version "4.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.26.1.tgz#075a74a15ff33ee3a7ed33e5fce16ee86689f662" + integrity sha512-TW1X2p62FQ8Rlne+WEShyd7ac2LA6o27S9i131W4NwDSfyeVlQWhw8ylldNNS8JG6oJB9Ha9Xyc+IUcqipvheQ== + dependencies: + "@typescript-eslint/types" "4.26.1" + "@typescript-eslint/visitor-keys" "4.26.1" + "@typescript-eslint/types@4.26.0": version "4.26.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.26.0.tgz#7c6732c0414f0a69595f4f846ebe12616243d546" integrity sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A== +"@typescript-eslint/types@4.26.1": + version "4.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.26.1.tgz#9e7c523f73c34b04a765e4167ca5650436ef1d38" + integrity sha512-STyMPxR3cS+LaNvS8yK15rb8Y0iL0tFXq0uyl6gY45glyI7w0CsyqyEXl/Fa0JlQy+pVANeK3sbwPneCbWE7yg== + "@typescript-eslint/typescript-estree@4.26.0": version "4.26.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz#aea17a40e62dc31c63d5b1bbe9a75783f2ce7109" @@ -2087,6 +2100,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.26.1": + version "4.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.1.tgz#b2ce2e789233d62283fae2c16baabd4f1dbc9633" + integrity sha512-l3ZXob+h0NQzz80lBGaykdScYaiEbFqznEs99uwzm8fPHhDjwaBFfQkjUC/slw6Sm7npFL8qrGEAMxcfBsBJUg== + dependencies: + "@typescript-eslint/types" "4.26.1" + "@typescript-eslint/visitor-keys" "4.26.1" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.26.0": version "4.26.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz#26d2583169222815be4dcd1da4fe5459bc3bcc23" @@ -2095,6 +2121,14 @@ "@typescript-eslint/types" "4.26.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.26.1": + version "4.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.1.tgz#0d55ea735cb0d8903b198017d6d4f518fdaac546" + integrity sha512-IGouNSSd+6x/fHtYRyLOM6/C+QxMDzWlDtN41ea+flWuSF9g02iqcIlX8wM53JkfljoIjP0U+yp7SiTS1onEkw== + dependencies: + "@typescript-eslint/types" "4.26.1" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.0": version "1.11.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" From 30db125e7a2b5b70f53ff1997091d357e8f2e987 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Jun 2021 14:23:56 +0200 Subject: [PATCH 006/173] chore(deps-dev): bump @typescript-eslint/parser from 4.26.0 to 4.26.1 (#2773) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.26.0 to 4.26.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.26.1/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 13293a2a8f4..0c79658afdd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2052,13 +2052,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.26.0.tgz#31b6b732c9454f757b020dab9b6754112aa5eeaf" - integrity sha512-b4jekVJG9FfmjUfmM4VoOItQhPlnt6MPOBUL0AQbiTmm+SSpSdhHYlwayOm4IW9KLI/4/cRKtQCmDl1oE2OlPg== + version "4.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.26.1.tgz#cecfdd5eb7a5c13aabce1c1cfd7fbafb5a0f1e8e" + integrity sha512-q7F3zSo/nU6YJpPJvQveVlIIzx9/wu75lr6oDbDzoeIRWxpoc/HQ43G4rmMoCc5my/3uSj2VEpg/D83LYZF5HQ== dependencies: - "@typescript-eslint/scope-manager" "4.26.0" - "@typescript-eslint/types" "4.26.0" - "@typescript-eslint/typescript-estree" "4.26.0" + "@typescript-eslint/scope-manager" "4.26.1" + "@typescript-eslint/types" "4.26.1" + "@typescript-eslint/typescript-estree" "4.26.1" debug "^4.3.1" "@typescript-eslint/scope-manager@4.26.0": From 51a2fc4f0ab407eb3145ac20301488393dcbdd1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Jun 2021 14:24:20 +0200 Subject: [PATCH 007/173] chore(deps-dev): bump @types/node from 15.12.0 to 15.12.2 (#2774) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 15.12.0 to 15.12.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0c79658afdd..bb87abb9cf1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1930,9 +1930,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@^15.0.3": - version "15.12.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.0.tgz#6a459d261450a300e6865faeddb5af01c3389bb3" - integrity sha512-+aHJvoCsVhO2ZCuT4o5JtcPrCPyDE3+1nvbDprYes+pPkEsbjH7AGUCNtjMOXS0fqH14t+B7yLzaqSz92FPWyw== + version "15.12.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d" + integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww== "@types/normalize-package-data@^2.4.0": version "2.4.0" From b368fd818af1396238087379be3b93704956df7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Jun 2021 14:24:49 +0200 Subject: [PATCH 008/173] chore(deps): bump webpack-merge from 5.7.3 to 5.8.0 (#2775) Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 5.7.3 to 5.8.0. - [Release notes](https://github.com/survivejs/webpack-merge/releases) - [Changelog](https://github.com/survivejs/webpack-merge/blob/develop/CHANGELOG.md) - [Commits](https://github.com/survivejs/webpack-merge/compare/v5.7.3...v5.8.0) --- updated-dependencies: - dependency-name: webpack-merge dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index bb87abb9cf1..d3cc5e924a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11013,9 +11013,9 @@ webpack-log@^2.0.0: uuid "^3.3.2" webpack-merge@^5.7.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.7.3.tgz#2a0754e1877a25a8bbab3d2475ca70a052708213" - integrity sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA== + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== dependencies: clone-deep "^4.0.1" wildcard "^2.0.0" From f4dc176a939327ee2e8356bf43ed71979fdc6c9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Jun 2021 14:03:51 +0300 Subject: [PATCH 009/173] chore(deps): bump execa from 5.0.1 to 5.1.1 (#2766) Bumps [execa](https://github.com/sindresorhus/execa) from 5.0.1 to 5.1.1. - [Release notes](https://github.com/sindresorhus/execa/releases) - [Commits](https://github.com/sindresorhus/execa/compare/v5.0.1...v5.1.1) --- updated-dependencies: - dependency-name: execa dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d3cc5e924a6..4d80083cd72 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4502,9 +4502,9 @@ execa@^4.0.0, execa@^4.1.0: strip-final-newline "^2.0.0" execa@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.1.tgz#aee63b871c9b2cb56bc9addcd3c70a785c6bf0d1" - integrity sha512-4hFTjFbFzQa3aCLobpbPJR/U+VoL1wdV5ozOWjeet0AWDeYr9UFGM1eUFWHX+VtOWFq4p0xXUXfW1YxUaP4fpw== + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" get-stream "^6.0.0" From 59d644d5b445bd86dd52aa00f0d3f921cd206456 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Jun 2021 16:21:26 +0300 Subject: [PATCH 010/173] chore(deps-dev): bump eslint from 7.27.0 to 7.28.0 (#2763) Bumps [eslint](https://github.com/eslint/eslint) from 7.27.0 to 7.28.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.27.0...v7.28.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 71 ++++++++++++------------------------------------------- 1 file changed, 15 insertions(+), 56 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4d80083cd72..b403963c296 100644 --- a/yarn.lock +++ b/yarn.lock @@ -592,15 +592,15 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== -"@eslint/eslintrc@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.1.tgz#442763b88cecbe3ee0ec7ca6d6dd6168550cbf14" - integrity sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ== +"@eslint/eslintrc@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" + integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== dependencies: ajv "^6.12.4" debug "^4.1.1" espree "^7.3.0" - globals "^12.1.0" + globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" js-yaml "^3.13.1" @@ -2061,14 +2061,6 @@ "@typescript-eslint/typescript-estree" "4.26.1" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.26.0": - version "4.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz#60d1a71df162404e954b9d1c6343ff3bee496194" - integrity sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg== - dependencies: - "@typescript-eslint/types" "4.26.0" - "@typescript-eslint/visitor-keys" "4.26.0" - "@typescript-eslint/scope-manager@4.26.1": version "4.26.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.26.1.tgz#075a74a15ff33ee3a7ed33e5fce16ee86689f662" @@ -2077,29 +2069,11 @@ "@typescript-eslint/types" "4.26.1" "@typescript-eslint/visitor-keys" "4.26.1" -"@typescript-eslint/types@4.26.0": - version "4.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.26.0.tgz#7c6732c0414f0a69595f4f846ebe12616243d546" - integrity sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A== - "@typescript-eslint/types@4.26.1": version "4.26.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.26.1.tgz#9e7c523f73c34b04a765e4167ca5650436ef1d38" integrity sha512-STyMPxR3cS+LaNvS8yK15rb8Y0iL0tFXq0uyl6gY45glyI7w0CsyqyEXl/Fa0JlQy+pVANeK3sbwPneCbWE7yg== -"@typescript-eslint/typescript-estree@4.26.0": - version "4.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz#aea17a40e62dc31c63d5b1bbe9a75783f2ce7109" - integrity sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg== - dependencies: - "@typescript-eslint/types" "4.26.0" - "@typescript-eslint/visitor-keys" "4.26.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.26.1": version "4.26.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.1.tgz#b2ce2e789233d62283fae2c16baabd4f1dbc9633" @@ -2113,14 +2087,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.26.0": - version "4.26.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz#26d2583169222815be4dcd1da4fe5459bc3bcc23" - integrity sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg== - dependencies: - "@typescript-eslint/types" "4.26.0" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.26.1": version "4.26.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.1.tgz#0d55ea735cb0d8903b198017d6d4f518fdaac546" @@ -4364,12 +4330,12 @@ eslint-visitor-keys@^2.0.0: integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint@^7.12.1: - version "7.27.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.27.0.tgz#665a1506d8f95655c9274d84bd78f7166b07e9c7" - integrity sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA== + version "7.28.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820" + integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g== dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.1" + "@eslint/eslintrc" "^0.4.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -4386,7 +4352,7 @@ eslint@^7.12.1: fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" + glob-parent "^5.1.2" globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" @@ -5173,7 +5139,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1: +glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5250,17 +5216,10 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -globals@^13.6.0: - version "13.8.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" - integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== +globals@^13.6.0, globals@^13.9.0: + version "13.9.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" + integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== dependencies: type-fest "^0.20.2" From e53f1645c729c3bbcb27ffd41c999ed321f86f9d Mon Sep 17 00:00:00 2001 From: James George Date: Wed, 9 Jun 2021 21:54:06 +0530 Subject: [PATCH 011/173] feat(init-generator): add ability to specify a package manager of choice (#2769) * feat: add ability to specify a package manager of choice * chore: choose default installer based on the lock file presence * test: update test suite --- packages/generators/src/init-generator.ts | 13 ++++++++-- .../lib/utils/get-available-installers.js | 25 +++++++++++++++++++ packages/webpack-cli/lib/utils/index.js | 4 +++ test/init/init.test.js | 17 +++++++++---- 4 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 packages/webpack-cli/lib/utils/get-available-installers.js diff --git a/packages/generators/src/init-generator.ts b/packages/generators/src/init-generator.ts index 1006e2aeb5a..d8868052102 100644 --- a/packages/generators/src/init-generator.ts +++ b/packages/generators/src/init-generator.ts @@ -99,8 +99,17 @@ export default class InitGenerator extends CustomGenerator { } } - public installPlugins(): void { - const packager = this.utils.getPackageManager(); + public async installPlugins(): Promise { + // Prompt for the package manager of choice + const defaultPackager = this.utils.getPackageManager(); + const { packager } = await Question.List( + this, + "packager", + "Pick a package manager:", + this.utils.getAvailableInstallers(), + defaultPackager, + this.force, + ); const opts: { dev?: boolean; "save-dev"?: boolean; diff --git a/packages/webpack-cli/lib/utils/get-available-installers.js b/packages/webpack-cli/lib/utils/get-available-installers.js new file mode 100644 index 00000000000..d2ee92414c5 --- /dev/null +++ b/packages/webpack-cli/lib/utils/get-available-installers.js @@ -0,0 +1,25 @@ +const { sync } = require("execa"); + +const utils = require("./"); + +function hasPmInstalled(packageManager) { + try { + sync(packageManager, ["--version"]); + return packageManager; + } catch (err) { + return false; + } +} + +function getAvailableInstallers() { + const installers = ["npm", "yarn", "pnpm"]; + const availableInstallers = installers.filter((installer) => hasPmInstalled(installer)); + + if (!availableInstallers.length) { + utils.logger.error("No package manager found."); + process.exit(2); + } + return availableInstallers; +} + +module.exports = getAvailableInstallers; diff --git a/packages/webpack-cli/lib/utils/index.js b/packages/webpack-cli/lib/utils/index.js index 800174bec22..e5ac14c3407 100644 --- a/packages/webpack-cli/lib/utils/index.js +++ b/packages/webpack-cli/lib/utils/index.js @@ -23,6 +23,10 @@ module.exports = { return require("./dynamic-import-loader"); }, + get getAvailableInstallers() { + return require("./get-available-installers"); + }, + get getPackageManager() { return require("./get-package-manager"); }, diff --git a/test/init/init.test.js b/test/init/init.test.js index a8ef6cca672..c7221110496 100644 --- a/test/init/init.test.js +++ b/test/init/init.test.js @@ -144,7 +144,7 @@ describe("init command", () => { const { stdout, stderr } = await runPromptWithAnswers( assetsPath, ["init"], - [`${DOWN}${DOWN}${ENTER}`, `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, ENTER], + [`${DOWN}${DOWN}${ENTER}`, `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, ENTER, ENTER], ); expect(stdout).toContain("Project has been initialised with webpack!"); @@ -170,7 +170,7 @@ describe("init command", () => { const { stdout, stderr } = await runPromptWithAnswers( assetsPath, ["init"], - [`${DOWN}${ENTER}`, `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, ENTER], + [`${DOWN}${ENTER}`, `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, ENTER, ENTER], ); expect(stdout).toContain("Project has been initialised with webpack!"); @@ -205,6 +205,7 @@ describe("init command", () => { `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, + ENTER, ], ); @@ -239,6 +240,7 @@ describe("init command", () => { `n${ENTER}`, `y${ENTER}`, `n${ENTER}`, + ENTER, ], ); @@ -279,6 +281,7 @@ describe("init command", () => { `n${ENTER}`, `n${ENTER}`, `y${ENTER}`, + ENTER, ], ); @@ -313,6 +316,7 @@ describe("init command", () => { `y${ENTER}`, `y${ENTER}`, `n${ENTER}`, + ENTER, ], ); @@ -353,6 +357,7 @@ describe("init command", () => { `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, + ENTER, ], ); @@ -387,6 +392,7 @@ describe("init command", () => { `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, + ENTER, ], ); @@ -412,7 +418,7 @@ describe("init command", () => { const { stdout, stderr } = await runPromptWithAnswers( assetsPath, ["init"], - [ENTER, ENTER, `n${ENTER}`, `n${ENTER}`, ENTER], + [ENTER, ENTER, `n${ENTER}`, `n${ENTER}`, ENTER, ENTER], ); expect(stdout).toContain("Do you want to use webpack-dev-server?"); @@ -445,6 +451,7 @@ describe("init command", () => { `${DOWN}${ENTER}`, ENTER, `n${ENTER}`, + ENTER, ], ); @@ -476,7 +483,7 @@ describe("init command", () => { const { stdout, stderr } = await runPromptWithAnswers( assetsPath, ["init"], - [ENTER, `n${ENTER}`, ENTER, `n${ENTER}`, ENTER], + [ENTER, `n${ENTER}`, ENTER, `n${ENTER}`, ENTER, ENTER], ); expect(stdout).toContain( @@ -504,7 +511,7 @@ describe("init command", () => { const { stdout, stderr } = await runPromptWithAnswers( assetsPath, ["init"], - [ENTER, `n${ENTER}`, ENTER, ENTER, ENTER], + [ENTER, `n${ENTER}`, ENTER, ENTER, ENTER, ENTER], ); expect(stdout).toContain("Do you want to add PWA support?"); From 5bd0df42dea72203f3042405d6ff35b4422df763 Mon Sep 17 00:00:00 2001 From: James George Date: Thu, 10 Jun 2021 17:50:16 +0530 Subject: [PATCH 012/173] feat: add prompt to select a package manager of choice (#2779) --- packages/generators/src/addon-generator.ts | 24 +++++++++++++++------- test/loader/loader.test.js | 10 ++++----- test/plugin/plugin.test.js | 10 ++++----- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/packages/generators/src/addon-generator.ts b/packages/generators/src/addon-generator.ts index 270cdffcbc4..b557f1e4ea9 100644 --- a/packages/generators/src/addon-generator.ts +++ b/packages/generators/src/addon-generator.ts @@ -34,9 +34,10 @@ const addonGenerator = ( templateFn: (instance: any) => Record, ): Generator.GeneratorConstructor => { return class extends Generator { - public template: string; + public packageManager: string; public resolvedTemplatePath: string; public supportedTemplates: string[]; + public template: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any public utils: any; @@ -74,9 +75,19 @@ const addonGenerator = ( } this.resolvedTemplatePath = path.join(templateDir, this.template); - return this.prompt(prompts).then((props: Generator.Question): void => { - this.props = props; - }); + this.props = await this.prompt(prompts); + + // Prompt for the package manager of choice + const defaultPackager = this.utils.getPackageManager(); + const { packager } = await List( + this, + "packager", + "Pick a package manager:", + this.utils.getAvailableInstallers(), + defaultPackager, + false, + ); + this.packageManager = packager; } public default(): void { @@ -141,13 +152,12 @@ const addonGenerator = ( } public install(): void { - const packager = this.utils.getPackageManager(); const opts: { dev?: boolean; "save-dev"?: boolean; - } = packager === "yarn" ? { dev: true } : { "save-dev": true }; + } = this.packageManager === "yarn" ? { dev: true } : { "save-dev": true }; - this.scheduleInstallTask(packager, ["webpack-defaults", "bluebird"], opts); + this.scheduleInstallTask(this.packageManager, ["webpack-defaults", "bluebird"], opts); } }; }; diff --git a/test/loader/loader.test.js b/test/loader/loader.test.js index 0656845c50a..3797df329f1 100644 --- a/test/loader/loader.test.js +++ b/test/loader/loader.test.js @@ -32,7 +32,7 @@ describe("loader command", () => { it("should scaffold loader with default name if no loader name provided", async () => { const assetsPath = await uniqueDirectoryForTest(); const { defaultLoaderPath } = dataForTests(assetsPath); - let { stdout } = await runPromptWithAnswers(assetsPath, ["loader"], [`${ENTER}`]); + let { stdout } = await runPromptWithAnswers(assetsPath, ["loader"], [ENTER, ENTER]); expect(normalizeStdout(stdout)).toContain(firstPrompt); @@ -72,7 +72,7 @@ describe("loader command", () => { let { stdout } = await runPromptWithAnswers( assetsPath, ["loader"], - [`${loaderName}${ENTER}`], + [`${loaderName}${ENTER}`, ENTER], ); expect(normalizeStdout(stdout)).toContain(firstPrompt); @@ -113,7 +113,7 @@ describe("loader command", () => { let { stdout } = await runPromptWithAnswers( assetsPath, ["loader", "test-assets"], - [`${loaderName}${ENTER}`], + [`${loaderName}${ENTER}`, ENTER], ); expect(normalizeStdout(stdout)).toContain(firstPrompt); @@ -155,7 +155,7 @@ describe("loader command", () => { let { stdout } = await runPromptWithAnswers( assetsPath, ["loader", "./"], - [`${loaderName}${ENTER}`], + [`${loaderName}${ENTER}`, ENTER], ); expect(normalizeStdout(stdout)).toContain(firstPrompt); @@ -203,7 +203,7 @@ describe("loader command", () => { let { stdout } = await runPromptWithAnswers( assetsPath, ["loader", "-t", "default"], - [`${ENTER}`], + [`${ENTER}`, ENTER], ); expect(normalizeStdout(stdout)).toContain(firstPrompt); diff --git a/test/plugin/plugin.test.js b/test/plugin/plugin.test.js index 080e03b3342..0dee10250bd 100644 --- a/test/plugin/plugin.test.js +++ b/test/plugin/plugin.test.js @@ -31,7 +31,7 @@ describe("plugin command", () => { it("should scaffold plugin with default name if no plugin name provided", async () => { const assetsPath = await uniqueDirectoryForTest(); const { defaultPluginPath } = dataForTests(assetsPath); - const { stdout } = await runPromptWithAnswers(assetsPath, ["plugin"], [`${ENTER}`]); + const { stdout } = await runPromptWithAnswers(assetsPath, ["plugin"], [ENTER, ENTER]); expect(normalizeStdout(stdout)).toContain(firstPrompt); @@ -71,7 +71,7 @@ describe("plugin command", () => { const { stdout } = await runPromptWithAnswers( assetsPath, ["plugin"], - [`${pluginName}${ENTER}`], + [`${pluginName}${ENTER}`, ENTER], ); expect(normalizeStdout(stdout)).toContain(firstPrompt); @@ -112,7 +112,7 @@ describe("plugin command", () => { const { stdout } = await runPromptWithAnswers( assetsPath, ["plugin", "test-assets"], - [`${pluginName}${ENTER}`], + [`${pluginName}${ENTER}`, ENTER], ); expect(normalizeStdout(stdout)).toContain(firstPrompt); @@ -158,7 +158,7 @@ describe("plugin command", () => { const { stdout } = await runPromptWithAnswers( genPath, ["plugin", "./"], - [`${pluginName}${ENTER}`], + [`${pluginName}${ENTER}`, ENTER], ); expect(normalizeStdout(stdout)).toContain(firstPrompt); @@ -206,7 +206,7 @@ describe("plugin command", () => { const { stdout } = await runPromptWithAnswers( assetsPath, ["plugin", "-t", "default"], - [`${ENTER}`], + [`${ENTER}`, ENTER], ); expect(normalizeStdout(stdout)).toContain(firstPrompt); // Check if the output directory exists with the appropriate plugin name From cfdb925c20566944800ea449f4cdce5f7f690ad4 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Thu, 10 Jun 2021 18:50:28 +0200 Subject: [PATCH 013/173] chore: revise documentation (#2777) * chore: revise documentation * chore(docs): move INIT md to its folder * chore: Update README.md * chore: move readme --- README.md | 22 +++++++++++++++------- SECURITY.md | 2 +- INIT.md => packages/generators/INIT.md | 0 3 files changed, 16 insertions(+), 8 deletions(-) rename INIT.md => packages/generators/INIT.md (100%) diff --git a/README.md b/README.md index 92506eccba1..3bf5bf3819c 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,9 @@ ## About -webpack CLI provides a flexible set of commands for developers to increase speed when setting up a custom webpack project. As of webpack v4, webpack is not expecting a configuration file, but often developers want to create a more custom webpack configuration based on their use-cases and needs. webpack CLI addresses these needs by providing a set of tools to improve the setup of custom webpack configuration. +webpack CLI provides the interface of options webpack uses in its configuration file. The CLI options override options passed in the configuration file. + +The CLI provides a rich set of commands that helps you develop your application faster. ### How to install @@ -47,7 +49,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). The main CLI logic resides in `packages/webpack-cli`, while commands supported by the CLI, has dedicated subfolders in the folder `packages`. A summary of supported commands is described below. ### Commands @@ -57,7 +59,7 @@ Thus, webpack CLI provides different commands for many common tasks. - `build|bundle|b [entries...] [options]` - Run webpack (default command, can be omitted). - [`configtest|t [config-path]`](./packages/configtest/README.md#webpack-cli-configtest) - Validate a webpack configuration. - `help|h [command] [option]` - Display help for commands and options. -- [`init|create|new|c|n [generation-path] [options]`](./INIT.md#webpack-cli-init) - Create a new webpack project. +- [`init|create|new|c|n [generation-path] [options]`](./packages/generators/INIT.md#webpack-cli-init) - Create a new webpack project. - [`info|i [options]`](./packages/info/README.md#webpack-cli-info) - Returns information related to the local environment. - [`migrate|m [new-config-path]`](https://www.npmjs.com/package/@webpack-cli/migrate) - Migrate project from one version to another. - [`plugin|p [output-path] [options]`](./packages/generators#generators) - Initiate new plugin project. @@ -68,20 +70,22 @@ Thus, webpack CLI provides different commands for many common tasks. ### Utilities -The project also has several utility packages which are used by other commands +The project has several utility packages which are used by other commands - [`generators`](./packages/generators/README.md) - Contains all webpack-cli related yeoman generators. ## Getting started -When you have followed the [Getting Started](https://webpack.js.org/guides/getting-started/) guide of webpack then webpack CLI is already installed! Otherwise, you would need to install webpack CLI and the packages you want to use. If you want to use the `init` command to create a new `webpack.config.js` configuration file: +When you have followed the [Getting Started](https://webpack.js.org/guides/getting-started/) guide of webpack, then webpack CLI is already installed! + +Otherwise, you would need to install webpack CLI and the packages you want to use. If you want to use the `init` command to create a new configuration file: ```sh npm i webpack-cli @webpack-cli/init npx webpack-cli init ``` -You will be prompted for some questions about what how you want to generate your config file when running the `init` command so webpack CLI can provide the best fitting configuration. +You will be prompted for some questions about which features you want to use, such as `scss`, PWA support or multiple entry-points. ## Exit codes and their meanings @@ -93,7 +97,7 @@ You will be prompted for some questions about what how you want to generate your ## Contributing and Internal Documentation -The webpack family welcomes any contributor, small or big. We are happy to elaborate, guide you through the source code and find issues you might want to work on! To get started have a look at our [documentation on contributing](./.github/CONTRIBUTING.md). +The webpack family welcomes any contributor, small or big. We are happy to elaborate, guide you through the source code and find issues you might want to work on! To get started have a look at our [contribution documentation](./.github/CONTRIBUTING.md). ## Open Collective @@ -111,3 +115,7 @@ If you like **webpack**, please consider donating to our [Open Collective](https [size-url]: https://packagephobia.com/result?p=webpack-cli [chat]: https://badges.gitter.im/webpack/webpack.svg [chat-url]: https://gitter.im/webpack/webpack + +## Code of Conduct + +Guidelines to how the webpack organization expects you to behave is documented under [Code of Conduct](./CODE_OF_CONDUCT.md) diff --git a/SECURITY.md b/SECURITY.md index 9f3479c7a72..8722a8127b0 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -18,4 +18,4 @@ webpack CLI is currently supporting webpack v4 and webpack v5. Security fixes ar ## Reporting a Vulnerability -To report a vulnerability, please contact one of webpack maintainers through the email provided from either npm, GitHub or reach out at other social media platforms. For third party security vulnerabilities, submitting an issue or Pull Request to fix the security vulnerability is much appreciated. +To report a vulnerability, please contact one of webpack maintainers through the email provided from either npm, GitHub or reach out at other social media platforms. For third party security vulnerabilities, submitting an issue or Pull Request to fix the security vulnerability is much appreciated. We also use dependabot from GitHub to avoid vulnerabilities. diff --git a/INIT.md b/packages/generators/INIT.md similarity index 100% rename from INIT.md rename to packages/generators/INIT.md From 3f44c6751f51dd34cf51d699c6571f8e03e99cef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Jun 2021 14:59:38 +0300 Subject: [PATCH 014/173] chore(deps-dev): bump @typescript-eslint/parser --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index b403963c296..8a432c0c6c1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2052,13 +2052,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.26.1.tgz#cecfdd5eb7a5c13aabce1c1cfd7fbafb5a0f1e8e" - integrity sha512-q7F3zSo/nU6YJpPJvQveVlIIzx9/wu75lr6oDbDzoeIRWxpoc/HQ43G4rmMoCc5my/3uSj2VEpg/D83LYZF5HQ== + version "4.27.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.27.0.tgz#85447e573364bce4c46c7f64abaa4985aadf5a94" + integrity sha512-XpbxL+M+gClmJcJ5kHnUpBGmlGdgNvy6cehgR6ufyxkEJMGP25tZKCaKyC0W/JVpuhU3VU1RBn7SYUPKSMqQvQ== dependencies: - "@typescript-eslint/scope-manager" "4.26.1" - "@typescript-eslint/types" "4.26.1" - "@typescript-eslint/typescript-estree" "4.26.1" + "@typescript-eslint/scope-manager" "4.27.0" + "@typescript-eslint/types" "4.27.0" + "@typescript-eslint/typescript-estree" "4.27.0" debug "^4.3.1" "@typescript-eslint/scope-manager@4.26.1": @@ -2069,11 +2069,24 @@ "@typescript-eslint/types" "4.26.1" "@typescript-eslint/visitor-keys" "4.26.1" +"@typescript-eslint/scope-manager@4.27.0": + version "4.27.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.27.0.tgz#b0b1de2b35aaf7f532e89c8e81d0fa298cae327d" + integrity sha512-DY73jK6SEH6UDdzc6maF19AHQJBFVRf6fgAXHPXCGEmpqD4vYgPEzqpFz1lf/daSbOcMpPPj9tyXXDPW2XReAw== + dependencies: + "@typescript-eslint/types" "4.27.0" + "@typescript-eslint/visitor-keys" "4.27.0" + "@typescript-eslint/types@4.26.1": version "4.26.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.26.1.tgz#9e7c523f73c34b04a765e4167ca5650436ef1d38" integrity sha512-STyMPxR3cS+LaNvS8yK15rb8Y0iL0tFXq0uyl6gY45glyI7w0CsyqyEXl/Fa0JlQy+pVANeK3sbwPneCbWE7yg== +"@typescript-eslint/types@4.27.0": + version "4.27.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.27.0.tgz#712b408519ed699baff69086bc59cd2fc13df8d8" + integrity sha512-I4ps3SCPFCKclRcvnsVA/7sWzh7naaM/b4pBO2hVxnM3wrU51Lveybdw5WoIktU/V4KfXrTt94V9b065b/0+wA== + "@typescript-eslint/typescript-estree@4.26.1": version "4.26.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.1.tgz#b2ce2e789233d62283fae2c16baabd4f1dbc9633" @@ -2087,6 +2100,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.27.0": + version "4.27.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.27.0.tgz#189a7b9f1d0717d5cccdcc17247692dedf7a09da" + integrity sha512-KH03GUsUj41sRLLEy2JHstnezgpS5VNhrJouRdmh6yNdQ+yl8w5LrSwBkExM+jWwCJa7Ct2c8yl8NdtNRyQO6g== + dependencies: + "@typescript-eslint/types" "4.27.0" + "@typescript-eslint/visitor-keys" "4.27.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.26.1": version "4.26.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.1.tgz#0d55ea735cb0d8903b198017d6d4f518fdaac546" @@ -2095,6 +2121,14 @@ "@typescript-eslint/types" "4.26.1" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.27.0": + version "4.27.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.27.0.tgz#f56138b993ec822793e7ebcfac6ffdce0a60cb81" + integrity sha512-es0GRYNZp0ieckZ938cEANfEhsfHrzuLrePukLKtY3/KPXcq1Xd555Mno9/GOgXhKzn0QfkDLVgqWO3dGY80bg== + dependencies: + "@typescript-eslint/types" "4.27.0" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.0": version "1.11.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" From 327195dbadc5ffbbdb42514f3402ea913f7b7d88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Jun 2021 15:00:07 +0300 Subject: [PATCH 015/173] chore(deps-dev): bump webpack from 5.38.1 to 5.39.0 (#2782) --- yarn.lock | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8a432c0c6c1..bf5f4ac3643 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2343,12 +2343,7 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.2.1: - version "8.2.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.2.4.tgz#caba24b08185c3b56e3168e97d15ed17f4d31fd0" - integrity sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg== - -acorn@^8.2.4: +acorn@^8.0.4, acorn@^8.2.1, acorn@^8.2.4: version "8.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.3.0.tgz#1193f9b96c4e8232f00b11a9edff81b2c8b98b88" integrity sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw== @@ -11022,9 +11017,9 @@ webpack-sources@^2.3.0: source-map "^0.6.1" webpack@^5.38.1: - version "5.38.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.38.1.tgz#5224c7f24c18e729268d3e3bc97240d6e880258e" - integrity sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g== + version "5.39.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.39.0.tgz#37d6899f1f40c31d5901abc0f39bc8cc7224138c" + integrity sha512-25CHmuDj+oOTyteI13sUqNlCnjCnySuhiKWE/cRYPQYeoQ3ijHgyWX27CiyUKLNGq27v8S0mrksyTreT/xo7pg== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.47" From cbb218e9235ccf7ec90d983798f5c016c9eeb73f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Jun 2021 15:00:20 +0300 Subject: [PATCH 016/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin (#2781) --- yarn.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index bf5f4ac3643..f93ba5020d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2026,12 +2026,12 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.1.tgz#b9c7313321cb837e2bf8bebe7acc2220659e67d3" - integrity sha512-aoIusj/8CR+xDWmZxARivZjbMBQTT9dImUtdZ8tVCVRXgBUuuZyM5Of5A9D9arQPxbi/0rlJLcuArclz/rCMJw== + version "4.27.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.27.0.tgz#0b7fc974e8bc9b2b5eb98ed51427b0be529b4ad0" + integrity sha512-DsLqxeUfLVNp3AO7PC3JyaddmEHTtI9qTSAs+RB6ja27QvIM0TA8Cizn1qcS6vOu+WDLFJzkwkgweiyFhssDdQ== dependencies: - "@typescript-eslint/experimental-utils" "4.26.1" - "@typescript-eslint/scope-manager" "4.26.1" + "@typescript-eslint/experimental-utils" "4.27.0" + "@typescript-eslint/scope-manager" "4.27.0" debug "^4.3.1" functional-red-black-tree "^1.0.1" lodash "^4.17.21" @@ -2039,15 +2039,15 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.26.1": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.1.tgz#a35980a2390da9232aa206b27f620eab66e94142" - integrity sha512-sQHBugRhrXzRCs9PaGg6rowie4i8s/iD/DpTB+EXte8OMDfdCG5TvO73XlO9Wc/zi0uyN4qOmX9hIjQEyhnbmQ== +"@typescript-eslint/experimental-utils@4.27.0": + version "4.27.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.27.0.tgz#78192a616472d199f084eab8f10f962c0757cd1c" + integrity sha512-n5NlbnmzT2MXlyT+Y0Jf0gsmAQzCnQSWXKy4RGSXVStjDvS5we9IWbh7qRVKdGcxT0WYlgcCYUK/HRg7xFhvjQ== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.26.1" - "@typescript-eslint/types" "4.26.1" - "@typescript-eslint/typescript-estree" "4.26.1" + "@typescript-eslint/scope-manager" "4.27.0" + "@typescript-eslint/types" "4.27.0" + "@typescript-eslint/typescript-estree" "4.27.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" From 6b680743a6361c2b732bf009b6190675065a7c40 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Jun 2021 13:28:40 +0300 Subject: [PATCH 017/173] chore(deps): bump ws from 6.2.1 to 6.2.2 (#2784) Bumps [ws](https://github.com/websockets/ws) from 6.2.1 to 6.2.2. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/6.2.1...6.2.2) --- updated-dependencies: - dependency-name: ws dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index f93ba5020d2..6ffd56c20b8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11234,18 +11234,13 @@ write-pkg@^4.0.0: write-json-file "^3.2.0" ws@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + version "6.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== dependencies: async-limiter "~1.0.0" -ws@^7.3.1: - version "7.4.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" - integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== - -ws@^7.4.5: +ws@^7.3.1, ws@^7.4.5: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== From 7b82539f9aff2109a45be2839c88301525eed4dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Jun 2021 13:34:54 +0200 Subject: [PATCH 018/173] chore(deps-dev): bump typescript from 4.3.2 to 4.3.3 (#2785) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.3.2 to 4.3.3. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v4.3.2...v4.3.3) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 40 +++------------------------------------- 1 file changed, 3 insertions(+), 37 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6ffd56c20b8..2b953576c03 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2061,14 +2061,6 @@ "@typescript-eslint/typescript-estree" "4.27.0" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.26.1": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.26.1.tgz#075a74a15ff33ee3a7ed33e5fce16ee86689f662" - integrity sha512-TW1X2p62FQ8Rlne+WEShyd7ac2LA6o27S9i131W4NwDSfyeVlQWhw8ylldNNS8JG6oJB9Ha9Xyc+IUcqipvheQ== - dependencies: - "@typescript-eslint/types" "4.26.1" - "@typescript-eslint/visitor-keys" "4.26.1" - "@typescript-eslint/scope-manager@4.27.0": version "4.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.27.0.tgz#b0b1de2b35aaf7f532e89c8e81d0fa298cae327d" @@ -2077,29 +2069,11 @@ "@typescript-eslint/types" "4.27.0" "@typescript-eslint/visitor-keys" "4.27.0" -"@typescript-eslint/types@4.26.1": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.26.1.tgz#9e7c523f73c34b04a765e4167ca5650436ef1d38" - integrity sha512-STyMPxR3cS+LaNvS8yK15rb8Y0iL0tFXq0uyl6gY45glyI7w0CsyqyEXl/Fa0JlQy+pVANeK3sbwPneCbWE7yg== - "@typescript-eslint/types@4.27.0": version "4.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.27.0.tgz#712b408519ed699baff69086bc59cd2fc13df8d8" integrity sha512-I4ps3SCPFCKclRcvnsVA/7sWzh7naaM/b4pBO2hVxnM3wrU51Lveybdw5WoIktU/V4KfXrTt94V9b065b/0+wA== -"@typescript-eslint/typescript-estree@4.26.1": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.1.tgz#b2ce2e789233d62283fae2c16baabd4f1dbc9633" - integrity sha512-l3ZXob+h0NQzz80lBGaykdScYaiEbFqznEs99uwzm8fPHhDjwaBFfQkjUC/slw6Sm7npFL8qrGEAMxcfBsBJUg== - dependencies: - "@typescript-eslint/types" "4.26.1" - "@typescript-eslint/visitor-keys" "4.26.1" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.27.0": version "4.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.27.0.tgz#189a7b9f1d0717d5cccdcc17247692dedf7a09da" @@ -2113,14 +2087,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.26.1": - version "4.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.1.tgz#0d55ea735cb0d8903b198017d6d4f518fdaac546" - integrity sha512-IGouNSSd+6x/fHtYRyLOM6/C+QxMDzWlDtN41ea+flWuSF9g02iqcIlX8wM53JkfljoIjP0U+yp7SiTS1onEkw== - dependencies: - "@typescript-eslint/types" "4.26.1" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.27.0": version "4.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.27.0.tgz#f56138b993ec822793e7ebcfac6ffdce0a60cb81" @@ -10638,9 +10604,9 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^4.1.3: - version "4.3.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805" - integrity sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw== + version "4.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.3.tgz#5401db69bd3203daf1851a1a74d199cb3112c11a" + integrity sha512-rUvLW0WtF7PF2b9yenwWUi9Da9euvDRhmH7BLyBG4DCFfOJ850LGNknmRpp8Z8kXNUPObdZQEfKOiHtXuQHHKA== uglify-js@^3.1.4: version "3.13.6" From e13a2bc81941466d0eaf4378e7b3bcf161966aa6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 18 Jun 2021 12:45:35 +0300 Subject: [PATCH 019/173] chore(deps-dev): bump typescript from 4.3.3 to 4.3.4 (#2786) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.3.3 to 4.3.4. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v4.3.3...v4.3.4) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2b953576c03..224e5ef84a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10604,9 +10604,9 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^4.1.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.3.tgz#5401db69bd3203daf1851a1a74d199cb3112c11a" - integrity sha512-rUvLW0WtF7PF2b9yenwWUi9Da9euvDRhmH7BLyBG4DCFfOJ850LGNknmRpp8Z8kXNUPObdZQEfKOiHtXuQHHKA== + version "4.3.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc" + integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== uglify-js@^3.1.4: version "3.13.6" From d14fa098c1e7cea9e911474864019ee2031c708d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 18 Jun 2021 14:46:36 +0200 Subject: [PATCH 020/173] chore(deps-dev): bump webpack from 5.39.0 to 5.39.1 (#2787) Bumps [webpack](https://github.com/webpack/webpack) from 5.39.0 to 5.39.1. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.39.0...v5.39.1) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 224e5ef84a1..51b67e5d646 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10983,9 +10983,9 @@ webpack-sources@^2.3.0: source-map "^0.6.1" webpack@^5.38.1: - version "5.39.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.39.0.tgz#37d6899f1f40c31d5901abc0f39bc8cc7224138c" - integrity sha512-25CHmuDj+oOTyteI13sUqNlCnjCnySuhiKWE/cRYPQYeoQ3ijHgyWX27CiyUKLNGq27v8S0mrksyTreT/xo7pg== + version "5.39.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.39.1.tgz#d1e014b6d71e1aef385316ad528f21cd5b1f9784" + integrity sha512-ulOvoNCh2PvTUa+zbpRuEb1VPeQnhxpnHleMPVVCq3QqnaFogjsLyps+o42OviQFoaGtTQYrUqDXu1QNkvUPzw== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.47" From 397da6ab15a72dc4a0081ba765b9b11b704d644e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jun 2021 14:20:00 +0300 Subject: [PATCH 021/173] chore(deps-dev): bump @types/node --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 51b67e5d646..6298fa8edf6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1930,9 +1930,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@^15.0.3": - version "15.12.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d" - integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww== + version "15.12.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.4.tgz#e1cf817d70a1e118e81922c4ff6683ce9d422e26" + integrity sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA== "@types/normalize-package-data@^2.4.0": version "2.4.0" From 7640c55761c06b06edf8aadfe23ef193110f28c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jun 2021 14:20:10 +0300 Subject: [PATCH 022/173] chore(deps-dev): bump eslint from 7.28.0 to 7.29.0 (#2789) Bumps [eslint](https://github.com/eslint/eslint) from 7.28.0 to 7.29.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.28.0...v7.29.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6298fa8edf6..3673b020376 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4325,9 +4325,9 @@ eslint-visitor-keys@^2.0.0: integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint@^7.12.1: - version "7.28.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820" - integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g== + version "7.29.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.29.0.tgz#ee2a7648f2e729485e4d0bd6383ec1deabc8b3c0" + integrity sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA== dependencies: "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.4.2" From 8c9b821158610f9482f357b7ddd48c95bbe078b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Jun 2021 14:03:55 +0300 Subject: [PATCH 023/173] chore(deps): bump set-getter from 0.1.0 to 0.1.1 (#2790) Bumps [set-getter](https://github.com/doowb/set-getter) from 0.1.0 to 0.1.1. - [Release notes](https://github.com/doowb/set-getter/releases) - [Commits](https://github.com/doowb/set-getter/commits/0.1.1) --- updated-dependencies: - dependency-name: set-getter dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3673b020376..95ebeb88961 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9557,9 +9557,9 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-getter@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" - integrity sha1-12nBgsnVpR9AkUXy+6guXoboA3Y= + version "0.1.1" + resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.1.tgz#a3110e1b461d31a9cfc8c5c9ee2e9737ad447102" + integrity sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw== dependencies: to-object-path "^0.3.0" From b82c7e060b00aaafc2d011d5fa29e4e60e52f202 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Jun 2021 14:05:45 +0300 Subject: [PATCH 024/173] chore(deps-dev): bump webpack from 5.39.1 to 5.40.0 (#2793) Bumps [webpack](https://github.com/webpack/webpack) from 5.39.1 to 5.40.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.39.1...v5.40.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/yarn.lock b/yarn.lock index 95ebeb88961..9cb465030a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4204,10 +4204,10 @@ es-abstract@^1.18.0-next.2: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.0" -es-module-lexer@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e" - integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA== +es-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.6.0.tgz#e72ab05b7412e62b9be37c37a09bdb6000d706f0" + integrity sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA== es-to-primitive@^1.2.1: version "1.2.1" @@ -6759,15 +6759,6 @@ jest-watcher@^27.0.2: jest-util "^27.0.2" string-length "^4.0.1" -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-worker@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05" @@ -10286,12 +10277,12 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz#51d295eb7cc56785a67a372575fdc46e42d5c20c" - integrity sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q== +terser-webpack-plugin@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz#30033e955ca28b55664f1e4b30a1347e61aa23af" + integrity sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A== dependencies: - jest-worker "^26.6.2" + jest-worker "^27.0.2" p-limit "^3.1.0" schema-utils "^3.0.0" serialize-javascript "^5.0.1" @@ -10983,9 +10974,9 @@ webpack-sources@^2.3.0: source-map "^0.6.1" webpack@^5.38.1: - version "5.39.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.39.1.tgz#d1e014b6d71e1aef385316ad528f21cd5b1f9784" - integrity sha512-ulOvoNCh2PvTUa+zbpRuEb1VPeQnhxpnHleMPVVCq3QqnaFogjsLyps+o42OviQFoaGtTQYrUqDXu1QNkvUPzw== + version "5.40.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.40.0.tgz#3182cfd324759d715252cf541901a226e57b5061" + integrity sha512-c7f5e/WWrxXWUzQqTBg54vBs5RgcAgpvKE4F4VegVgfo4x660ZxYUF2/hpMkZUnLjgytVTitjeXaN4IPlXCGIw== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.47" @@ -10996,7 +10987,7 @@ webpack@^5.38.1: browserslist "^4.14.5" chrome-trace-event "^1.0.2" enhanced-resolve "^5.8.0" - es-module-lexer "^0.4.0" + es-module-lexer "^0.6.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" @@ -11007,7 +10998,7 @@ webpack@^5.38.1: neo-async "^2.6.2" schema-utils "^3.0.0" tapable "^2.1.1" - terser-webpack-plugin "^5.1.1" + terser-webpack-plugin "^5.1.3" watchpack "^2.2.0" webpack-sources "^2.3.0" From c23bdfe520bbf5b48622f0edc96c95ffea9f4720 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Jun 2021 14:10:32 +0300 Subject: [PATCH 025/173] chore(deps-dev): bump @typescript-eslint/parser from 4.27.0 to 4.28.0 (#2791) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.27.0 to 4.28.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.28.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9cb465030a0..5773dcf440b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2052,13 +2052,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.27.0.tgz#85447e573364bce4c46c7f64abaa4985aadf5a94" - integrity sha512-XpbxL+M+gClmJcJ5kHnUpBGmlGdgNvy6cehgR6ufyxkEJMGP25tZKCaKyC0W/JVpuhU3VU1RBn7SYUPKSMqQvQ== + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.0.tgz#2404c16751a28616ef3abab77c8e51d680a12caa" + integrity sha512-7x4D22oPY8fDaOCvkuXtYYTQ6mTMmkivwEzS+7iml9F9VkHGbbZ3x4fHRwxAb5KeuSkLqfnYjs46tGx2Nour4A== dependencies: - "@typescript-eslint/scope-manager" "4.27.0" - "@typescript-eslint/types" "4.27.0" - "@typescript-eslint/typescript-estree" "4.27.0" + "@typescript-eslint/scope-manager" "4.28.0" + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/typescript-estree" "4.28.0" debug "^4.3.1" "@typescript-eslint/scope-manager@4.27.0": @@ -2069,11 +2069,24 @@ "@typescript-eslint/types" "4.27.0" "@typescript-eslint/visitor-keys" "4.27.0" +"@typescript-eslint/scope-manager@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.0.tgz#6a3009d2ab64a30fc8a1e257a1a320067f36a0ce" + integrity sha512-eCALCeScs5P/EYjwo6se9bdjtrh8ByWjtHzOkC4Tia6QQWtQr3PHovxh3TdYTuFcurkYI4rmFsRFpucADIkseg== + dependencies: + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/visitor-keys" "4.28.0" + "@typescript-eslint/types@4.27.0": version "4.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.27.0.tgz#712b408519ed699baff69086bc59cd2fc13df8d8" integrity sha512-I4ps3SCPFCKclRcvnsVA/7sWzh7naaM/b4pBO2hVxnM3wrU51Lveybdw5WoIktU/V4KfXrTt94V9b065b/0+wA== +"@typescript-eslint/types@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.0.tgz#a33504e1ce7ac51fc39035f5fe6f15079d4dafb0" + integrity sha512-p16xMNKKoiJCVZY5PW/AfILw2xe1LfruTcfAKBj3a+wgNYP5I9ZEKNDOItoRt53p4EiPV6iRSICy8EPanG9ZVA== + "@typescript-eslint/typescript-estree@4.27.0": version "4.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.27.0.tgz#189a7b9f1d0717d5cccdcc17247692dedf7a09da" @@ -2087,6 +2100,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.0.tgz#e66d4e5aa2ede66fec8af434898fe61af10c71cf" + integrity sha512-m19UQTRtxMzKAm8QxfKpvh6OwQSXaW1CdZPoCaQuLwAq7VZMNuhJmZR4g5281s2ECt658sldnJfdpSZZaxUGMQ== + dependencies: + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/visitor-keys" "4.28.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.27.0": version "4.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.27.0.tgz#f56138b993ec822793e7ebcfac6ffdce0a60cb81" @@ -2095,6 +2121,14 @@ "@typescript-eslint/types" "4.27.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.0.tgz#255c67c966ec294104169a6939d96f91c8a89434" + integrity sha512-PjJyTWwrlrvM5jazxYF5ZPs/nl0kHDZMVbuIcbpawVXaDPelp3+S9zpOz5RmVUfS/fD5l5+ZXNKnWhNYjPzCvw== + dependencies: + "@typescript-eslint/types" "4.28.0" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.0": version "1.11.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" From 9c6b341fd84e03606c9a9558711238f0863bd56f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Jun 2021 14:14:15 +0300 Subject: [PATCH 026/173] chore(deps-dev): bump jest from 27.0.4 to 27.0.5 (#2794) Bumps [jest](https://github.com/facebook/jest) from 27.0.4 to 27.0.5. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/compare/v27.0.4...v27.0.5) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 292 +++++++++++++++++++++++++++--------------------------- 1 file changed, 146 insertions(+), 146 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5773dcf440b..f31493340ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -647,15 +647,15 @@ jest-util "^27.0.2" slash "^3.0.0" -"@jest/core@^27.0.4": - version "27.0.4" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.0.4.tgz#679bf9ac07900da2ddbb9667bb1afa8029038f53" - integrity sha512-+dsmV8VUs1h/Szb+rEWk8xBM1fp1I///uFy9nk3wXGvRsF2lBp8EVPmtWc+QFRb3MY2b7u2HbkGF1fzoDzQTLA== +"@jest/core@^27.0.5": + version "27.0.5" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.0.5.tgz#59e9e69e7374d65dbb22e3fc1bd52e80991eae72" + integrity sha512-g73//jF0VwsOIrWUC9Cqg03lU3QoAMFxVjsm6n6yNmwZcQPN/o8w+gLWODw5VfKNFZT38otXHWxc6b8eGDUpEA== dependencies: "@jest/console" "^27.0.2" - "@jest/reporters" "^27.0.4" + "@jest/reporters" "^27.0.5" "@jest/test-result" "^27.0.2" - "@jest/transform" "^27.0.2" + "@jest/transform" "^27.0.5" "@jest/types" "^27.0.2" "@types/node" "*" ansi-escapes "^4.2.1" @@ -664,15 +664,15 @@ exit "^0.1.2" graceful-fs "^4.2.4" jest-changed-files "^27.0.2" - jest-config "^27.0.4" - jest-haste-map "^27.0.2" + jest-config "^27.0.5" + jest-haste-map "^27.0.5" jest-message-util "^27.0.2" jest-regex-util "^27.0.1" - jest-resolve "^27.0.4" - jest-resolve-dependencies "^27.0.4" - jest-runner "^27.0.4" - jest-runtime "^27.0.4" - jest-snapshot "^27.0.4" + jest-resolve "^27.0.5" + jest-resolve-dependencies "^27.0.5" + jest-runner "^27.0.5" + jest-runtime "^27.0.5" + jest-snapshot "^27.0.5" jest-util "^27.0.2" jest-validate "^27.0.2" jest-watcher "^27.0.2" @@ -682,20 +682,20 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.0.3": - version "27.0.3" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.3.tgz#68769b1dfdd213e3456169d64fbe9bd63a5fda92" - integrity sha512-pN9m7fbKsop5vc3FOfH8NF7CKKdRbEZzcxfIo1n2TT6ucKWLFq0P6gCJH0GpnQp036++yY9utHOxpeT1WnkWTA== +"@jest/environment@^27.0.5": + version "27.0.5" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.5.tgz#a294ad4acda2e250f789fb98dc667aad33d3adc9" + integrity sha512-IAkJPOT7bqn0GiX5LPio6/e1YpcmLbrd8O5EFYpAOZ6V+9xJDsXjdgN2vgv9WOKIs/uA1kf5WeD96HhlBYO+FA== dependencies: - "@jest/fake-timers" "^27.0.3" + "@jest/fake-timers" "^27.0.5" "@jest/types" "^27.0.2" "@types/node" "*" jest-mock "^27.0.3" -"@jest/fake-timers@^27.0.3": - version "27.0.3" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.3.tgz#9899ba6304cc636734c74478df502e18136461dd" - integrity sha512-fQ+UCKRIYKvTCEOyKPnaPnomLATIhMnHC/xPZ7yT1Uldp7yMgMxoYIFidDbpSTgB79+/U+FgfoD30c6wg3IUjA== +"@jest/fake-timers@^27.0.5": + version "27.0.5" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.5.tgz#304d5aedadf4c75cff3696995460b39d6c6e72f6" + integrity sha512-d6Tyf7iDoKqeUdwUKrOBV/GvEZRF67m7lpuWI0+SCD9D3aaejiOQZxAOxwH2EH/W18gnfYaBPLi0VeTGBHtQBg== dependencies: "@jest/types" "^27.0.2" "@sinonjs/fake-timers" "^7.0.2" @@ -704,24 +704,24 @@ jest-mock "^27.0.3" jest-util "^27.0.2" -"@jest/globals@^27.0.3": - version "27.0.3" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.3.tgz#1cf8933b7791bba0b99305cbf39fd4d2e3fe4060" - integrity sha512-OzsIuf7uf+QalqAGbjClyezzEcLQkdZ+7PejUrZgDs+okdAK8GwRCGcYCirHvhMBBQh60Jr3NlIGbn/KBPQLEQ== +"@jest/globals@^27.0.5": + version "27.0.5" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.5.tgz#f63b8bfa6ea3716f8df50f6a604b5c15b36ffd20" + integrity sha512-qqKyjDXUaZwDuccpbMMKCCMBftvrbXzigtIsikAH/9ca+kaae8InP2MDf+Y/PdCSMuAsSpHS6q6M25irBBUh+Q== dependencies: - "@jest/environment" "^27.0.3" + "@jest/environment" "^27.0.5" "@jest/types" "^27.0.2" expect "^27.0.2" -"@jest/reporters@^27.0.4": - version "27.0.4" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.4.tgz#95609b1be97afb80d55d8aa3d7c3179c15810e65" - integrity sha512-Xa90Nm3JnV0xCe4M6A10M9WuN9krb+WFKxV1A98Y4ePCw40n++r7uxFUNU7DT1i9Behj7fjrAIju9oU0t1QtCg== +"@jest/reporters@^27.0.5": + version "27.0.5" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.5.tgz#cd730b77d9667b8ff700ad66d4edc293bb09716a" + integrity sha512-4uNg5+0eIfRafnpgu3jCZws3NNcFzhu5JdRd1mKQ4/53+vkIqwB6vfZ4gn5BdGqOaLtYhlOsPaL5ATkKzyBrJw== dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^27.0.2" "@jest/test-result" "^27.0.2" - "@jest/transform" "^27.0.2" + "@jest/transform" "^27.0.5" "@jest/types" "^27.0.2" chalk "^4.0.0" collect-v8-coverage "^1.0.0" @@ -733,15 +733,15 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^27.0.2" - jest-resolve "^27.0.4" + jest-haste-map "^27.0.5" + jest-resolve "^27.0.5" jest-util "^27.0.2" jest-worker "^27.0.2" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" + v8-to-istanbul "^8.0.0" "@jest/source-map@^27.0.1": version "27.0.1" @@ -772,20 +772,20 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.0.4": - version "27.0.4" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.4.tgz#976493b277594d81e589896f0ed21f198308928a" - integrity sha512-6UFEVwdmxYdyNffBxVVZxmXEdBE4riSddXYSnFNH0ELFQFk/bvagizim8WfgJTqF4EKd+j1yFxvhb8BMHfOjSQ== +"@jest/test-sequencer@^27.0.5": + version "27.0.5" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.5.tgz#c58b21db49afc36c0e3921d7ddf1fb7954abfded" + integrity sha512-opztnGs+cXzZ5txFG2+omBaV5ge/0yuJNKbhE3DREMiXE0YxBuzyEa6pNv3kk2JuucIlH2Xvgmn9kEEHSNt/SA== dependencies: "@jest/test-result" "^27.0.2" graceful-fs "^4.2.4" - jest-haste-map "^27.0.2" - jest-runtime "^27.0.4" + jest-haste-map "^27.0.5" + jest-runtime "^27.0.5" -"@jest/transform@^27.0.2": - version "27.0.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.2.tgz#b073b7c589e3f4b842102468875def2bb722d6b5" - integrity sha512-H8sqKlgtDfVog/s9I4GG2XMbi4Ar7RBxjsKQDUhn2XHAi3NG+GoQwWMER+YfantzExbjNqQvqBHzo/G2pfTiPw== +"@jest/transform@^27.0.5": + version "27.0.5" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.5.tgz#2dcb78953708af713941ac845b06078bc74ed873" + integrity sha512-lBD6OwKXSc6JJECBNk4mVxtSVuJSBsQrJ9WCBisfJs7EZuYq4K6vM9HmoB7hmPiLIDGeyaerw3feBV/bC4z8tg== dependencies: "@babel/core" "^7.1.0" "@jest/types" "^27.0.2" @@ -794,7 +794,7 @@ convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" - jest-haste-map "^27.0.2" + jest-haste-map "^27.0.5" jest-regex-util "^27.0.1" jest-util "^27.0.2" micromatch "^4.0.4" @@ -2706,12 +2706,12 @@ 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@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.2.tgz#7dc18adb01322acce62c2af76ea2c7cd186ade37" - integrity sha512-9OThPl3/IQbo4Yul2vMz4FYwILPQak8XelX4YGowygfHaOl5R5gfjm4iVx4d8aUugkW683t8aq0A74E7b5DU1Q== +babel-jest@^27.0.5: + version "27.0.5" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.5.tgz#cd34c033ada05d1362211e5152391fd7a88080c8" + integrity sha512-bTMAbpCX7ldtfbca2llYLeSFsDM257aspyAOpsdrdSrBqoLkWCy4HPYTXtXWaSLgFPjrJGACL65rzzr4RFGadw== dependencies: - "@jest/transform" "^27.0.2" + "@jest/transform" "^27.0.5" "@jest/types" "^27.0.2" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.0.0" @@ -6355,12 +6355,12 @@ jest-changed-files@^27.0.2: execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.0.4: - version "27.0.4" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.0.4.tgz#3b261514ee3b3da33def736a6352c98ff56bb6e6" - integrity sha512-QD+eblDiRphta630WRKewuASLs/oY1Zki2G4bccntRvrTHQ63ljwFR5TLduuK4Zg0ZPzW0+8o6AP7KRd1yKOjw== +jest-circus@^27.0.5: + version "27.0.5" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.0.5.tgz#b5e327f1d6857c8485126f8e364aefa4378debaa" + integrity sha512-p5rO90o1RTh8LPOG6l0Fc9qgp5YGv+8M5CFixhMh7gGHtGSobD1AxX9cjFZujILgY8t30QZ7WVvxlnuG31r8TA== dependencies: - "@jest/environment" "^27.0.3" + "@jest/environment" "^27.0.5" "@jest/test-result" "^27.0.2" "@jest/types" "^27.0.2" "@types/node" "*" @@ -6372,54 +6372,54 @@ jest-circus@^27.0.4: jest-each "^27.0.2" jest-matcher-utils "^27.0.2" jest-message-util "^27.0.2" - jest-runtime "^27.0.4" - jest-snapshot "^27.0.4" + jest-runtime "^27.0.5" + jest-snapshot "^27.0.5" jest-util "^27.0.2" pretty-format "^27.0.2" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.0.4: - version "27.0.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.4.tgz#491b12c754c0d7c6873b13a66f26b3a80a852910" - integrity sha512-E0T+/i2lxsWAzV7LKYd0SB7HUAvePqaeIh5vX43/G5jXLhv1VzjYzJAGEkTfvxV774ll9cyE2ljcL73PVMEOXQ== +jest-cli@^27.0.5: + version "27.0.5" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.5.tgz#f359ba042624cffb96b713010a94bffb7498a37c" + integrity sha512-kZqY020QFOFQKVE2knFHirTBElw3/Q0kUbDc3nMfy/x+RQ7zUY89SUuzpHHJoSX1kX7Lq569ncvjNqU3Td/FCA== dependencies: - "@jest/core" "^27.0.4" + "@jest/core" "^27.0.5" "@jest/test-result" "^27.0.2" "@jest/types" "^27.0.2" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" - jest-config "^27.0.4" + jest-config "^27.0.5" jest-util "^27.0.2" jest-validate "^27.0.2" prompts "^2.0.1" yargs "^16.0.3" -jest-config@^27.0.4: - version "27.0.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.4.tgz#c4f41378acf40ca77860fb4e213b12109d87b8cf" - integrity sha512-VkQFAHWnPQefdvHU9A+G3H/Z3NrrTKqWpvxgQz3nkUdkDTWeKJE6e//BL+R7z79dXOMVksYgM/z6ndtN0hfChg== +jest-config@^27.0.5: + version "27.0.5" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.5.tgz#683da3b0d8237675c29c817f6e3aba1481028e19" + integrity sha512-zCUIXag7QIXKEVN4kUKbDBDi9Q53dV5o3eNhGqe+5zAbt1vLs4VE3ceWaYrOub0L4Y7E9pGfM84TX/0ARcE+Qw== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^27.0.4" + "@jest/test-sequencer" "^27.0.5" "@jest/types" "^27.0.2" - babel-jest "^27.0.2" + babel-jest "^27.0.5" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" is-ci "^3.0.0" - jest-circus "^27.0.4" - jest-environment-jsdom "^27.0.3" - jest-environment-node "^27.0.3" + jest-circus "^27.0.5" + jest-environment-jsdom "^27.0.5" + jest-environment-node "^27.0.5" jest-get-type "^27.0.1" - jest-jasmine2 "^27.0.4" + jest-jasmine2 "^27.0.5" jest-regex-util "^27.0.1" - jest-resolve "^27.0.4" - jest-runner "^27.0.4" + jest-resolve "^27.0.5" + jest-runner "^27.0.5" jest-util "^27.0.2" jest-validate "^27.0.2" micromatch "^4.0.4" @@ -6463,26 +6463,26 @@ jest-each@^27.0.2: jest-util "^27.0.2" pretty-format "^27.0.2" -jest-environment-jsdom@^27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.3.tgz#ed73e913ddc03864eb9f934b5cbabf1b63504e2e" - integrity sha512-5KLmgv1bhiimpSA8oGTnZYk6g4fsNyZiA/6gI2tAZUgrufd7heRUSVh4gRokzZVEj8zlwAQYT0Zs6tuJSW/ECA== +jest-environment-jsdom@^27.0.5: + version "27.0.5" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.5.tgz#c36771977cf4490a9216a70473b39161d193c212" + integrity sha512-ToWhViIoTl5738oRaajTMgYhdQL73UWPoV4GqHGk2DPhs+olv8OLq5KoQW8Yf+HtRao52XLqPWvl46dPI88PdA== dependencies: - "@jest/environment" "^27.0.3" - "@jest/fake-timers" "^27.0.3" + "@jest/environment" "^27.0.5" + "@jest/fake-timers" "^27.0.5" "@jest/types" "^27.0.2" "@types/node" "*" jest-mock "^27.0.3" jest-util "^27.0.2" jsdom "^16.6.0" -jest-environment-node@^27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.3.tgz#b4acb3679d2552a4215732cab8b0ca7ec4398ee0" - integrity sha512-co2/IVnIFL3cItpFULCvXFg9us4gvWXgs7mutAMPCbFhcqh56QAOdKhNzC2+RycsC/k4mbMj1VF+9F/NzA0ROg== +jest-environment-node@^27.0.5: + version "27.0.5" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.5.tgz#b7238fc2b61ef2fb9563a3b7653a95fa009a6a54" + integrity sha512-47qqScV/WMVz5OKF5TWpAeQ1neZKqM3ySwNveEnLyd+yaE/KT6lSMx/0SOx60+ZUcVxPiESYS+Kt2JS9y4PpkQ== dependencies: - "@jest/environment" "^27.0.3" - "@jest/fake-timers" "^27.0.3" + "@jest/environment" "^27.0.5" + "@jest/fake-timers" "^27.0.5" "@jest/types" "^27.0.2" "@types/node" "*" jest-mock "^27.0.3" @@ -6498,10 +6498,10 @@ jest-get-type@^27.0.1: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.1.tgz#34951e2b08c8801eb28559d7eb732b04bbcf7815" integrity sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg== -jest-haste-map@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.2.tgz#3f1819400c671237e48b4d4b76a80a0dbed7577f" - integrity sha512-37gYfrYjjhEfk37C4bCMWAC0oPBxDpG0qpl8lYg8BT//wf353YT/fzgA7+Dq0EtM7rPFS3JEcMsxdtDwNMi2cA== +jest-haste-map@^27.0.5: + version "27.0.5" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.5.tgz#2e1e55073b5328410a2c0d74b334e513d71f3470" + integrity sha512-3LFryGSHxwPFHzKIs6W0BGA2xr6g1MvzSjR3h3D8K8Uqy4vbRm/grpGHzbPtIbOPLC6wFoViRrNEmd116QWSkw== dependencies: "@jest/types" "^27.0.2" "@types/graceful-fs" "^4.1.2" @@ -6518,13 +6518,13 @@ jest-haste-map@^27.0.2: optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.0.4: - version "27.0.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.4.tgz#c669519ccf4904a485338555e1e66cad36bb0670" - integrity sha512-yj3WrjjquZwkJw+eA4c9yucHw4/+EHndHWSqgHbHGQfT94ihaaQsa009j1a0puU8CNxPDk0c1oAPeOpdJUElwA== +jest-jasmine2@^27.0.5: + version "27.0.5" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.5.tgz#8a6eb2a685cdec3af13881145c77553e4e197776" + integrity sha512-m3TojR19sFmTn79QoaGy1nOHBcLvtLso6Zh7u+gYxZWGcza4rRPVqwk1hciA5ZOWWZIJOukAcore8JRX992FaA== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^27.0.3" + "@jest/environment" "^27.0.5" "@jest/source-map" "^27.0.1" "@jest/test-result" "^27.0.2" "@jest/types" "^27.0.2" @@ -6536,8 +6536,8 @@ jest-jasmine2@^27.0.4: jest-each "^27.0.2" jest-matcher-utils "^27.0.2" jest-message-util "^27.0.2" - jest-runtime "^27.0.4" - jest-snapshot "^27.0.4" + jest-runtime "^27.0.5" + jest-snapshot "^27.0.5" jest-util "^27.0.2" pretty-format "^27.0.2" throat "^6.0.1" @@ -6608,19 +6608,19 @@ jest-regex-util@^27.0.0, jest-regex-util@^27.0.1: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.1.tgz#69d4b1bf5b690faa3490113c47486ed85dd45b68" integrity sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ== -jest-resolve-dependencies@^27.0.4: - version "27.0.4" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.4.tgz#a07a242d70d668afd3fcf7f4270755eebb1fe579" - integrity sha512-F33UPfw1YGWCV2uxJl7wD6TvcQn5IC0LtguwY3r4L7R6H4twpLkp5Q2ZfzRx9A2I3G8feiy0O0sqcn/Qoym71A== +jest-resolve-dependencies@^27.0.5: + version "27.0.5" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.5.tgz#819ccdddd909c65acddb063aac3a49e4ba1ed569" + integrity sha512-xUj2dPoEEd59P+nuih4XwNa4nJ/zRd/g4rMvjHrZPEBWeWRq/aJnnM6mug+B+Nx+ILXGtfWHzQvh7TqNV/WbuA== dependencies: "@jest/types" "^27.0.2" jest-regex-util "^27.0.1" - jest-snapshot "^27.0.4" + jest-snapshot "^27.0.5" -jest-resolve@^27.0.4: - version "27.0.4" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.4.tgz#8a27bc3f2f00c8ea28f3bc99bbf6f468300a703d" - integrity sha512-BcfyK2i3cG79PDb/6gB6zFeFQlcqLsQjGBqznFCpA0L/3l1L/oOsltdUjs5eISAWA9HS9qtj8v2PSZr/yWxONQ== +jest-resolve@^27.0.5: + version "27.0.5" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.5.tgz#937535a5b481ad58e7121eaea46d1424a1e0c507" + integrity sha512-Md65pngRh8cRuWVdWznXBB5eDt391OJpdBaJMxfjfuXCvOhM3qQBtLMCMTykhuUKiBMmy5BhqCW7AVOKmPrW+Q== dependencies: "@jest/types" "^27.0.2" chalk "^4.0.0" @@ -6632,15 +6632,15 @@ jest-resolve@^27.0.4: resolve "^1.20.0" slash "^3.0.0" -jest-runner@^27.0.4: - version "27.0.4" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.4.tgz#2787170a9509b792ae129794f6944d27d5d12a4f" - integrity sha512-NfmvSYLCsCJk2AG8Ar2NAh4PhsJJpO+/r+g4bKR5L/5jFzx/indUpnVBdrfDvuqhGLLAvrKJ9FM/Nt8o1dsqxg== +jest-runner@^27.0.5: + version "27.0.5" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.5.tgz#b6fdc587e1a5056339205914294555c554efc08a" + integrity sha512-HNhOtrhfKPArcECgBTcWOc+8OSL8GoFoa7RsHGnfZR1C1dFohxy9eLtpYBS+koybAHlJLZzNCx2Y/Ic3iEtJpQ== dependencies: "@jest/console" "^27.0.2" - "@jest/environment" "^27.0.3" + "@jest/environment" "^27.0.5" "@jest/test-result" "^27.0.2" - "@jest/transform" "^27.0.2" + "@jest/transform" "^27.0.5" "@jest/types" "^27.0.2" "@types/node" "*" chalk "^4.0.0" @@ -6648,30 +6648,30 @@ jest-runner@^27.0.4: exit "^0.1.2" graceful-fs "^4.2.4" jest-docblock "^27.0.1" - jest-environment-jsdom "^27.0.3" - jest-environment-node "^27.0.3" - jest-haste-map "^27.0.2" + jest-environment-jsdom "^27.0.5" + jest-environment-node "^27.0.5" + jest-haste-map "^27.0.5" jest-leak-detector "^27.0.2" jest-message-util "^27.0.2" - jest-resolve "^27.0.4" - jest-runtime "^27.0.4" + jest-resolve "^27.0.5" + jest-runtime "^27.0.5" jest-util "^27.0.2" jest-worker "^27.0.2" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.0.4: - version "27.0.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.4.tgz#2e4a6aa77cac32ac612dfe12768387a8aa15c2f0" - integrity sha512-voJB4xbAjS/qYPboV+e+gmg3jfvHJJY4CagFWBOM9dQKtlaiTjcpD2tWwla84Z7PtXSQPeIpXY0qksA9Dum29A== +jest-runtime@^27.0.5: + version "27.0.5" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.5.tgz#cd5d1aa9754d30ddf9f13038b3cb7b95b46f552d" + integrity sha512-V/w/+VasowPESbmhXn5AsBGPfb35T7jZPGZybYTHxZdP7Gwaa+A0EXE6rx30DshHKA98lVCODbCO8KZpEW3hiQ== dependencies: "@jest/console" "^27.0.2" - "@jest/environment" "^27.0.3" - "@jest/fake-timers" "^27.0.3" - "@jest/globals" "^27.0.3" + "@jest/environment" "^27.0.5" + "@jest/fake-timers" "^27.0.5" + "@jest/globals" "^27.0.5" "@jest/source-map" "^27.0.1" "@jest/test-result" "^27.0.2" - "@jest/transform" "^27.0.2" + "@jest/transform" "^27.0.5" "@jest/types" "^27.0.2" "@types/yargs" "^16.0.0" chalk "^4.0.0" @@ -6680,12 +6680,12 @@ jest-runtime@^27.0.4: exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-haste-map "^27.0.2" + jest-haste-map "^27.0.5" jest-message-util "^27.0.2" jest-mock "^27.0.3" jest-regex-util "^27.0.1" - jest-resolve "^27.0.4" - jest-snapshot "^27.0.4" + jest-resolve "^27.0.5" + jest-snapshot "^27.0.5" jest-util "^27.0.2" jest-validate "^27.0.2" slash "^3.0.0" @@ -6700,10 +6700,10 @@ jest-serializer@^27.0.1: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^27.0.4: - version "27.0.4" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.4.tgz#2b96e22ca90382b3e93bd0aae2ce4c78bf51fb5b" - integrity sha512-hnjrvpKGdSMvKfbHyaG5Kul7pDJGZvjVy0CKpzhu28MmAssDXS6GpynhXzgst1wBQoKD8c9b2VS2a5yhDLQRCA== +jest-snapshot@^27.0.5: + version "27.0.5" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.5.tgz#6e3b9e8e193685372baff771ba34af631fe4d4d5" + integrity sha512-H1yFYdgnL1vXvDqMrnDStH6yHFdMEuzYQYc71SnC/IJnuuhW6J16w8GWG1P+qGd3Ag3sQHjbRr0TcwEo/vGS+g== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" @@ -6711,7 +6711,7 @@ jest-snapshot@^27.0.4: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.0.2" + "@jest/transform" "^27.0.5" "@jest/types" "^27.0.2" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" @@ -6721,10 +6721,10 @@ jest-snapshot@^27.0.4: graceful-fs "^4.2.4" jest-diff "^27.0.2" jest-get-type "^27.0.1" - jest-haste-map "^27.0.2" + jest-haste-map "^27.0.5" jest-matcher-utils "^27.0.2" jest-message-util "^27.0.2" - jest-resolve "^27.0.4" + jest-resolve "^27.0.5" jest-util "^27.0.2" natural-compare "^1.4.0" pretty-format "^27.0.2" @@ -6803,13 +6803,13 @@ jest-worker@^27.0.2: supports-color "^8.0.0" jest@^27.0.3: - version "27.0.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.0.4.tgz#91d4d564b36bcf93b98dac1ab19f07089e670f53" - integrity sha512-Px1iKFooXgGSkk1H8dJxxBIrM3tsc5SIuI4kfKYK2J+4rvCvPGr/cXktxh0e9zIPQ5g09kOMNfHQEmusBUf/ZA== + version "27.0.5" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.0.5.tgz#141825e105514a834cc8d6e44670509e8d74c5f2" + integrity sha512-4NlVMS29gE+JOZvgmSAsz3eOjkSsHqjTajlIsah/4MVSmKvf3zFP/TvgcLoWe2UVHiE9KF741sReqhF0p4mqbQ== dependencies: - "@jest/core" "^27.0.4" + "@jest/core" "^27.0.5" import-local "^3.0.2" - jest-cli "^27.0.4" + jest-cli "^27.0.5" js-tokens@^4.0.0: version "4.0.0" @@ -10804,10 +10804,10 @@ v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== +v8-to-istanbul@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz#4229f2a99e367f3f018fa1d5c2b8ec684667c69c" + integrity sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" From d0183109af2987bf1ee7681ae070c1f28e57e513 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Jun 2021 16:23:25 +0300 Subject: [PATCH 027/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin --- yarn.lock | 61 ++++++++++++------------------------------------------- 1 file changed, 13 insertions(+), 48 deletions(-) diff --git a/yarn.lock b/yarn.lock index f31493340ae..c4cf2fbc293 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2026,28 +2026,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.27.0.tgz#0b7fc974e8bc9b2b5eb98ed51427b0be529b4ad0" - integrity sha512-DsLqxeUfLVNp3AO7PC3JyaddmEHTtI9qTSAs+RB6ja27QvIM0TA8Cizn1qcS6vOu+WDLFJzkwkgweiyFhssDdQ== + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.0.tgz#1a66f03b264844387beb7dc85e1f1d403bd1803f" + integrity sha512-KcF6p3zWhf1f8xO84tuBailV5cN92vhS+VT7UJsPzGBm9VnQqfI9AsiMUFUCYHTYPg1uCCo+HyiDnpDuvkAMfQ== dependencies: - "@typescript-eslint/experimental-utils" "4.27.0" - "@typescript-eslint/scope-manager" "4.27.0" + "@typescript-eslint/experimental-utils" "4.28.0" + "@typescript-eslint/scope-manager" "4.28.0" debug "^4.3.1" functional-red-black-tree "^1.0.1" - lodash "^4.17.21" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.27.0": - version "4.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.27.0.tgz#78192a616472d199f084eab8f10f962c0757cd1c" - integrity sha512-n5NlbnmzT2MXlyT+Y0Jf0gsmAQzCnQSWXKy4RGSXVStjDvS5we9IWbh7qRVKdGcxT0WYlgcCYUK/HRg7xFhvjQ== +"@typescript-eslint/experimental-utils@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.0.tgz#13167ed991320684bdc23588135ae62115b30ee0" + integrity sha512-9XD9s7mt3QWMk82GoyUpc/Ji03vz4T5AYlHF9DcoFNfJ/y3UAclRsfGiE2gLfXtyC+JRA3trR7cR296TEb1oiQ== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.27.0" - "@typescript-eslint/types" "4.27.0" - "@typescript-eslint/typescript-estree" "4.27.0" + "@typescript-eslint/scope-manager" "4.28.0" + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/typescript-estree" "4.28.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -2061,14 +2060,6 @@ "@typescript-eslint/typescript-estree" "4.28.0" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.27.0": - version "4.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.27.0.tgz#b0b1de2b35aaf7f532e89c8e81d0fa298cae327d" - integrity sha512-DY73jK6SEH6UDdzc6maF19AHQJBFVRf6fgAXHPXCGEmpqD4vYgPEzqpFz1lf/daSbOcMpPPj9tyXXDPW2XReAw== - dependencies: - "@typescript-eslint/types" "4.27.0" - "@typescript-eslint/visitor-keys" "4.27.0" - "@typescript-eslint/scope-manager@4.28.0": version "4.28.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.0.tgz#6a3009d2ab64a30fc8a1e257a1a320067f36a0ce" @@ -2077,29 +2068,11 @@ "@typescript-eslint/types" "4.28.0" "@typescript-eslint/visitor-keys" "4.28.0" -"@typescript-eslint/types@4.27.0": - version "4.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.27.0.tgz#712b408519ed699baff69086bc59cd2fc13df8d8" - integrity sha512-I4ps3SCPFCKclRcvnsVA/7sWzh7naaM/b4pBO2hVxnM3wrU51Lveybdw5WoIktU/V4KfXrTt94V9b065b/0+wA== - "@typescript-eslint/types@4.28.0": version "4.28.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.0.tgz#a33504e1ce7ac51fc39035f5fe6f15079d4dafb0" integrity sha512-p16xMNKKoiJCVZY5PW/AfILw2xe1LfruTcfAKBj3a+wgNYP5I9ZEKNDOItoRt53p4EiPV6iRSICy8EPanG9ZVA== -"@typescript-eslint/typescript-estree@4.27.0": - version "4.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.27.0.tgz#189a7b9f1d0717d5cccdcc17247692dedf7a09da" - integrity sha512-KH03GUsUj41sRLLEy2JHstnezgpS5VNhrJouRdmh6yNdQ+yl8w5LrSwBkExM+jWwCJa7Ct2c8yl8NdtNRyQO6g== - dependencies: - "@typescript-eslint/types" "4.27.0" - "@typescript-eslint/visitor-keys" "4.27.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.28.0": version "4.28.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.0.tgz#e66d4e5aa2ede66fec8af434898fe61af10c71cf" @@ -2113,14 +2086,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.27.0": - version "4.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.27.0.tgz#f56138b993ec822793e7ebcfac6ffdce0a60cb81" - integrity sha512-es0GRYNZp0ieckZ938cEANfEhsfHrzuLrePukLKtY3/KPXcq1Xd555Mno9/GOgXhKzn0QfkDLVgqWO3dGY80bg== - dependencies: - "@typescript-eslint/types" "4.27.0" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.28.0": version "4.28.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.0.tgz#255c67c966ec294104169a6939d96f91c8a89434" @@ -7278,7 +7243,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -lodash@4.x, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash@4.x, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== From 85ea39b98bbfbb3d5a8480c64b168eb17e05ba94 Mon Sep 17 00:00:00 2001 From: James George Date: Thu, 24 Jun 2021 20:08:15 +0530 Subject: [PATCH 028/173] test: enable skipped tests (#2796) --- test/loader/loader.test.js | 16 ++++++++-------- test/plugin/plugin.test.js | 27 ++++++++++++++++----------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/test/loader/loader.test.js b/test/loader/loader.test.js index 3797df329f1..dfabefef4f7 100644 --- a/test/loader/loader.test.js +++ b/test/loader/loader.test.js @@ -37,7 +37,7 @@ describe("loader command", () => { expect(normalizeStdout(stdout)).toContain(firstPrompt); // Skip test in case installation fails - if (!existsSync(resolve(defaultLoaderPath, "./yarn.lock"))) { + if (!existsSync(resolve(defaultLoaderPath, "./package-lock.json"))) { return; } @@ -59,7 +59,7 @@ describe("loader command", () => { }); // Check if the the generated loader works successfully - const path = resolve(__dirname, "./my-loader/examples/simple/"); + const path = resolve(defaultLoaderPath, "./examples/simple/"); ({ stdout } = await run(path, [])); @@ -78,7 +78,7 @@ describe("loader command", () => { expect(normalizeStdout(stdout)).toContain(firstPrompt); // Skip test in case installation fails - if (!existsSync(resolve(loaderPath, "./yarn.lock"))) { + if (!existsSync(resolve(loaderPath, "./package-lock.json"))) { return; } @@ -100,7 +100,7 @@ describe("loader command", () => { }); // Check if the the generated loader works successfully - const path = resolve(__dirname, "./test-loader/examples/simple/"); + const path = resolve(loaderPath, "./examples/simple/"); ({ stdout } = await run(path, [])); @@ -119,7 +119,7 @@ describe("loader command", () => { expect(normalizeStdout(stdout)).toContain(firstPrompt); // Skip test in case installation fails - if (!existsSync(resolve(customLoaderPath, "./yarn.lock"))) { + if (!existsSync(resolve(customLoaderPath, "./package-lock.json"))) { return; } @@ -161,7 +161,7 @@ describe("loader command", () => { expect(normalizeStdout(stdout)).toContain(firstPrompt); // Skip test in case installation fails - if (!existsSync(resolve(customLoaderPath, "./yarn.lock"))) { + if (!existsSync(resolve(customLoaderPath, "./package-lock.json"))) { return; } @@ -209,7 +209,7 @@ describe("loader command", () => { expect(normalizeStdout(stdout)).toContain(firstPrompt); // Skip test in case installation fails - if (!existsSync(resolve(defaultLoaderPath, "./yarn.lock"))) { + if (!existsSync(resolve(defaultLoaderPath, "./package-lock.json"))) { return; } @@ -231,7 +231,7 @@ describe("loader command", () => { }); // Check if the the generated loader works successfully - const path = resolve(__dirname, "./my-loader/examples/simple/"); + const path = resolve(assetsPath, "./my-loader/examples/simple/"); ({ stdout } = await run(path, [])); diff --git a/test/plugin/plugin.test.js b/test/plugin/plugin.test.js index 0dee10250bd..c087fed94b3 100644 --- a/test/plugin/plugin.test.js +++ b/test/plugin/plugin.test.js @@ -39,7 +39,7 @@ describe("plugin command", () => { expect(existsSync(defaultPluginPath)).toBeTruthy(); // Skip test in case installation fails - if (!existsSync(resolve(defaultPluginPath, "./yarn.lock"))) { + if (!existsSync(resolve(defaultPluginPath, "./package-lock.json"))) { return; } @@ -58,9 +58,9 @@ describe("plugin command", () => { }); // Check if the the generated plugin works successfully - const { stdout: stdout2 } = await run(__dirname, [ + const { stdout: stdout2 } = await run(defaultPluginPath, [ "--config", - "./my-webpack-plugin/examples/simple/webpack.config.js", + "./examples/simple/webpack.config.js", ]); expect(normalizeStdout(stdout2)).toContain("Hello World!"); }); @@ -80,7 +80,7 @@ describe("plugin command", () => { expect(existsSync(pluginPath)).toBeTruthy(); // Skip test in case installation fails - if (!existsSync(resolve(pluginPath, "./yarn.lock"))) { + if (!existsSync(resolve(pluginPath, "./package-lock.json"))) { return; } @@ -99,9 +99,9 @@ describe("plugin command", () => { }); // Check if the the generated plugin works successfully - const { stdout: stdout2 } = await run(__dirname, [ + const { stdout: stdout2 } = await run(pluginPath, [ "--config", - "./test-plugin/examples/simple/webpack.config.js", + "./examples/simple/webpack.config.js", ]); expect(normalizeStdout(stdout2)).toContain("Hello World!"); }); @@ -121,7 +121,7 @@ describe("plugin command", () => { expect(existsSync(customPluginPath)).toBeTruthy(); // Skip test in case installation fails - if (!existsSync(resolve(customPluginPath, "./yarn.lock"))) { + if (!existsSync(resolve(customPluginPath, "./package-lock.json"))) { return; } @@ -167,7 +167,7 @@ describe("plugin command", () => { expect(existsSync(customPluginPath)).toBeTruthy(); // Skip test in case installation fails - if (!existsSync(resolve(customPluginPath, "./yarn.lock"))) { + if (!existsSync(resolve(customPluginPath, "./package-lock.json"))) { return; } @@ -208,13 +208,17 @@ describe("plugin command", () => { ["plugin", "-t", "default"], [`${ENTER}`, ENTER], ); + expect(normalizeStdout(stdout)).toContain(firstPrompt); + // Check if the output directory exists with the appropriate plugin name expect(existsSync(defaultPluginPath)).toBeTruthy(); + // Skip test in case installation fails - if (!existsSync(resolve(defaultPluginPath, "./yarn.lock"))) { + if (!existsSync(resolve(defaultPluginPath, "./package-lock.json"))) { return; } + // Test regressively files are scaffolded const files = [ "package.json", @@ -227,10 +231,11 @@ describe("plugin command", () => { files.forEach((file) => { expect(existsSync(join(defaultPluginPath, file))).toBeTruthy(); }); + // Check if the the generated plugin works successfully - const { stdout: stdout2 } = await run(__dirname, [ + const { stdout: stdout2 } = await run(defaultPluginPath, [ "--config", - "./my-webpack-plugin/examples/simple/webpack.config.js", + "./examples/simple/webpack.config.js", ]); expect(normalizeStdout(stdout2)).toContain("Hello World!"); }); From f46a980f365aa7fd5c871cc84fb38e48577526f0 Mon Sep 17 00:00:00 2001 From: James George Date: Fri, 25 Jun 2021 21:27:12 +0530 Subject: [PATCH 029/173] test: increase coverage (#2798) --- .../__snapshots__/init.test.js.snap.webpack4 | 18 ++++++++ .../__snapshots__/init.test.js.snap.webpack5 | 18 ++++++++ test/init/init.test.js | 22 ++++++++++ test/loader/loader.test.js | 44 +++++++++++++++++++ test/plugin/plugin.test.js | 42 ++++++++++++++++++ 5 files changed, 144 insertions(+) diff --git a/test/init/__snapshots__/init.test.js.snap.webpack4 b/test/init/__snapshots__/init.test.js.snap.webpack4 index 3964b35e9bf..57a47075545 100644 --- a/test/init/__snapshots__/init.test.js.snap.webpack4 +++ b/test/init/__snapshots__/init.test.js.snap.webpack4 @@ -1089,3 +1089,21 @@ Object { "version": "1.0.0", } `; + +exports[`init command uses yarn as the package manager when opted 1`] = ` +Object { + "description": "My webpack project", + "devDependencies": Object { + "webpack": "x.x.x", + "webpack-cli": "x.x.x", + }, + "name": "my-webpack-project", + "scripts": Object { + "build": "webpack --mode=production --node-env=production", + "build:dev": "webpack --mode=development", + "build:prod": "webpack --mode=production --node-env=production", + "watch": "webpack --watch", + }, + "version": "1.0.0", +} +`; diff --git a/test/init/__snapshots__/init.test.js.snap.webpack5 b/test/init/__snapshots__/init.test.js.snap.webpack5 index 3964b35e9bf..57a47075545 100644 --- a/test/init/__snapshots__/init.test.js.snap.webpack5 +++ b/test/init/__snapshots__/init.test.js.snap.webpack5 @@ -1089,3 +1089,21 @@ Object { "version": "1.0.0", } `; + +exports[`init command uses yarn as the package manager when opted 1`] = ` +Object { + "description": "My webpack project", + "devDependencies": Object { + "webpack": "x.x.x", + "webpack-cli": "x.x.x", + }, + "name": "my-webpack-project", + "scripts": Object { + "build": "webpack --mode=production --node-env=production", + "build:dev": "webpack --mode=development", + "build:prod": "webpack --mode=production --node-env=production", + "watch": "webpack --watch", + }, + "version": "1.0.0", +} +`; diff --git a/test/init/init.test.js b/test/init/init.test.js index c7221110496..7b11b9de5af 100644 --- a/test/init/init.test.js +++ b/test/init/init.test.js @@ -655,4 +655,26 @@ describe("init command", () => { // Check if the generated package.json file content matches the snapshot expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); }); + + it("uses yarn as the package manager when opted", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [ENTER, `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, ENTER, `${DOWN}${ENTER}`], + ); + + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); + + // Test files + const files = ["package.json", "src", "src/index.js", "webpack.config.js", "yarn.lock"]; + + files.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); + }); + + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + }); }); diff --git a/test/loader/loader.test.js b/test/loader/loader.test.js index dfabefef4f7..5f2c6e2f2aa 100644 --- a/test/loader/loader.test.js +++ b/test/loader/loader.test.js @@ -11,6 +11,8 @@ const { const firstPrompt = "? Loader name (my-loader)"; const ENTER = "\x0D"; +const DOWN = "\x1B\x5B\x42"; + const dataForTests = (rootAssetsPath) => ({ loaderName: "test-loader", loaderPath: join(rootAssetsPath, "test-loader"), @@ -237,4 +239,46 @@ describe("loader command", () => { expect(stdout).toContain("my-loader"); }); + + it("uses yarn as the package manager when opted", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { defaultLoaderPath } = dataForTests(assetsPath); + let { stdout } = await runPromptWithAnswers( + assetsPath, + ["loader", "-t", "default"], + [`${ENTER}`, `${DOWN}${ENTER}`], + ); + + expect(normalizeStdout(stdout)).toContain(firstPrompt); + + // Skip test in case installation fails + if (!existsSync(resolve(defaultLoaderPath, "./yarn.lock"))) { + return; + } + + // Check if the output directory exists with the appropriate loader name + expect(existsSync(defaultLoaderPath)).toBeTruthy(); + + // All test files are scaffolded + const files = [ + "package.json", + "examples", + "src", + "test", + "src/index.js", + "examples/simple/webpack.config.js", + "yarn.lock", + ]; + + files.forEach((file) => { + expect(existsSync(defaultLoaderPath, file)).toBeTruthy(); + }); + + // Check if the the generated loader works successfully + const path = resolve(assetsPath, "./my-loader/examples/simple/"); + + ({ stdout } = await run(path, [])); + + expect(stdout).toContain("my-loader"); + }); }); diff --git a/test/plugin/plugin.test.js b/test/plugin/plugin.test.js index c087fed94b3..1cafa6c0e9a 100644 --- a/test/plugin/plugin.test.js +++ b/test/plugin/plugin.test.js @@ -8,6 +8,7 @@ const { } = require("../utils/test-utils"); const ENTER = "\x0D"; +const DOWN = "\x1B\x5B\x42"; const firstPrompt = "? Plugin name"; const dataForTests = (rootAssetsPath) => ({ @@ -239,4 +240,45 @@ describe("plugin command", () => { ]); expect(normalizeStdout(stdout2)).toContain("Hello World!"); }); + + it("uses yarn as the package manager when opted", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { defaultPluginPath } = dataForTests(assetsPath); + const { stdout } = await runPromptWithAnswers( + assetsPath, + ["plugin"], + [`${ENTER}`, `${DOWN}${ENTER}`], + ); + + expect(normalizeStdout(stdout)).toContain(firstPrompt); + + // Check if the output directory exists with the appropriate plugin name + expect(existsSync(defaultPluginPath)).toBeTruthy(); + + // Skip test in case installation fails + if (!existsSync(resolve(defaultPluginPath, "./yarn.lock"))) { + return; + } + + // Test regressively files are scaffolded + const files = [ + "package.json", + "examples", + "src", + "test", + "src/index.js", + "examples/simple/webpack.config.js", + "yarn.lock", + ]; + files.forEach((file) => { + expect(existsSync(join(defaultPluginPath, file))).toBeTruthy(); + }); + + // Check if the the generated plugin works successfully + const { stdout: stdout2 } = await run(defaultPluginPath, [ + "--config", + "./examples/simple/webpack.config.js", + ]); + expect(normalizeStdout(stdout2)).toContain("Hello World!"); + }); }); From 4e3f6e8c16fe50e48ebf4d24803baf0c5f615a93 Mon Sep 17 00:00:00 2001 From: James George Date: Sat, 26 Jun 2021 20:30:57 +0530 Subject: [PATCH 030/173] refactor: leverage helpers (#2799) --- test/init/init.test.js | 116 +++++++++++++------------------------ test/loader/loader.test.js | 83 +++++++------------------- test/plugin/plugin.test.js | 83 +++++++------------------- 3 files changed, 82 insertions(+), 200 deletions(-) diff --git a/test/init/init.test.js b/test/init/init.test.js index 7b11b9de5af..14553329ce5 100644 --- a/test/init/init.test.js +++ b/test/init/init.test.js @@ -14,6 +14,14 @@ jest.setTimeout(480000); const ENTER = "\x0D"; const DOWN = "\x1B\x5B\x42"; +const defaultTemplateFiles = [ + "package.json", + "package-lock.json", + "src", + "src/index.js", + "webpack.config.js", +]; + // Helper to read from package.json in a given path const readFromPkgJSON = (path) => { const pkgJSONPath = join(path, "package.json"); @@ -43,9 +51,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -61,9 +67,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -82,9 +86,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -103,9 +105,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -129,9 +129,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -152,7 +150,11 @@ describe("init command", () => { expect(stderr).toContain("tsconfig.json"); // Test files - const files = ["package.json", "src", "src/index.ts", "webpack.config.js", "tsconfig.json"]; + const files = [ + ...defaultTemplateFiles.filter((file) => file !== "src/index.js"), + "src/index.ts", + "tsconfig.json", + ]; files.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); @@ -178,7 +180,7 @@ describe("init command", () => { expect(stderr).toContain(".babelrc"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js", ".babelrc"]; + const files = [...defaultTemplateFiles, ".babelrc"]; files.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); @@ -213,9 +215,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -248,13 +248,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = [ - "package.json", - "src", - "src/index.js", - "webpack.config.js", - "postcss.config.js", - ]; + const files = [...defaultTemplateFiles, "postcss.config.js"]; files.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); @@ -289,9 +283,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -324,13 +316,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = [ - "package.json", - "src", - "src/index.js", - "webpack.config.js", - "postcss.config.js", - ]; + const files = [...defaultTemplateFiles, "postcss.config.js"]; files.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); @@ -365,9 +351,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -400,9 +384,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -426,8 +408,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -459,13 +440,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = [ - "package.json", - "src", - "src/index.js", - "webpack.config.js", - "postcss.config.js", - ]; + const files = [...defaultTemplateFiles, "postcss.config.js"]; files.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); @@ -493,9 +468,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -519,9 +492,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -556,9 +527,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -574,9 +543,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -592,9 +559,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -610,9 +575,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -628,9 +591,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -646,9 +607,7 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js"]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); @@ -668,7 +627,10 @@ describe("init command", () => { expect(stderr).toContain("webpack.config.js"); // Test files - const files = ["package.json", "src", "src/index.js", "webpack.config.js", "yarn.lock"]; + const files = [ + ...defaultTemplateFiles.filter((file) => file !== "package-lock.json"), + "yarn.lock", + ]; files.forEach((file) => { expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); diff --git a/test/loader/loader.test.js b/test/loader/loader.test.js index 5f2c6e2f2aa..c8d4644434e 100644 --- a/test/loader/loader.test.js +++ b/test/loader/loader.test.js @@ -19,6 +19,15 @@ const dataForTests = (rootAssetsPath) => ({ defaultLoaderPath: join(rootAssetsPath, "my-loader"), genPath: join(rootAssetsPath, "test-assets"), customLoaderPath: join(rootAssetsPath, "test-assets", "loaderName"), + defaultTemplateFiles: [ + "package.json", + "package-lock.json", + "examples", + "src", + "test", + "src/index.js", + "examples/simple/webpack.config.js", + ], }); describe("loader command", () => { @@ -33,7 +42,7 @@ describe("loader command", () => { it("should scaffold loader with default name if no loader name provided", async () => { const assetsPath = await uniqueDirectoryForTest(); - const { defaultLoaderPath } = dataForTests(assetsPath); + const { defaultLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); let { stdout } = await runPromptWithAnswers(assetsPath, ["loader"], [ENTER, ENTER]); expect(normalizeStdout(stdout)).toContain(firstPrompt); @@ -47,16 +56,7 @@ describe("loader command", () => { expect(existsSync(defaultLoaderPath)).toBeTruthy(); // All test files are scaffolded - const files = [ - "package.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", - ]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(defaultLoaderPath, file)).toBeTruthy(); }); @@ -70,7 +70,7 @@ describe("loader command", () => { it("should scaffold loader template with a given name", async () => { const assetsPath = await uniqueDirectoryForTest(); - const { loaderName, loaderPath } = dataForTests(assetsPath); + const { loaderName, loaderPath, defaultTemplateFiles } = dataForTests(assetsPath); let { stdout } = await runPromptWithAnswers( assetsPath, ["loader"], @@ -88,16 +88,7 @@ describe("loader command", () => { expect(existsSync(loaderPath)).toBeTruthy(); // All test files are scaffolded - const files = [ - "package.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", - ]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(loaderPath, file)).toBeTruthy(); }); @@ -111,7 +102,7 @@ describe("loader command", () => { it("should scaffold loader template in the specified path", async () => { const assetsPath = await uniqueDirectoryForTest(); - const { loaderName, customLoaderPath } = dataForTests(assetsPath); + const { loaderName, customLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); let { stdout } = await runPromptWithAnswers( assetsPath, ["loader", "test-assets"], @@ -129,16 +120,7 @@ describe("loader command", () => { expect(existsSync(customLoaderPath)).toBeTruthy(); // All test files are scaffolded - const files = [ - "package.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", - ]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(customLoaderPath, file)).toBeTruthy(); }); @@ -152,7 +134,7 @@ describe("loader command", () => { it("should scaffold loader template in the current directory", async () => { const assetsPath = await uniqueDirectoryForTest(); - const { loaderName, customLoaderPath } = dataForTests(assetsPath); + const { loaderName, customLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); let { stdout } = await runPromptWithAnswers( assetsPath, @@ -171,16 +153,7 @@ describe("loader command", () => { expect(existsSync(customLoaderPath)).toBeTruthy(); // All test files are scaffolded - const files = [ - "package.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", - ]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(customLoaderPath, file)).toBeTruthy(); }); @@ -201,7 +174,7 @@ describe("loader command", () => { it("recognizes '-t' as an alias for '--template'", async () => { const assetsPath = await uniqueDirectoryForTest(); - const { defaultLoaderPath } = dataForTests(assetsPath); + const { defaultLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); let { stdout } = await runPromptWithAnswers( assetsPath, ["loader", "-t", "default"], @@ -219,16 +192,7 @@ describe("loader command", () => { expect(existsSync(defaultLoaderPath)).toBeTruthy(); // All test files are scaffolded - const files = [ - "package.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", - ]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(defaultLoaderPath, file)).toBeTruthy(); }); @@ -242,7 +206,7 @@ describe("loader command", () => { it("uses yarn as the package manager when opted", async () => { const assetsPath = await uniqueDirectoryForTest(); - const { defaultLoaderPath } = dataForTests(assetsPath); + const { defaultLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); let { stdout } = await runPromptWithAnswers( assetsPath, ["loader", "-t", "default"], @@ -261,12 +225,7 @@ describe("loader command", () => { // All test files are scaffolded const files = [ - "package.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", + ...defaultTemplateFiles.filter((file) => file !== "package-lock.json"), "yarn.lock", ]; diff --git a/test/plugin/plugin.test.js b/test/plugin/plugin.test.js index 1cafa6c0e9a..0599e6dacc3 100644 --- a/test/plugin/plugin.test.js +++ b/test/plugin/plugin.test.js @@ -17,6 +17,14 @@ const dataForTests = (rootAssetsPath) => ({ defaultPluginPath: join(rootAssetsPath, "my-webpack-plugin"), genPath: join(rootAssetsPath, "test-assets"), customPluginPath: join(rootAssetsPath, "test-assets", "test-plugin"), + defaultTemplateFiles: [ + "package.json", + "examples", + "src", + "test", + "src/index.js", + "examples/simple/webpack.config.js", + ], }); describe("plugin command", () => { @@ -31,7 +39,7 @@ describe("plugin command", () => { it("should scaffold plugin with default name if no plugin name provided", async () => { const assetsPath = await uniqueDirectoryForTest(); - const { defaultPluginPath } = dataForTests(assetsPath); + const { defaultPluginPath, defaultTemplateFiles } = dataForTests(assetsPath); const { stdout } = await runPromptWithAnswers(assetsPath, ["plugin"], [ENTER, ENTER]); expect(normalizeStdout(stdout)).toContain(firstPrompt); @@ -45,16 +53,7 @@ describe("plugin command", () => { } // Test regressively files are scaffolded - const files = [ - "package.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", - ]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(join(defaultPluginPath, file))).toBeTruthy(); }); @@ -68,7 +67,7 @@ describe("plugin command", () => { it("should scaffold plugin template with a given name", async () => { const assetsPath = await uniqueDirectoryForTest(); - const { pluginName, pluginPath } = dataForTests(assetsPath); + const { pluginName, pluginPath, defaultTemplateFiles } = dataForTests(assetsPath); const { stdout } = await runPromptWithAnswers( assetsPath, ["plugin"], @@ -86,16 +85,7 @@ describe("plugin command", () => { } // Test regressively files are scaffolded - const files = [ - "package.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", - ]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(join(pluginPath, file))).toBeTruthy(); }); @@ -109,7 +99,7 @@ describe("plugin command", () => { it("should scaffold plugin template in the specified path", async () => { const assetsPath = await uniqueDirectoryForTest(); - const { pluginName, customPluginPath } = dataForTests(assetsPath); + const { pluginName, customPluginPath, defaultTemplateFiles } = dataForTests(assetsPath); const { stdout } = await runPromptWithAnswers( assetsPath, ["plugin", "test-assets"], @@ -127,16 +117,7 @@ describe("plugin command", () => { } // Test regressively files are scaffolded - const files = [ - "package.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", - ]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(join(customPluginPath, file))).toBeTruthy(); }); @@ -150,7 +131,8 @@ describe("plugin command", () => { it("should scaffold plugin template in the current directory", async () => { const assetsPath = await uniqueDirectoryForTest(); - const { genPath, customPluginPath, pluginName } = dataForTests(assetsPath); + const { genPath, customPluginPath, pluginName, defaultTemplateFiles } = + dataForTests(assetsPath); if (!existsSync(genPath)) { mkdirSync(genPath); @@ -173,16 +155,7 @@ describe("plugin command", () => { } // Test regressively files are scaffolded - const files = [ - "package.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", - ]; - - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(join(customPluginPath, file))).toBeTruthy(); }); @@ -203,7 +176,7 @@ describe("plugin command", () => { it("recognizes '-t' as an alias for '--template'", async () => { const assetsPath = await uniqueDirectoryForTest(); - const { defaultPluginPath } = dataForTests(assetsPath); + const { defaultPluginPath, defaultTemplateFiles } = dataForTests(assetsPath); const { stdout } = await runPromptWithAnswers( assetsPath, ["plugin", "-t", "default"], @@ -221,15 +194,7 @@ describe("plugin command", () => { } // Test regressively files are scaffolded - const files = [ - "package.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", - ]; - files.forEach((file) => { + defaultTemplateFiles.forEach((file) => { expect(existsSync(join(defaultPluginPath, file))).toBeTruthy(); }); @@ -243,7 +208,7 @@ describe("plugin command", () => { it("uses yarn as the package manager when opted", async () => { const assetsPath = await uniqueDirectoryForTest(); - const { defaultPluginPath } = dataForTests(assetsPath); + const { defaultPluginPath, defaultTemplateFiles } = dataForTests(assetsPath); const { stdout } = await runPromptWithAnswers( assetsPath, ["plugin"], @@ -262,14 +227,10 @@ describe("plugin command", () => { // Test regressively files are scaffolded const files = [ - "package.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", + ...defaultTemplateFiles.filter((file) => file !== "package-lock.json"), "yarn.lock", ]; + files.forEach((file) => { expect(existsSync(join(defaultPluginPath, file))).toBeTruthy(); }); From 63df8ffe6ec5ce26cb2149d11a956333c7b927a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Jun 2021 13:27:15 +0300 Subject: [PATCH 031/173] chore(deps-dev): bump prettier from 2.3.1 to 2.3.2 (#2800) Bumps [prettier](https://github.com/prettier/prettier) from 2.3.1 to 2.3.2. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/2.3.1...2.3.2) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c4cf2fbc293..6ec9297dbd4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8752,9 +8752,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6" - integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA== + version "2.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" + integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== pretty-bytes@^5.2.0: version "5.6.0" From 4d504b4073a67c728268e6538ed58af7a5a2bf26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Jun 2021 13:27:26 +0300 Subject: [PATCH 032/173] chore(deps-dev): bump @types/node --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6ec9297dbd4..808e8938c3b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1930,9 +1930,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@^15.0.3": - version "15.12.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.4.tgz#e1cf817d70a1e118e81922c4ff6683ce9d422e26" - integrity sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA== + version "15.12.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.5.tgz#9a78318a45d75c9523d2396131bd3cca54b2d185" + integrity sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg== "@types/normalize-package-data@^2.4.0": version "2.4.0" From 42cc87a9b66f4b0dc60892c8fe496329bdcc9b53 Mon Sep 17 00:00:00 2001 From: Anshuman Verma Date: Tue, 29 Jun 2021 15:04:24 +0530 Subject: [PATCH 033/173] chore: upgrade webpack (#2808) --- package.json | 2 +- .../target-flag.test.js.snap.webpack5 | 5 ++++- yarn.lock | 17 +++++++++++------ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 5e8c1131207..19ddc59dab5 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "ts-jest": "^27.0.2", "ts-node": "^9.1.1", "typescript": "^4.1.3", - "webpack": "^5.38.1", + "webpack": "^5.41.0", "webpack-bundle-analyzer": "^4.3.0", "webpack-dev-server": "^3.11.2" } diff --git a/test/build/target/flag-test/__snapshots__/target-flag.test.js.snap.webpack5 b/test/build/target/flag-test/__snapshots__/target-flag.test.js.snap.webpack5 index 9299cf68cda..b94d836067f 100644 --- a/test/build/target/flag-test/__snapshots__/target-flag.test.js.snap.webpack5 +++ b/test/build/target/flag-test/__snapshots__/target-flag.test.js.snap.webpack5 @@ -3,7 +3,10 @@ exports[`--target flag should reset target from node to async-node with --target-reset: stderr 1`] = `""`; exports[`--target flag should throw an error for incompatible multiple targets: stderr 1`] = ` -"[webpack-cli] Error: Universal Chunk Loading is not implemented yet +"[webpack-cli] Error: For the selected environment is no default script chunk format available: +JSONP Array push can be chosen when 'document' or 'importScripts' is available. +CommonJs exports can be chosen when 'require' or node builtins are available. +Select an appropriate 'target' to allow selecting one by default, or specify the 'output.chunkFormat' directly. at stack" `; diff --git a/yarn.lock b/yarn.lock index 808e8938c3b..43dab69d45a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1822,11 +1822,16 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^0.0.47": +"@types/estree@*": version "0.0.47" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== +"@types/estree@^0.0.48": + version "0.0.48" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74" + integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew== + "@types/expect@^1.20.4": version "1.20.4" resolved "https://registry.yarnpkg.com/@types/expect/-/expect-1.20.4.tgz#8288e51737bf7e3ab5d7c77bfa695883745264e5" @@ -10972,13 +10977,13 @@ webpack-sources@^2.3.0: source-list-map "^2.0.1" source-map "^0.6.1" -webpack@^5.38.1: - version "5.40.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.40.0.tgz#3182cfd324759d715252cf541901a226e57b5061" - integrity sha512-c7f5e/WWrxXWUzQqTBg54vBs5RgcAgpvKE4F4VegVgfo4x660ZxYUF2/hpMkZUnLjgytVTitjeXaN4IPlXCGIw== +webpack@^5.41.0: + version "5.41.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.41.0.tgz#217daa27bdd30287c1d7f9d9e0a2304fe33c5a51" + integrity sha512-pCVO7hVm8XiL6DpPtXrFLS8ktmH/tpvtbEex6hn4RweTFe6z6Cugh5FlQoEPZotb15HiirjM2Kv7THTA7sKLzQ== dependencies: "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.47" + "@types/estree" "^0.0.48" "@webassemblyjs/ast" "1.11.0" "@webassemblyjs/wasm-edit" "1.11.0" "@webassemblyjs/wasm-parser" "1.11.0" From bedf20f958342fd185982e4298b6366c86fe3a53 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Jun 2021 18:35:23 +0300 Subject: [PATCH 034/173] chore(deps-dev): bump jest from 27.0.5 to 27.0.6 (#2807) --- yarn.lock | 749 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 393 insertions(+), 356 deletions(-) diff --git a/yarn.lock b/yarn.lock index 43dab69d45a..03a839baa79 100644 --- a/yarn.lock +++ b/yarn.lock @@ -635,94 +635,94 @@ jest-util "^27.0.1" slash "^3.0.0" -"@jest/console@^27.0.2": - version "27.0.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.0.2.tgz#b8eeff8f21ac51d224c851e1729d2630c18631e6" - integrity sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w== +"@jest/console@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.0.6.tgz#3eb72ea80897495c3d73dd97aab7f26770e2260f" + integrity sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.0.6" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.0.2" - jest-util "^27.0.2" + jest-message-util "^27.0.6" + jest-util "^27.0.6" slash "^3.0.0" -"@jest/core@^27.0.5": - version "27.0.5" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.0.5.tgz#59e9e69e7374d65dbb22e3fc1bd52e80991eae72" - integrity sha512-g73//jF0VwsOIrWUC9Cqg03lU3QoAMFxVjsm6n6yNmwZcQPN/o8w+gLWODw5VfKNFZT38otXHWxc6b8eGDUpEA== +"@jest/core@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.0.6.tgz#c5f642727a0b3bf0f37c4b46c675372d0978d4a1" + integrity sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow== dependencies: - "@jest/console" "^27.0.2" - "@jest/reporters" "^27.0.5" - "@jest/test-result" "^27.0.2" - "@jest/transform" "^27.0.5" - "@jest/types" "^27.0.2" + "@jest/console" "^27.0.6" + "@jest/reporters" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^27.0.2" - jest-config "^27.0.5" - jest-haste-map "^27.0.5" - jest-message-util "^27.0.2" - jest-regex-util "^27.0.1" - jest-resolve "^27.0.5" - jest-resolve-dependencies "^27.0.5" - jest-runner "^27.0.5" - jest-runtime "^27.0.5" - jest-snapshot "^27.0.5" - jest-util "^27.0.2" - jest-validate "^27.0.2" - jest-watcher "^27.0.2" + jest-changed-files "^27.0.6" + jest-config "^27.0.6" + jest-haste-map "^27.0.6" + jest-message-util "^27.0.6" + jest-regex-util "^27.0.6" + jest-resolve "^27.0.6" + jest-resolve-dependencies "^27.0.6" + jest-runner "^27.0.6" + jest-runtime "^27.0.6" + jest-snapshot "^27.0.6" + jest-util "^27.0.6" + jest-validate "^27.0.6" + jest-watcher "^27.0.6" micromatch "^4.0.4" p-each-series "^2.1.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.0.5": - version "27.0.5" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.5.tgz#a294ad4acda2e250f789fb98dc667aad33d3adc9" - integrity sha512-IAkJPOT7bqn0GiX5LPio6/e1YpcmLbrd8O5EFYpAOZ6V+9xJDsXjdgN2vgv9WOKIs/uA1kf5WeD96HhlBYO+FA== +"@jest/environment@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.6.tgz#ee293fe996db01d7d663b8108fa0e1ff436219d2" + integrity sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg== dependencies: - "@jest/fake-timers" "^27.0.5" - "@jest/types" "^27.0.2" + "@jest/fake-timers" "^27.0.6" + "@jest/types" "^27.0.6" "@types/node" "*" - jest-mock "^27.0.3" + jest-mock "^27.0.6" -"@jest/fake-timers@^27.0.5": - version "27.0.5" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.5.tgz#304d5aedadf4c75cff3696995460b39d6c6e72f6" - integrity sha512-d6Tyf7iDoKqeUdwUKrOBV/GvEZRF67m7lpuWI0+SCD9D3aaejiOQZxAOxwH2EH/W18gnfYaBPLi0VeTGBHtQBg== +"@jest/fake-timers@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.6.tgz#cbad52f3fe6abe30e7acb8cd5fa3466b9588e3df" + integrity sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.0.6" "@sinonjs/fake-timers" "^7.0.2" "@types/node" "*" - jest-message-util "^27.0.2" - jest-mock "^27.0.3" - jest-util "^27.0.2" + jest-message-util "^27.0.6" + jest-mock "^27.0.6" + jest-util "^27.0.6" -"@jest/globals@^27.0.5": - version "27.0.5" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.5.tgz#f63b8bfa6ea3716f8df50f6a604b5c15b36ffd20" - integrity sha512-qqKyjDXUaZwDuccpbMMKCCMBftvrbXzigtIsikAH/9ca+kaae8InP2MDf+Y/PdCSMuAsSpHS6q6M25irBBUh+Q== +"@jest/globals@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.6.tgz#48e3903f99a4650673d8657334d13c9caf0e8f82" + integrity sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw== dependencies: - "@jest/environment" "^27.0.5" - "@jest/types" "^27.0.2" - expect "^27.0.2" + "@jest/environment" "^27.0.6" + "@jest/types" "^27.0.6" + expect "^27.0.6" -"@jest/reporters@^27.0.5": - version "27.0.5" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.5.tgz#cd730b77d9667b8ff700ad66d4edc293bb09716a" - integrity sha512-4uNg5+0eIfRafnpgu3jCZws3NNcFzhu5JdRd1mKQ4/53+vkIqwB6vfZ4gn5BdGqOaLtYhlOsPaL5ATkKzyBrJw== +"@jest/reporters@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.6.tgz#91e7f2d98c002ad5df94d5b5167c1eb0b9fd5b00" + integrity sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.0.2" - "@jest/test-result" "^27.0.2" - "@jest/transform" "^27.0.5" - "@jest/types" "^27.0.2" + "@jest/console" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" @@ -733,20 +733,20 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^27.0.5" - jest-resolve "^27.0.5" - jest-util "^27.0.2" - jest-worker "^27.0.2" + jest-haste-map "^27.0.6" + jest-resolve "^27.0.6" + jest-util "^27.0.6" + jest-worker "^27.0.6" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" v8-to-istanbul "^8.0.0" -"@jest/source-map@^27.0.1": - version "27.0.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.1.tgz#2afbf73ddbaddcb920a8e62d0238a0a9e0a8d3e4" - integrity sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A== +"@jest/source-map@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.6.tgz#be9e9b93565d49b0548b86e232092491fb60551f" + integrity sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g== dependencies: callsites "^3.0.0" graceful-fs "^4.2.4" @@ -762,41 +762,41 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-result@^27.0.2": - version "27.0.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.2.tgz#0451049e32ceb609b636004ccc27c8fa22263f10" - integrity sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA== +"@jest/test-result@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.6.tgz#3fa42015a14e4fdede6acd042ce98c7f36627051" + integrity sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w== dependencies: - "@jest/console" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/console" "^27.0.6" + "@jest/types" "^27.0.6" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.0.5": - version "27.0.5" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.5.tgz#c58b21db49afc36c0e3921d7ddf1fb7954abfded" - integrity sha512-opztnGs+cXzZ5txFG2+omBaV5ge/0yuJNKbhE3DREMiXE0YxBuzyEa6pNv3kk2JuucIlH2Xvgmn9kEEHSNt/SA== +"@jest/test-sequencer@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz#80a913ed7a1130545b1cd777ff2735dd3af5d34b" + integrity sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA== dependencies: - "@jest/test-result" "^27.0.2" + "@jest/test-result" "^27.0.6" graceful-fs "^4.2.4" - jest-haste-map "^27.0.5" - jest-runtime "^27.0.5" + jest-haste-map "^27.0.6" + jest-runtime "^27.0.6" -"@jest/transform@^27.0.5": - version "27.0.5" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.5.tgz#2dcb78953708af713941ac845b06078bc74ed873" - integrity sha512-lBD6OwKXSc6JJECBNk4mVxtSVuJSBsQrJ9WCBisfJs7EZuYq4K6vM9HmoB7hmPiLIDGeyaerw3feBV/bC4z8tg== +"@jest/transform@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.6.tgz#189ad7107413208f7600f4719f81dd2f7278cc95" + integrity sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^27.0.2" + "@jest/types" "^27.0.6" babel-plugin-istanbul "^6.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 "^27.0.5" - jest-regex-util "^27.0.1" - jest-util "^27.0.2" + jest-haste-map "^27.0.6" + jest-regex-util "^27.0.6" + jest-util "^27.0.6" micromatch "^4.0.4" pirates "^4.0.1" slash "^3.0.0" @@ -836,6 +836,17 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jest/types@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.6.tgz#9a992bc517e0c49f035938b8549719c2de40706b" + integrity sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + "@lerna/add@4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@lerna/add/-/add-4.0.0.tgz#c36f57d132502a57b9e7058d1548b7a565ef183f" @@ -2676,16 +2687,16 @@ 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@^27.0.5: - version "27.0.5" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.5.tgz#cd34c033ada05d1362211e5152391fd7a88080c8" - integrity sha512-bTMAbpCX7ldtfbca2llYLeSFsDM257aspyAOpsdrdSrBqoLkWCy4HPYTXtXWaSLgFPjrJGACL65rzzr4RFGadw== +babel-jest@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.6.tgz#e99c6e0577da2655118e3608b68761a5a69bd0d8" + integrity sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA== dependencies: - "@jest/transform" "^27.0.5" - "@jest/types" "^27.0.2" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^27.0.1" + babel-preset-jest "^27.0.6" chalk "^4.0.0" graceful-fs "^4.2.4" slash "^3.0.0" @@ -2708,10 +2719,10 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz#a6d10e484c93abff0f4e95f437dad26e5736ea11" - integrity sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ== +babel-plugin-jest-hoist@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz#f7c6b3d764af21cb4a2a1ab6870117dbde15b456" + integrity sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -2736,12 +2747,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz#7a50c75d16647c23a2cf5158d5bb9eb206b10e20" - integrity sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA== +babel-preset-jest@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz#909ef08e9f24a4679768be2f60a3df0856843f9d" + integrity sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw== dependencies: - babel-plugin-jest-hoist "^27.0.1" + babel-plugin-jest-hoist "^27.0.6" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -3944,10 +3955,10 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== -diff-sequences@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.1.tgz#9c9801d52ed5f576ff0a20e3022a13ee6e297e7c" - integrity sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg== +diff-sequences@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" + integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ== diff@^3.5.0: version "3.5.0" @@ -4506,17 +4517,17 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.0.2.tgz#e66ca3a4c9592f1c019fa1d46459a9d2084f3422" - integrity sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w== +expect@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.0.6.tgz#a4d74fbe27222c718fff68ef49d78e26a8fd4c05" + integrity sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.0.6" ansi-styles "^5.0.0" - jest-get-type "^27.0.1" - jest-matcher-utils "^27.0.2" - jest-message-util "^27.0.2" - jest-regex-util "^27.0.1" + jest-get-type "^27.0.6" + jest-matcher-utils "^27.0.6" + jest-message-util "^27.0.6" + jest-regex-util "^27.0.6" express@^4.17.1: version "4.17.1" @@ -6316,84 +6327,84 @@ jake@^10.6.1: filelist "^1.0.1" minimatch "^3.0.4" -jest-changed-files@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.0.2.tgz#997253042b4a032950fc5f56abf3c5d1f8560801" - integrity sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw== +jest-changed-files@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.0.6.tgz#bed6183fcdea8a285482e3b50a9a7712d49a7a8b" + integrity sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.0.6" execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.0.5: - version "27.0.5" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.0.5.tgz#b5e327f1d6857c8485126f8e364aefa4378debaa" - integrity sha512-p5rO90o1RTh8LPOG6l0Fc9qgp5YGv+8M5CFixhMh7gGHtGSobD1AxX9cjFZujILgY8t30QZ7WVvxlnuG31r8TA== +jest-circus@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.0.6.tgz#dd4df17c4697db6a2c232aaad4e9cec666926668" + integrity sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q== dependencies: - "@jest/environment" "^27.0.5" - "@jest/test-result" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/environment" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/types" "^27.0.6" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" - expect "^27.0.2" + expect "^27.0.6" is-generator-fn "^2.0.0" - jest-each "^27.0.2" - jest-matcher-utils "^27.0.2" - jest-message-util "^27.0.2" - jest-runtime "^27.0.5" - jest-snapshot "^27.0.5" - jest-util "^27.0.2" - pretty-format "^27.0.2" + jest-each "^27.0.6" + jest-matcher-utils "^27.0.6" + jest-message-util "^27.0.6" + jest-runtime "^27.0.6" + jest-snapshot "^27.0.6" + jest-util "^27.0.6" + pretty-format "^27.0.6" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.0.5: - version "27.0.5" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.5.tgz#f359ba042624cffb96b713010a94bffb7498a37c" - integrity sha512-kZqY020QFOFQKVE2knFHirTBElw3/Q0kUbDc3nMfy/x+RQ7zUY89SUuzpHHJoSX1kX7Lq569ncvjNqU3Td/FCA== +jest-cli@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.6.tgz#d021e5f4d86d6a212450d4c7b86cb219f1e6864f" + integrity sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg== dependencies: - "@jest/core" "^27.0.5" - "@jest/test-result" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/core" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/types" "^27.0.6" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" - jest-config "^27.0.5" - jest-util "^27.0.2" - jest-validate "^27.0.2" + jest-config "^27.0.6" + jest-util "^27.0.6" + jest-validate "^27.0.6" prompts "^2.0.1" yargs "^16.0.3" -jest-config@^27.0.5: - version "27.0.5" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.5.tgz#683da3b0d8237675c29c817f6e3aba1481028e19" - integrity sha512-zCUIXag7QIXKEVN4kUKbDBDi9Q53dV5o3eNhGqe+5zAbt1vLs4VE3ceWaYrOub0L4Y7E9pGfM84TX/0ARcE+Qw== +jest-config@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.6.tgz#119fb10f149ba63d9c50621baa4f1f179500277f" + integrity sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^27.0.5" - "@jest/types" "^27.0.2" - babel-jest "^27.0.5" + "@jest/test-sequencer" "^27.0.6" + "@jest/types" "^27.0.6" + babel-jest "^27.0.6" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" is-ci "^3.0.0" - jest-circus "^27.0.5" - jest-environment-jsdom "^27.0.5" - jest-environment-node "^27.0.5" - jest-get-type "^27.0.1" - jest-jasmine2 "^27.0.5" - jest-regex-util "^27.0.1" - jest-resolve "^27.0.5" - jest-runner "^27.0.5" - jest-util "^27.0.2" - jest-validate "^27.0.2" + jest-circus "^27.0.6" + jest-environment-jsdom "^27.0.6" + jest-environment-node "^27.0.6" + jest-get-type "^27.0.6" + jest-jasmine2 "^27.0.6" + jest-regex-util "^27.0.6" + jest-resolve "^27.0.6" + jest-runner "^27.0.6" + jest-util "^27.0.6" + jest-validate "^27.0.6" micromatch "^4.0.4" - pretty-format "^27.0.2" + pretty-format "^27.0.6" jest-diff@^26.0.0: version "26.6.2" @@ -6405,130 +6416,130 @@ jest-diff@^26.0.0: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-diff@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.0.2.tgz#f315b87cee5dc134cf42c2708ab27375cc3f5a7e" - integrity sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw== +jest-diff@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.0.6.tgz#4a7a19ee6f04ad70e0e3388f35829394a44c7b5e" + integrity sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg== dependencies: chalk "^4.0.0" - diff-sequences "^27.0.1" - jest-get-type "^27.0.1" - pretty-format "^27.0.2" + diff-sequences "^27.0.6" + jest-get-type "^27.0.6" + pretty-format "^27.0.6" -jest-docblock@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.1.tgz#bd9752819b49fa4fab1a50b73eb58c653b962e8b" - integrity sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA== +jest-docblock@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.6.tgz#cc78266acf7fe693ca462cbbda0ea4e639e4e5f3" + integrity sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA== dependencies: detect-newline "^3.0.0" -jest-each@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.0.2.tgz#865ddb4367476ced752167926b656fa0dcecd8c7" - integrity sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ== +jest-each@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.0.6.tgz#cee117071b04060158dc8d9a66dc50ad40ef453b" + integrity sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.0.6" chalk "^4.0.0" - jest-get-type "^27.0.1" - jest-util "^27.0.2" - pretty-format "^27.0.2" - -jest-environment-jsdom@^27.0.5: - version "27.0.5" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.5.tgz#c36771977cf4490a9216a70473b39161d193c212" - integrity sha512-ToWhViIoTl5738oRaajTMgYhdQL73UWPoV4GqHGk2DPhs+olv8OLq5KoQW8Yf+HtRao52XLqPWvl46dPI88PdA== - dependencies: - "@jest/environment" "^27.0.5" - "@jest/fake-timers" "^27.0.5" - "@jest/types" "^27.0.2" + jest-get-type "^27.0.6" + jest-util "^27.0.6" + pretty-format "^27.0.6" + +jest-environment-jsdom@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz#f66426c4c9950807d0a9f209c590ce544f73291f" + integrity sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw== + dependencies: + "@jest/environment" "^27.0.6" + "@jest/fake-timers" "^27.0.6" + "@jest/types" "^27.0.6" "@types/node" "*" - jest-mock "^27.0.3" - jest-util "^27.0.2" + jest-mock "^27.0.6" + jest-util "^27.0.6" jsdom "^16.6.0" -jest-environment-node@^27.0.5: - version "27.0.5" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.5.tgz#b7238fc2b61ef2fb9563a3b7653a95fa009a6a54" - integrity sha512-47qqScV/WMVz5OKF5TWpAeQ1neZKqM3ySwNveEnLyd+yaE/KT6lSMx/0SOx60+ZUcVxPiESYS+Kt2JS9y4PpkQ== +jest-environment-node@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.6.tgz#a6699b7ceb52e8d68138b9808b0c404e505f3e07" + integrity sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w== dependencies: - "@jest/environment" "^27.0.5" - "@jest/fake-timers" "^27.0.5" - "@jest/types" "^27.0.2" + "@jest/environment" "^27.0.6" + "@jest/fake-timers" "^27.0.6" + "@jest/types" "^27.0.6" "@types/node" "*" - jest-mock "^27.0.3" - jest-util "^27.0.2" + jest-mock "^27.0.6" + jest-util "^27.0.6" 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-get-type@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.1.tgz#34951e2b08c8801eb28559d7eb732b04bbcf7815" - integrity sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg== +jest-get-type@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" + integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== -jest-haste-map@^27.0.5: - version "27.0.5" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.5.tgz#2e1e55073b5328410a2c0d74b334e513d71f3470" - integrity sha512-3LFryGSHxwPFHzKIs6W0BGA2xr6g1MvzSjR3h3D8K8Uqy4vbRm/grpGHzbPtIbOPLC6wFoViRrNEmd116QWSkw== +jest-haste-map@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.6.tgz#4683a4e68f6ecaa74231679dca237279562c8dc7" + integrity sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.0.6" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.4" - jest-regex-util "^27.0.1" - jest-serializer "^27.0.1" - jest-util "^27.0.2" - jest-worker "^27.0.2" + jest-regex-util "^27.0.6" + jest-serializer "^27.0.6" + jest-util "^27.0.6" + jest-worker "^27.0.6" micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.0.5: - version "27.0.5" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.5.tgz#8a6eb2a685cdec3af13881145c77553e4e197776" - integrity sha512-m3TojR19sFmTn79QoaGy1nOHBcLvtLso6Zh7u+gYxZWGcza4rRPVqwk1hciA5ZOWWZIJOukAcore8JRX992FaA== +jest-jasmine2@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz#fd509a9ed3d92bd6edb68a779f4738b100655b37" + integrity sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^27.0.5" - "@jest/source-map" "^27.0.1" - "@jest/test-result" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/environment" "^27.0.6" + "@jest/source-map" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/types" "^27.0.6" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^27.0.2" + expect "^27.0.6" is-generator-fn "^2.0.0" - jest-each "^27.0.2" - jest-matcher-utils "^27.0.2" - jest-message-util "^27.0.2" - jest-runtime "^27.0.5" - jest-snapshot "^27.0.5" - jest-util "^27.0.2" - pretty-format "^27.0.2" + jest-each "^27.0.6" + jest-matcher-utils "^27.0.6" + jest-message-util "^27.0.6" + jest-runtime "^27.0.6" + jest-snapshot "^27.0.6" + jest-util "^27.0.6" + pretty-format "^27.0.6" throat "^6.0.1" -jest-leak-detector@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz#ce19aa9dbcf7a72a9d58907a970427506f624e69" - integrity sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q== +jest-leak-detector@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz#545854275f85450d4ef4b8fe305ca2a26450450f" + integrity sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ== dependencies: - jest-get-type "^27.0.1" - pretty-format "^27.0.2" + jest-get-type "^27.0.6" + pretty-format "^27.0.6" -jest-matcher-utils@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz#f14c060605a95a466cdc759acc546c6f4cbfc4f0" - integrity sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA== +jest-matcher-utils@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz#2a8da1e86c620b39459f4352eaa255f0d43e39a9" + integrity sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA== dependencies: chalk "^4.0.0" - jest-diff "^27.0.2" - jest-get-type "^27.0.1" - pretty-format "^27.0.2" + jest-diff "^27.0.6" + jest-get-type "^27.0.6" + pretty-format "^27.0.6" jest-message-util@^27.0.1: version "27.0.1" @@ -6545,27 +6556,27 @@ jest-message-util@^27.0.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.2.tgz#181c9b67dff504d8f4ad15cba10d8b80f272048c" - integrity sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw== +jest-message-util@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.6.tgz#158bcdf4785706492d164a39abca6a14da5ab8b5" + integrity sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.0.2" + "@jest/types" "^27.0.6" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.4" - pretty-format "^27.0.2" + pretty-format "^27.0.6" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.0.3: - version "27.0.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.0.3.tgz#5591844f9192b3335c0dca38e8e45ed297d4d23d" - integrity sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q== +jest-mock@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.0.6.tgz#0efdd40851398307ba16778728f6d34d583e3467" + integrity sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.0.6" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -6573,76 +6584,81 @@ jest-pnp-resolver@^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@^27.0.0, jest-regex-util@^27.0.1: +jest-regex-util@^27.0.0: version "27.0.1" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.1.tgz#69d4b1bf5b690faa3490113c47486ed85dd45b68" integrity sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ== -jest-resolve-dependencies@^27.0.5: - version "27.0.5" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.5.tgz#819ccdddd909c65acddb063aac3a49e4ba1ed569" - integrity sha512-xUj2dPoEEd59P+nuih4XwNa4nJ/zRd/g4rMvjHrZPEBWeWRq/aJnnM6mug+B+Nx+ILXGtfWHzQvh7TqNV/WbuA== +jest-regex-util@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5" + integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ== + +jest-resolve-dependencies@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz#3e619e0ef391c3ecfcf6ef4056207a3d2be3269f" + integrity sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA== dependencies: - "@jest/types" "^27.0.2" - jest-regex-util "^27.0.1" - jest-snapshot "^27.0.5" + "@jest/types" "^27.0.6" + jest-regex-util "^27.0.6" + jest-snapshot "^27.0.6" -jest-resolve@^27.0.5: - version "27.0.5" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.5.tgz#937535a5b481ad58e7121eaea46d1424a1e0c507" - integrity sha512-Md65pngRh8cRuWVdWznXBB5eDt391OJpdBaJMxfjfuXCvOhM3qQBtLMCMTykhuUKiBMmy5BhqCW7AVOKmPrW+Q== +jest-resolve@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.6.tgz#e90f436dd4f8fbf53f58a91c42344864f8e55bff" + integrity sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.0.6" chalk "^4.0.0" escalade "^3.1.1" graceful-fs "^4.2.4" jest-pnp-resolver "^1.2.2" - jest-util "^27.0.2" - jest-validate "^27.0.2" + jest-util "^27.0.6" + jest-validate "^27.0.6" resolve "^1.20.0" slash "^3.0.0" -jest-runner@^27.0.5: - version "27.0.5" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.5.tgz#b6fdc587e1a5056339205914294555c554efc08a" - integrity sha512-HNhOtrhfKPArcECgBTcWOc+8OSL8GoFoa7RsHGnfZR1C1dFohxy9eLtpYBS+koybAHlJLZzNCx2Y/Ic3iEtJpQ== +jest-runner@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.6.tgz#1325f45055539222bbc7256a6976e993ad2f9520" + integrity sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ== dependencies: - "@jest/console" "^27.0.2" - "@jest/environment" "^27.0.5" - "@jest/test-result" "^27.0.2" - "@jest/transform" "^27.0.5" - "@jest/types" "^27.0.2" + "@jest/console" "^27.0.6" + "@jest/environment" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" "@types/node" "*" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-docblock "^27.0.1" - jest-environment-jsdom "^27.0.5" - jest-environment-node "^27.0.5" - jest-haste-map "^27.0.5" - jest-leak-detector "^27.0.2" - jest-message-util "^27.0.2" - jest-resolve "^27.0.5" - jest-runtime "^27.0.5" - jest-util "^27.0.2" - jest-worker "^27.0.2" + jest-docblock "^27.0.6" + jest-environment-jsdom "^27.0.6" + jest-environment-node "^27.0.6" + jest-haste-map "^27.0.6" + jest-leak-detector "^27.0.6" + jest-message-util "^27.0.6" + jest-resolve "^27.0.6" + jest-runtime "^27.0.6" + jest-util "^27.0.6" + jest-worker "^27.0.6" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.0.5: - version "27.0.5" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.5.tgz#cd5d1aa9754d30ddf9f13038b3cb7b95b46f552d" - integrity sha512-V/w/+VasowPESbmhXn5AsBGPfb35T7jZPGZybYTHxZdP7Gwaa+A0EXE6rx30DshHKA98lVCODbCO8KZpEW3hiQ== - dependencies: - "@jest/console" "^27.0.2" - "@jest/environment" "^27.0.5" - "@jest/fake-timers" "^27.0.5" - "@jest/globals" "^27.0.5" - "@jest/source-map" "^27.0.1" - "@jest/test-result" "^27.0.2" - "@jest/transform" "^27.0.5" - "@jest/types" "^27.0.2" +jest-runtime@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.6.tgz#45877cfcd386afdd4f317def551fc369794c27c9" + integrity sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q== + dependencies: + "@jest/console" "^27.0.6" + "@jest/environment" "^27.0.6" + "@jest/fake-timers" "^27.0.6" + "@jest/globals" "^27.0.6" + "@jest/source-map" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" "@types/yargs" "^16.0.0" chalk "^4.0.0" cjs-module-lexer "^1.0.0" @@ -6650,30 +6666,30 @@ jest-runtime@^27.0.5: exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-haste-map "^27.0.5" - jest-message-util "^27.0.2" - jest-mock "^27.0.3" - jest-regex-util "^27.0.1" - jest-resolve "^27.0.5" - jest-snapshot "^27.0.5" - jest-util "^27.0.2" - jest-validate "^27.0.2" + jest-haste-map "^27.0.6" + jest-message-util "^27.0.6" + jest-mock "^27.0.6" + jest-regex-util "^27.0.6" + jest-resolve "^27.0.6" + jest-snapshot "^27.0.6" + jest-util "^27.0.6" + jest-validate "^27.0.6" slash "^3.0.0" strip-bom "^4.0.0" yargs "^16.0.3" -jest-serializer@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.1.tgz#2464d04dcc33fb71dc80b7c82e3c5e8a08cb1020" - integrity sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ== +jest-serializer@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.6.tgz#93a6c74e0132b81a2d54623251c46c498bb5bec1" + integrity sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA== dependencies: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^27.0.5: - version "27.0.5" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.5.tgz#6e3b9e8e193685372baff771ba34af631fe4d4d5" - integrity sha512-H1yFYdgnL1vXvDqMrnDStH6yHFdMEuzYQYc71SnC/IJnuuhW6J16w8GWG1P+qGd3Ag3sQHjbRr0TcwEo/vGS+g== +jest-snapshot@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.6.tgz#f4e6b208bd2e92e888344d78f0f650bcff05a4bf" + integrity sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" @@ -6681,26 +6697,26 @@ jest-snapshot@^27.0.5: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.0.5" - "@jest/types" "^27.0.2" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.0.2" + expect "^27.0.6" graceful-fs "^4.2.4" - jest-diff "^27.0.2" - jest-get-type "^27.0.1" - jest-haste-map "^27.0.5" - jest-matcher-utils "^27.0.2" - jest-message-util "^27.0.2" - jest-resolve "^27.0.5" - jest-util "^27.0.2" + jest-diff "^27.0.6" + jest-get-type "^27.0.6" + jest-haste-map "^27.0.6" + jest-matcher-utils "^27.0.6" + jest-message-util "^27.0.6" + jest-resolve "^27.0.6" + jest-util "^27.0.6" natural-compare "^1.4.0" - pretty-format "^27.0.2" + pretty-format "^27.0.6" semver "^7.3.2" -jest-util@^27.0.0, jest-util@^27.0.1, jest-util@^27.0.2: +jest-util@^27.0.0, jest-util@^27.0.1: version "27.0.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.2.tgz#fc2c7ace3c75ae561cf1e5fdb643bf685a5be7c7" integrity sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA== @@ -6712,17 +6728,29 @@ jest-util@^27.0.0, jest-util@^27.0.1, jest-util@^27.0.2: is-ci "^3.0.0" picomatch "^2.2.3" -jest-validate@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.0.2.tgz#7fe2c100089449cd5cbb47a5b0b6cb7cda5beee5" - integrity sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg== +jest-util@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.6.tgz#e8e04eec159de2f4d5f57f795df9cdc091e50297" + integrity sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.0.6" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^3.0.0" + picomatch "^2.2.3" + +jest-validate@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.0.6.tgz#930a527c7a951927df269f43b2dc23262457e2a6" + integrity sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA== + dependencies: + "@jest/types" "^27.0.6" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.0.1" + jest-get-type "^27.0.6" leven "^3.1.0" - pretty-format "^27.0.2" + pretty-format "^27.0.6" jest-watch-typeahead@^0.6.1: version "0.6.4" @@ -6750,17 +6778,17 @@ jest-watcher@^27.0.0: jest-util "^27.0.1" string-length "^4.0.1" -jest-watcher@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.2.tgz#dab5f9443e2d7f52597186480731a8c6335c5deb" - integrity sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA== +jest-watcher@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.6.tgz#89526f7f9edf1eac4e4be989bcb6dec6b8878d9c" + integrity sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ== dependencies: - "@jest/test-result" "^27.0.2" - "@jest/types" "^27.0.2" + "@jest/test-result" "^27.0.6" + "@jest/types" "^27.0.6" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.0.2" + jest-util "^27.0.6" string-length "^4.0.1" jest-worker@^27.0.2: @@ -6772,14 +6800,23 @@ jest-worker@^27.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" +jest-worker@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.6.tgz#a5fdb1e14ad34eb228cfe162d9f729cdbfa28aed" + integrity sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@^27.0.3: - version "27.0.5" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.0.5.tgz#141825e105514a834cc8d6e44670509e8d74c5f2" - integrity sha512-4NlVMS29gE+JOZvgmSAsz3eOjkSsHqjTajlIsah/4MVSmKvf3zFP/TvgcLoWe2UVHiE9KF741sReqhF0p4mqbQ== + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.0.6.tgz#10517b2a628f0409087fbf473db44777d7a04505" + integrity sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA== dependencies: - "@jest/core" "^27.0.5" + "@jest/core" "^27.0.6" import-local "^3.0.2" - jest-cli "^27.0.5" + jest-cli "^27.0.6" js-tokens@^4.0.0: version "4.0.0" @@ -8786,12 +8823,12 @@ pretty-format@^27.0.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.2.tgz#9283ff8c4f581b186b2d4da461617143dca478a4" - integrity sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig== +pretty-format@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.6.tgz#ab770c47b2c6f893a21aefc57b75da63ef49a11f" + integrity sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ== dependencies: - "@jest/types" "^27.0.2" + "@jest/types" "^27.0.6" ansi-regex "^5.0.0" ansi-styles "^5.0.0" react-is "^17.0.1" From 54794446f86164b4da2ec059d5d2bcdaff62f235 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Jun 2021 18:56:46 +0300 Subject: [PATCH 035/173] chore(deps-dev): bump @typescript-eslint/parser from 4.28.0 to 4.28.1 (#2806) --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 03a839baa79..5c652f6e850 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2067,13 +2067,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.0.tgz#2404c16751a28616ef3abab77c8e51d680a12caa" - integrity sha512-7x4D22oPY8fDaOCvkuXtYYTQ6mTMmkivwEzS+7iml9F9VkHGbbZ3x4fHRwxAb5KeuSkLqfnYjs46tGx2Nour4A== + version "4.28.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.1.tgz#5181b81658414f47291452c15bf6cd44a32f85bd" + integrity sha512-UjrMsgnhQIIK82hXGaD+MCN8IfORS1CbMdu7VlZbYa8LCZtbZjJA26De4IPQB7XYZbL8gJ99KWNj0l6WD0guJg== dependencies: - "@typescript-eslint/scope-manager" "4.28.0" - "@typescript-eslint/types" "4.28.0" - "@typescript-eslint/typescript-estree" "4.28.0" + "@typescript-eslint/scope-manager" "4.28.1" + "@typescript-eslint/types" "4.28.1" + "@typescript-eslint/typescript-estree" "4.28.1" debug "^4.3.1" "@typescript-eslint/scope-manager@4.28.0": @@ -2084,11 +2084,24 @@ "@typescript-eslint/types" "4.28.0" "@typescript-eslint/visitor-keys" "4.28.0" +"@typescript-eslint/scope-manager@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.1.tgz#fd3c20627cdc12933f6d98b386940d8d0ce8a991" + integrity sha512-o95bvGKfss6705x7jFGDyS7trAORTy57lwJ+VsYwil/lOUxKQ9tA7Suuq+ciMhJc/1qPwB3XE2DKh9wubW8YYA== + dependencies: + "@typescript-eslint/types" "4.28.1" + "@typescript-eslint/visitor-keys" "4.28.1" + "@typescript-eslint/types@4.28.0": version "4.28.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.0.tgz#a33504e1ce7ac51fc39035f5fe6f15079d4dafb0" integrity sha512-p16xMNKKoiJCVZY5PW/AfILw2xe1LfruTcfAKBj3a+wgNYP5I9ZEKNDOItoRt53p4EiPV6iRSICy8EPanG9ZVA== +"@typescript-eslint/types@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.1.tgz#d0f2ecbef3684634db357b9bbfc97b94b828f83f" + integrity sha512-4z+knEihcyX7blAGi7O3Fm3O6YRCP+r56NJFMNGsmtdw+NCdpG5SgNz427LS9nQkRVTswZLhz484hakQwB8RRg== + "@typescript-eslint/typescript-estree@4.28.0": version "4.28.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.0.tgz#e66d4e5aa2ede66fec8af434898fe61af10c71cf" @@ -2102,6 +2115,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz#af882ae41740d1f268e38b4d0fad21e7e8d86a81" + integrity sha512-GhKxmC4sHXxHGJv8e8egAZeTZ6HI4mLU6S7FUzvFOtsk7ZIDN1ksA9r9DyOgNqowA9yAtZXV0Uiap61bIO81FQ== + dependencies: + "@typescript-eslint/types" "4.28.1" + "@typescript-eslint/visitor-keys" "4.28.1" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.28.0": version "4.28.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.0.tgz#255c67c966ec294104169a6939d96f91c8a89434" @@ -2110,6 +2136,14 @@ "@typescript-eslint/types" "4.28.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz#162a515ee255f18a6068edc26df793cdc1ec9157" + integrity sha512-K4HMrdFqr9PFquPu178SaSb92CaWe2yErXyPumc8cYWxFmhgJsNY9eSePmO05j0JhBvf2Cdhptd6E6Yv9HVHcg== + dependencies: + "@typescript-eslint/types" "4.28.1" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.0": version "1.11.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" From adf2ee9eab7b4faf54454b5066af28779fdf6742 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Jun 2021 19:27:55 +0300 Subject: [PATCH 036/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin (#2804) --- yarn.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5c652f6e850..bd481f74cb5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2042,27 +2042,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.0.tgz#1a66f03b264844387beb7dc85e1f1d403bd1803f" - integrity sha512-KcF6p3zWhf1f8xO84tuBailV5cN92vhS+VT7UJsPzGBm9VnQqfI9AsiMUFUCYHTYPg1uCCo+HyiDnpDuvkAMfQ== + version "4.28.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.1.tgz#c045e440196ae45464e08e20c38aff5c3a825947" + integrity sha512-9yfcNpDaNGQ6/LQOX/KhUFTR1sCKH+PBr234k6hI9XJ0VP5UqGxap0AnNwBnWFk1MNyWBylJH9ZkzBXC+5akZQ== dependencies: - "@typescript-eslint/experimental-utils" "4.28.0" - "@typescript-eslint/scope-manager" "4.28.0" + "@typescript-eslint/experimental-utils" "4.28.1" + "@typescript-eslint/scope-manager" "4.28.1" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.28.0": - version "4.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.0.tgz#13167ed991320684bdc23588135ae62115b30ee0" - integrity sha512-9XD9s7mt3QWMk82GoyUpc/Ji03vz4T5AYlHF9DcoFNfJ/y3UAclRsfGiE2gLfXtyC+JRA3trR7cR296TEb1oiQ== +"@typescript-eslint/experimental-utils@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.1.tgz#3869489dcca3c18523c46018b8996e15948dbadc" + integrity sha512-n8/ggadrZ+uyrfrSEchx3jgODdmcx7MzVM2sI3cTpI/YlfSm0+9HEUaWw3aQn2urL2KYlWYMDgn45iLfjDYB+Q== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.28.0" - "@typescript-eslint/types" "4.28.0" - "@typescript-eslint/typescript-estree" "4.28.0" + "@typescript-eslint/scope-manager" "4.28.1" + "@typescript-eslint/types" "4.28.1" + "@typescript-eslint/typescript-estree" "4.28.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" From cf3b1b2df09a7e342e9bcd6ac6e6643ae7c49c47 Mon Sep 17 00:00:00 2001 From: James George Date: Tue, 29 Jun 2021 22:12:40 +0530 Subject: [PATCH 037/173] chore: do not prompt if multiple installers are not available (#2809) --- packages/generators/src/addon-generator.ts | 7 +++- packages/generators/src/init-generator.ts | 41 +++++++++++++--------- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/packages/generators/src/addon-generator.ts b/packages/generators/src/addon-generator.ts index b557f1e4ea9..1a78c4bb614 100644 --- a/packages/generators/src/addon-generator.ts +++ b/packages/generators/src/addon-generator.ts @@ -77,13 +77,18 @@ const addonGenerator = ( this.props = await this.prompt(prompts); + const installers = this.utils.getAvailableInstallers(); + if (installers.length === 1) { + return ([this.packageManager] = installers); + } + // Prompt for the package manager of choice const defaultPackager = this.utils.getPackageManager(); const { packager } = await List( this, "packager", "Pick a package manager:", - this.utils.getAvailableInstallers(), + installers, defaultPackager, false, ); diff --git a/packages/generators/src/init-generator.ts b/packages/generators/src/init-generator.ts index d8868052102..7b022fd8e51 100644 --- a/packages/generators/src/init-generator.ts +++ b/packages/generators/src/init-generator.ts @@ -18,13 +18,14 @@ import { readFileSync, writeFileSync } from "fs"; * */ export default class InitGenerator extends CustomGenerator { - public template: string; + public answers: Record; + public configurationPath: string; + public force: boolean; public generationPath: string; + public packageManager: string; public resolvedGenerationPath: string; - public configurationPath: string; public supportedTemplates: string[]; - public answers: Record; - public force: boolean; + public template: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any public utils: any; @@ -100,22 +101,30 @@ export default class InitGenerator extends CustomGenerator { } public async installPlugins(): Promise { - // Prompt for the package manager of choice - const defaultPackager = this.utils.getPackageManager(); - const { packager } = await Question.List( - this, - "packager", - "Pick a package manager:", - this.utils.getAvailableInstallers(), - defaultPackager, - this.force, - ); + const installers = this.utils.getAvailableInstallers(); + + if (installers.length === 1) { + [this.packageManager] = installers; + } else { + // Prompt for the package manager of choice + const defaultPackager = this.utils.getPackageManager(); + const { packager } = await Question.List( + this, + "packager", + "Pick a package manager:", + installers, + defaultPackager, + this.force, + ); + this.packageManager = packager; + } + const opts: { dev?: boolean; "save-dev"?: boolean; - } = packager === "yarn" ? { dev: true } : { "save-dev": true }; + } = this.packageManager === "yarn" ? { dev: true } : { "save-dev": true }; - this.scheduleInstallTask(packager, this.dependencies, opts, { + this.scheduleInstallTask(this.packageManager, this.dependencies, opts, { cwd: this.generationPath, }); } From 12a4de5cdc9741de046334ad6429fab277857bd2 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Wed, 30 Jun 2021 17:21:13 +0530 Subject: [PATCH 038/173] docs: update options (#2811) --- OPTIONS.md | 413 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 278 insertions(+), 135 deletions(-) diff --git a/OPTIONS.md b/OPTIONS.md index f0c25ad650d..1af9b634637 100644 --- a/OPTIONS.md +++ b/OPTIONS.md @@ -21,33 +21,43 @@ Options: --no-bail Negative 'bail' option. --cache Enable in memory caching. Disable caching. --no-cache Negative 'cache' option. - --cache-max-generations Number of generations unused cache entries stay in memory cache at minimum (1 = may be removed after unused for a single compilation, ..., Infinity: kept forever). + --cache-max-generations Number of generations unused cache entries stay in memory cache at minimum (1 = may be removed after unused for a + single compilation, ..., Infinity: kept forever). --cache-type In memory caching. Filesystem caching. - --cache-allow-collecting-memory Allows to collect unused memory allocated during deserialization. This requires copying data into smaller buffers and has a performance cost. + --cache-allow-collecting-memory Allows to collect unused memory allocated during deserialization. This requires copying data into smaller buffers and + has a performance cost. --no-cache-allow-collecting-memory Negative 'cache-allow-collecting-memory' option. --cache-cache-directory Base directory for the cache (defaults to node_modules/.cache/webpack). --cache-cache-location Locations for the cache (defaults to cacheDirectory / name). --cache-hash-algorithm Algorithm used for generation the hash (see node.js crypto package). - --cache-idle-timeout Time in ms after which idle period the cache storing should happen (only for store: 'pack'). - --cache-idle-timeout-for-initial-store Time in ms after which idle period the initial cache storing should happen (only for store: 'pack'). + --cache-idle-timeout Time in ms after which idle period the cache storing should happen. + --cache-idle-timeout-after-large-changes Time in ms after which idle period the cache storing should happen when larger changes has been detected (cumulative + build time > 2 x avg cache store time). + --cache-idle-timeout-for-initial-store Time in ms after which idle period the initial cache storing should happen. --cache-immutable-paths A path to a immutable directory (usually a package manager cache directory). - --cache-immutable-paths-reset Clear all items provided in configuration. List of paths that are managed by a package manager and contain a version or hash in its path so all files are immutable. + --cache-immutable-paths-reset Clear all items provided in 'cache.immutablePaths' configuration. List of paths that are managed by a package manager + and contain a version or hash in its path so all files are immutable. --cache-managed-paths A path to a managed directory (usually a node_modules directory). - --cache-managed-paths-reset Clear all items provided in configuration. List of paths that are managed by a package manager and can be trusted to not be modified otherwise. + --cache-managed-paths-reset Clear all items provided in 'cache.managedPaths' configuration. List of paths that are managed by a package manager + and can be trusted to not be modified otherwise. --cache-max-age Time for which unused cache entries stay in the filesystem cache at minimum (in milliseconds). - --cache-max-memory-generations Number of generations unused cache entries stay in memory cache at minimum (0 = no memory cache used, 1 = may be removed after unused for a single compilation, ..., Infinity: kept forever). Cache entries will be deserialized from disk when removed from memory cache. + --cache-max-memory-generations Number of generations unused cache entries stay in memory cache at minimum (0 = no memory cache used, 1 = may be + removed after unused for a single compilation, ..., Infinity: kept forever). Cache entries will be deserialized from + disk when removed from memory cache. --cache-name Name for the cache. Different names will lead to different coexisting caches. --cache-profile Track and log detailed timing information for individual cache items. --no-cache-profile Negative 'cache-profile' option. --cache-store When to store data to the filesystem. (pack: Store data when compiler is idle in a single file). - --cache-version Version of the cache data. Different versions won't allow to reuse the cache and override existing content. Update the version when config changed in a way which doesn't allow to reuse cache. This will invalidate the cache. - --context The base directory (absolute path!) for resolving the `entry` option. If `output.pathinfo` is set, the included pathinfo is shortened to this directory. + --cache-version Version of the cache data. Different versions won't allow to reuse the cache and override existing content. Update the + version when config changed in a way which doesn't allow to reuse cache. This will invalidate the cache. + --context The base directory (absolute path!) for resolving the `entry` option. If `output.pathinfo` is set, the included + pathinfo is shortened to this directory. --dependencies References to another configuration to depend on. - --dependencies-reset Clear all items provided in configuration. References to other configurations to depend on. + --dependencies-reset Clear all items provided in 'dependencies' configuration. References to other configurations to depend on. -d, --devtool Determine source maps to use. --no-devtool Do not generate source maps. --entry The entry point(s) of your application e.g. ./src/main.js. - --entry-reset Clear all items provided in configuration. All modules are loaded upon startup. The last one is exported. + --entry-reset Clear all items provided in 'entry' configuration. All modules are loaded upon startup. The last one is exported. --experiments-asset Allow module type 'asset' to generate assets. --no-experiments-asset Negative 'experiments-asset' option. --experiments-async-web-assembly Support WebAssembly as asynchronous EcmaScript Module. @@ -63,69 +73,89 @@ Options: --no-experiments-lazy-compilation-entries Negative 'experiments-lazy-compilation-entries' option. --experiments-lazy-compilation-imports Enable/disable lazy compilation for import() modules. --no-experiments-lazy-compilation-imports Negative 'experiments-lazy-compilation-imports' option. - --experiments-lazy-compilation-test Specify which entrypoints or import()ed modules should be lazily compiled. This is matched with the imported module and not the entrypoint name. + --experiments-lazy-compilation-test Specify which entrypoints or import()ed modules should be lazily compiled. This is matched with the imported module + and not the entrypoint name. --experiments-output-module Allow output javascript files as module source type. --no-experiments-output-module Negative 'experiments-output-module' option. --experiments-sync-web-assembly Support WebAssembly as synchronous EcmaScript Module (outdated). --no-experiments-sync-web-assembly Negative 'experiments-sync-web-assembly' option. --experiments-top-level-await Allow using top-level-await in EcmaScript Modules. --no-experiments-top-level-await Negative 'experiments-top-level-await' option. - --externals Every matched dependency becomes external. An exact matched dependency becomes external. The same string is used as external dependency. - --externals-reset Clear all items provided in configuration. Specify dependencies that shouldn't be resolved by webpack, but should become dependencies of the resulting bundle. The kind of the dependency depends on `output.libraryTarget`. - --externals-presets-electron Treat common electron built-in modules in main and preload context like 'electron', 'ipc' or 'shell' as external and load them via require() when used. + --externals Every matched dependency becomes external. An exact matched dependency becomes external. The same string is used as + external dependency. + --externals-reset Clear all items provided in 'externals' configuration. Specify dependencies that shouldn't be resolved by webpack, but + should become dependencies of the resulting bundle. The kind of the dependency depends on `output.libraryTarget`. + --externals-presets-electron Treat common electron built-in modules in main and preload context like 'electron', 'ipc' or 'shell' as external and + load them via require() when used. --no-externals-presets-electron Negative 'externals-presets-electron' option. - --externals-presets-electron-main Treat electron built-in modules in the main context like 'app', 'ipc-main' or 'shell' as external and load them via require() when used. + --externals-presets-electron-main Treat electron built-in modules in the main context like 'app', 'ipc-main' or 'shell' as external and load them via + require() when used. --no-externals-presets-electron-main Negative 'externals-presets-electron-main' option. - --externals-presets-electron-preload Treat electron built-in modules in the preload context like 'web-frame', 'ipc-renderer' or 'shell' as external and load them via require() when used. + --externals-presets-electron-preload Treat electron built-in modules in the preload context like 'web-frame', 'ipc-renderer' or 'shell' as external and + load them via require() when used. --no-externals-presets-electron-preload Negative 'externals-presets-electron-preload' option. - --externals-presets-electron-renderer Treat electron built-in modules in the renderer context like 'web-frame', 'ipc-renderer' or 'shell' as external and load them via require() when used. + --externals-presets-electron-renderer Treat electron built-in modules in the renderer context like 'web-frame', 'ipc-renderer' or 'shell' as external and + load them via require() when used. --no-externals-presets-electron-renderer Negative 'externals-presets-electron-renderer' option. --externals-presets-node Treat node.js built-in modules like fs, path or vm as external and load them via require() when used. --no-externals-presets-node Negative 'externals-presets-node' option. --externals-presets-nwjs Treat NW.js legacy nw.gui module as external and load it via require() when used. --no-externals-presets-nwjs Negative 'externals-presets-nwjs' option. - --externals-presets-web Treat references to 'http(s)://...' and 'std:...' as external and load them via import when used (Note that this changes execution order as externals are executed before any other code in the chunk). + --externals-presets-web Treat references to 'http(s)://...' and 'std:...' as external and load them via import when used (Note that this + changes execution order as externals are executed before any other code in the chunk). --no-externals-presets-web Negative 'externals-presets-web' option. - --externals-presets-web-async Treat references to 'http(s)://...' and 'std:...' as external and load them via async import() when used (Note that this external type is an async module, which has various effects on the execution). + --externals-presets-web-async Treat references to 'http(s)://...' and 'std:...' as external and load them via async import() when used (Note that + this external type is an async module, which has various effects on the execution). --no-externals-presets-web-async Negative 'externals-presets-web-async' option. - --externals-type Specifies the default type of externals ('amd*', 'umd*', 'system' and 'jsonp' depend on output.libraryTarget set to the same value). + --externals-type Specifies the default type of externals ('amd*', 'umd*', 'system' and 'jsonp' depend on output.libraryTarget set to + the same value). --ignore-warnings A RegExp to select the warning message. --ignore-warnings-file A RegExp to select the origin file for the warning. --ignore-warnings-message A RegExp to select the warning message. --ignore-warnings-module A RegExp to select the origin module for the warning. - --ignore-warnings-reset Clear all items provided in configuration. Ignore specific warnings. - --infrastructure-logging-append-only Only appends lines to the output. Avoids updating existing output e. g. for status messages. This option is only used when no custom console is provided. + --ignore-warnings-reset Clear all items provided in 'ignoreWarnings' configuration. Ignore specific warnings. + --infrastructure-logging-append-only Only appends lines to the output. Avoids updating existing output e. g. for status messages. This option is only used + when no custom console is provided. --no-infrastructure-logging-append-only Negative 'infrastructure-logging-append-only' option. --infrastructure-logging-colors Enables/Disables colorful output. This option is only used when no custom console is provided. --no-infrastructure-logging-colors Negative 'infrastructure-logging-colors' option. --infrastructure-logging-debug [value...] Enable/Disable debug logging for all loggers. Enable debug logging for specific loggers. --no-infrastructure-logging-debug Negative 'infrastructure-logging-debug' option. - --infrastructure-logging-debug-reset Clear all items provided in configuration. Enable debug logging for specific loggers. + --infrastructure-logging-debug-reset Clear all items provided in 'infrastructureLogging.debug' configuration. Enable debug logging for specific loggers. --infrastructure-logging-level Log level. --mode Defines the mode to pass to webpack. --module-expr-context-critical Enable warnings for full dynamic dependencies. --no-module-expr-context-critical Negative 'module-expr-context-critical' option. - --module-expr-context-recursive Enable recursive directory lookup for full dynamic dependencies. Deprecated: This option has moved to 'module.parser.javascript.exprContextRecursive'. + --module-expr-context-recursive Enable recursive directory lookup for full dynamic dependencies. Deprecated: This option has moved to + 'module.parser.javascript.exprContextRecursive'. --no-module-expr-context-recursive Negative 'module-expr-context-recursive' option. - --module-expr-context-reg-exp [value] Sets the default regular expression for full dynamic dependencies. Deprecated: This option has moved to 'module.parser.javascript.exprContextRegExp'. + --module-expr-context-reg-exp [value] Sets the default regular expression for full dynamic dependencies. Deprecated: This option has moved to + 'module.parser.javascript.exprContextRegExp'. --no-module-expr-context-reg-exp Negative 'module-expr-context-reg-exp' option. - --module-expr-context-request Set the default request for full dynamic dependencies. Deprecated: This option has moved to 'module.parser.javascript.exprContextRequest'. + --module-expr-context-request Set the default request for full dynamic dependencies. Deprecated: This option has moved to + 'module.parser.javascript.exprContextRequest'. --module-generator-asset-data-url-encoding Asset encoding (defaults to base64). --no-module-generator-asset-data-url-encoding Negative 'module-generator-asset-data-url-encoding' option. --module-generator-asset-data-url-mimetype Asset mimetype (getting from file extension by default). --module-generator-asset-emit Emit an output asset from this asset module. This can be set to 'false' to omit emitting e. g. for SSR. --no-module-generator-asset-emit Negative 'module-generator-asset-emit' option. - --module-generator-asset-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to determine the location on disk. + --module-generator-asset-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path + may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to + determine the location on disk. --module-generator-asset-public-path The 'publicPath' specifies the public URL address of the output files when referenced in a browser. --module-generator-asset-inline-data-url-encoding Asset encoding (defaults to base64). --no-module-generator-asset-inline-data-url-encoding Negative 'module-generator-asset-inline-data-url-encoding' option. --module-generator-asset-inline-data-url-mimetype Asset mimetype (getting from file extension by default). --module-generator-asset-resource-emit Emit an output asset from this asset module. This can be set to 'false' to omit emitting e. g. for SSR. --no-module-generator-asset-resource-emit Negative 'module-generator-asset-resource-emit' option. - --module-generator-asset-resource-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to determine the location on disk. + --module-generator-asset-resource-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path + may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to + determine the location on disk. --module-generator-asset-resource-public-path The 'publicPath' specifies the public URL address of the output files when referenced in a browser. - --module-no-parse A regular expression, when matched the module is not parsed. An absolute path, when the module starts with this path it is not parsed. - --module-no-parse-reset Clear all items provided in configuration. Don't parse files matching. It's matched against the full resolved request. + --module-no-parse A regular expression, when matched the module is not parsed. An absolute path, when the module starts with this path + it is not parsed. + --module-no-parse-reset Clear all items provided in 'module.noParse' configuration. Don't parse files matching. It's matched against the full + resolved request. --module-parser-asset-data-url-condition-max-size Maximum size of asset that should be inline as modules. Default: 8kb. --no-module-parser-javascript-amd Negative 'module-parser-javascript-amd' option. --module-parser-javascript-browserify Enable/disable special handling for browserify bundles. @@ -158,7 +188,8 @@ Options: --no-module-parser-javascript-require-ensure Negative 'module-parser-javascript-require-ensure' option. --module-parser-javascript-require-include Enable/disable parsing of require.include syntax. --no-module-parser-javascript-require-include Negative 'module-parser-javascript-require-include' option. - --module-parser-javascript-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and requirejs.onError. + --module-parser-javascript-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and + requirejs.onError. --no-module-parser-javascript-require-js Negative 'module-parser-javascript-require-js' option. --module-parser-javascript-strict-export-presence Emit errors instead of warnings when imported names don't exist in imported module. --no-module-parser-javascript-strict-export-presence Negative 'module-parser-javascript-strict-export-presence' option. @@ -175,9 +206,12 @@ Options: --module-parser-javascript-unknown-context-request Sets the request when using the require function in a not statically analyse-able way. --module-parser-javascript-url [value] Enable/disable parsing of new URL() syntax. --no-module-parser-javascript-url Negative 'module-parser-javascript-url' option. - --module-parser-javascript-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles + 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or + configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --no-module-parser-javascript-worker Negative 'module-parser-javascript-worker' option. - --module-parser-javascript-worker-reset Clear all items provided in configuration. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-worker-reset Clear all items provided in 'module.parser.javascript.worker' configuration. Disable or configure parsing of WebWorker + syntax like new Worker() or navigator.serviceWorker.register(). --module-parser-javascript-wrapped-context-critical Enable warnings for partial dynamic dependencies. --no-module-parser-javascript-wrapped-context-critical Negative 'module-parser-javascript-wrapped-context-critical' option. --module-parser-javascript-wrapped-context-recursive Enable recursive directory lookup for partial dynamic dependencies. @@ -214,7 +248,8 @@ Options: --no-module-parser-javascript-auto-require-ensure Negative 'module-parser-javascript-auto-require-ensure' option. --module-parser-javascript-auto-require-include Enable/disable parsing of require.include syntax. --no-module-parser-javascript-auto-require-include Negative 'module-parser-javascript-auto-require-include' option. - --module-parser-javascript-auto-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and requirejs.onError. + --module-parser-javascript-auto-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and + requirejs.onError. --no-module-parser-javascript-auto-require-js Negative 'module-parser-javascript-auto-require-js' option. --module-parser-javascript-auto-strict-export-presence Emit errors instead of warnings when imported names don't exist in imported module. --no-module-parser-javascript-auto-strict-export-presence Negative 'module-parser-javascript-auto-strict-export-presence' option. @@ -231,9 +266,12 @@ Options: --module-parser-javascript-auto-unknown-context-request Sets the request when using the require function in a not statically analyse-able way. --module-parser-javascript-auto-url [value] Enable/disable parsing of new URL() syntax. --no-module-parser-javascript-auto-url Negative 'module-parser-javascript-auto-url' option. - --module-parser-javascript-auto-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-auto-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles + 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or + configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --no-module-parser-javascript-auto-worker Negative 'module-parser-javascript-auto-worker' option. - --module-parser-javascript-auto-worker-reset Clear all items provided in configuration. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-auto-worker-reset Clear all items provided in 'module.parser.javascript/auto.worker' configuration. Disable or configure parsing of + WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --module-parser-javascript-auto-wrapped-context-critical Enable warnings for partial dynamic dependencies. --no-module-parser-javascript-auto-wrapped-context-critical Negative 'module-parser-javascript-auto-wrapped-context-critical' option. --module-parser-javascript-auto-wrapped-context-recursive Enable recursive directory lookup for partial dynamic dependencies. @@ -270,7 +308,8 @@ Options: --no-module-parser-javascript-dynamic-require-ensure Negative 'module-parser-javascript-dynamic-require-ensure' option. --module-parser-javascript-dynamic-require-include Enable/disable parsing of require.include syntax. --no-module-parser-javascript-dynamic-require-include Negative 'module-parser-javascript-dynamic-require-include' option. - --module-parser-javascript-dynamic-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and requirejs.onError. + --module-parser-javascript-dynamic-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and + requirejs.onError. --no-module-parser-javascript-dynamic-require-js Negative 'module-parser-javascript-dynamic-require-js' option. --module-parser-javascript-dynamic-strict-export-presence Emit errors instead of warnings when imported names don't exist in imported module. --no-module-parser-javascript-dynamic-strict-export-presence Negative 'module-parser-javascript-dynamic-strict-export-presence' option. @@ -287,9 +326,12 @@ Options: --module-parser-javascript-dynamic-unknown-context-request Sets the request when using the require function in a not statically analyse-able way. --module-parser-javascript-dynamic-url [value] Enable/disable parsing of new URL() syntax. --no-module-parser-javascript-dynamic-url Negative 'module-parser-javascript-dynamic-url' option. - --module-parser-javascript-dynamic-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-dynamic-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles + 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or + configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --no-module-parser-javascript-dynamic-worker Negative 'module-parser-javascript-dynamic-worker' option. - --module-parser-javascript-dynamic-worker-reset Clear all items provided in configuration. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-dynamic-worker-reset Clear all items provided in 'module.parser.javascript/dynamic.worker' configuration. Disable or configure parsing of + WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --module-parser-javascript-dynamic-wrapped-context-critical Enable warnings for partial dynamic dependencies. --no-module-parser-javascript-dynamic-wrapped-context-critical Negative 'module-parser-javascript-dynamic-wrapped-context-critical' option. --module-parser-javascript-dynamic-wrapped-context-recursive Enable recursive directory lookup for partial dynamic dependencies. @@ -326,7 +368,8 @@ Options: --no-module-parser-javascript-esm-require-ensure Negative 'module-parser-javascript-esm-require-ensure' option. --module-parser-javascript-esm-require-include Enable/disable parsing of require.include syntax. --no-module-parser-javascript-esm-require-include Negative 'module-parser-javascript-esm-require-include' option. - --module-parser-javascript-esm-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and requirejs.onError. + --module-parser-javascript-esm-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and + requirejs.onError. --no-module-parser-javascript-esm-require-js Negative 'module-parser-javascript-esm-require-js' option. --module-parser-javascript-esm-strict-export-presence Emit errors instead of warnings when imported names don't exist in imported module. --no-module-parser-javascript-esm-strict-export-presence Negative 'module-parser-javascript-esm-strict-export-presence' option. @@ -343,9 +386,12 @@ Options: --module-parser-javascript-esm-unknown-context-request Sets the request when using the require function in a not statically analyse-able way. --module-parser-javascript-esm-url [value] Enable/disable parsing of new URL() syntax. --no-module-parser-javascript-esm-url Negative 'module-parser-javascript-esm-url' option. - --module-parser-javascript-esm-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-esm-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles + 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or + configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --no-module-parser-javascript-esm-worker Negative 'module-parser-javascript-esm-worker' option. - --module-parser-javascript-esm-worker-reset Clear all items provided in configuration. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-esm-worker-reset Clear all items provided in 'module.parser.javascript/esm.worker' configuration. Disable or configure parsing of + WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --module-parser-javascript-esm-wrapped-context-critical Enable warnings for partial dynamic dependencies. --no-module-parser-javascript-esm-wrapped-context-critical Negative 'module-parser-javascript-esm-wrapped-context-critical' option. --module-parser-javascript-esm-wrapped-context-recursive Enable recursive directory lookup for partial dynamic dependencies. @@ -387,25 +433,34 @@ Options: --module-rules-use-loader A loader request. --module-rules-use-options Options passed to a loader. --module-rules-use A loader request. - --module-rules-reset Clear all items provided in configuration. A list of rules. - --module-strict-export-presence Emit errors instead of warnings when imported names don't exist in imported module. Deprecated: This option has moved to 'module.parser.javascript.strictExportPresence'. + --module-rules-reset Clear all items provided in 'module.rules' configuration. A list of rules. + --module-strict-export-presence Emit errors instead of warnings when imported names don't exist in imported module. Deprecated: This option has moved + to 'module.parser.javascript.strictExportPresence'. --no-module-strict-export-presence Negative 'module-strict-export-presence' option. - --module-strict-this-context-on-imports Handle the this context correctly according to the spec for namespace objects. Deprecated: This option has moved to 'module.parser.javascript.strictThisContextOnImports'. + --module-strict-this-context-on-imports Handle the this context correctly according to the spec for namespace objects. Deprecated: This option has moved to + 'module.parser.javascript.strictThisContextOnImports'. --no-module-strict-this-context-on-imports Negative 'module-strict-this-context-on-imports' option. - --module-unknown-context-critical Enable warnings when using the require function in a not statically analyse-able way. Deprecated: This option has moved to 'module.parser.javascript.unknownContextCritical'. + --module-unknown-context-critical Enable warnings when using the require function in a not statically analyse-able way. Deprecated: This option has + moved to 'module.parser.javascript.unknownContextCritical'. --no-module-unknown-context-critical Negative 'module-unknown-context-critical' option. - --module-unknown-context-recursive Enable recursive directory lookup when using the require function in a not statically analyse-able way. Deprecated: This option has moved to 'module.parser.javascript.unknownContextRecursive'. + --module-unknown-context-recursive Enable recursive directory lookup when using the require function in a not statically analyse-able way. Deprecated: + This option has moved to 'module.parser.javascript.unknownContextRecursive'. --no-module-unknown-context-recursive Negative 'module-unknown-context-recursive' option. - --module-unknown-context-reg-exp [value] Sets the regular expression when using the require function in a not statically analyse-able way. Deprecated: This option has moved to 'module.parser.javascript.unknownContextRegExp'. + --module-unknown-context-reg-exp [value] Sets the regular expression when using the require function in a not statically analyse-able way. Deprecated: This + option has moved to 'module.parser.javascript.unknownContextRegExp'. --no-module-unknown-context-reg-exp Negative 'module-unknown-context-reg-exp' option. - --module-unknown-context-request Sets the request when using the require function in a not statically analyse-able way. Deprecated: This option has moved to 'module.parser.javascript.unknownContextRequest'. + --module-unknown-context-request Sets the request when using the require function in a not statically analyse-able way. Deprecated: This option has + moved to 'module.parser.javascript.unknownContextRequest'. --module-unsafe-cache Cache the resolving of module requests. --no-module-unsafe-cache Negative 'module-unsafe-cache' option. - --module-wrapped-context-critical Enable warnings for partial dynamic dependencies. Deprecated: This option has moved to 'module.parser.javascript.wrappedContextCritical'. + --module-wrapped-context-critical Enable warnings for partial dynamic dependencies. Deprecated: This option has moved to + 'module.parser.javascript.wrappedContextCritical'. --no-module-wrapped-context-critical Negative 'module-wrapped-context-critical' option. - --module-wrapped-context-recursive Enable recursive directory lookup for partial dynamic dependencies. Deprecated: This option has moved to 'module.parser.javascript.wrappedContextRecursive'. + --module-wrapped-context-recursive Enable recursive directory lookup for partial dynamic dependencies. Deprecated: This option has moved to + 'module.parser.javascript.wrappedContextRecursive'. --no-module-wrapped-context-recursive Negative 'module-wrapped-context-recursive' option. - --module-wrapped-context-reg-exp Set the inner regular expression for partial dynamic dependencies. Deprecated: This option has moved to 'module.parser.javascript.wrappedContextRegExp'. + --module-wrapped-context-reg-exp Set the inner regular expression for partial dynamic dependencies. Deprecated: This option has moved to + 'module.parser.javascript.wrappedContextRegExp'. --name Name of the configuration. Used when loading multiple configurations. --no-node Negative 'node' option. --node-dirname [value] Include a polyfill for the '__dirname' variable. @@ -416,17 +471,24 @@ Options: --no-node-global Negative 'node-global' option. --optimization-check-wasm-types Check for incompatible wasm types when importing/exporting from/to ESM. --no-optimization-check-wasm-types Negative 'optimization-check-wasm-types' option. - --optimization-chunk-ids Define the algorithm to choose chunk ids (named: readable ids for better debugging, deterministic: numeric hash ids for better long term caching, size: numeric ids focused on minimal initial download size, total-size: numeric ids focused on minimal total download size, false: no algorithm used, as custom one can be provided via plugin). + --optimization-chunk-ids Define the algorithm to choose chunk ids (named: readable ids for better debugging, deterministic: numeric hash ids + for better long term caching, size: numeric ids focused on minimal initial download size, total-size: numeric ids + focused on minimal total download size, false: no algorithm used, as custom one can be provided via plugin). --no-optimization-chunk-ids Negative 'optimization-chunk-ids' option. - --optimization-concatenate-modules Concatenate modules when possible to generate less modules, more efficient code and enable more optimizations by the minimizer. + --optimization-concatenate-modules Concatenate modules when possible to generate less modules, more efficient code and enable more optimizations by the + minimizer. --no-optimization-concatenate-modules Negative 'optimization-concatenate-modules' option. - --optimization-emit-on-errors Emit assets even when errors occur. Critical errors are emitted into the generated code and will cause errors at runtime. + --optimization-emit-on-errors Emit assets even when errors occur. Critical errors are emitted into the generated code and will cause errors at + runtime. --no-optimization-emit-on-errors Negative 'optimization-emit-on-errors' option. --optimization-flag-included-chunks Also flag chunks as loaded which contain a subset of the modules. --no-optimization-flag-included-chunks Negative 'optimization-flag-included-chunks' option. - --optimization-inner-graph Creates a module-internal dependency graph for top level symbols, exports and imports, to improve unused exports detection. + --optimization-inner-graph Creates a module-internal dependency graph for top level symbols, exports and imports, to improve unused exports + detection. --no-optimization-inner-graph Negative 'optimization-inner-graph' option. - --optimization-mangle-exports [value] Rename exports when possible to generate shorter code (depends on optimization.usedExports and optimization.providedExports, true/"deterministic": generate short deterministic names optimized for caching, "size": generate the shortest possible names). + --optimization-mangle-exports [value] Rename exports when possible to generate shorter code (depends on optimization.usedExports and + optimization.providedExports, true/"deterministic": generate short deterministic names optimized for caching, "size": + generate the shortest possible names). --no-optimization-mangle-exports Negative 'optimization-mangle-exports' option. --optimization-mangle-wasm-imports Reduce size of WASM by changing imports to shorter strings. --no-optimization-mangle-wasm-imports Negative 'optimization-mangle-wasm-imports' option. @@ -434,7 +496,10 @@ Options: --no-optimization-merge-duplicate-chunks Negative 'optimization-merge-duplicate-chunks' option. --optimization-minimize Enable minimizing the output. Uses optimization.minimizer. --no-optimization-minimize Negative 'optimization-minimize' option. - --optimization-module-ids Define the algorithm to choose module ids (natural: numeric ids in order of usage, named: readable ids for better debugging, hashed: (deprecated) short hashes as ids for better long term caching, deterministic: numeric hash ids for better long term caching, size: numeric ids focused on minimal initial download size, false: no algorithm used, as custom one can be provided via plugin). + --optimization-module-ids Define the algorithm to choose module ids (natural: numeric ids in order of usage, named: readable ids for better + debugging, hashed: (deprecated) short hashes as ids for better long term caching, deterministic: numeric hash ids for + better long term caching, size: numeric ids focused on minimal initial download size, false: no algorithm used, as + custom one can be provided via plugin). --no-optimization-module-ids Negative 'optimization-module-ids' option. --optimization-node-env Set process.env.NODE_ENV to a specific value. --no-optimization-node-env Negative 'optimization-node-env' option. @@ -451,13 +516,16 @@ Options: --optimization-runtime-chunk [value] Create an additional chunk which contains only the webpack runtime and chunk hash maps. --no-optimization-runtime-chunk Negative 'optimization-runtime-chunk' option. --optimization-runtime-chunk-name The name or name factory for the runtime chunks. - --optimization-side-effects [value] Skip over modules which contain no side effects when exports are not used (false: disabled, 'flag': only use manually placed side effects flag, true: also analyse source code for side effects). + --optimization-side-effects [value] Skip over modules which contain no side effects when exports are not used (false: disabled, 'flag': only use manually + placed side effects flag, true: also analyse source code for side effects). --no-optimization-side-effects Negative 'optimization-side-effects' option. --no-optimization-split-chunks Negative 'optimization-split-chunks' option. --optimization-split-chunks-automatic-name-delimiter Sets the name delimiter for created chunks. - --optimization-split-chunks-chunks Select chunks for determining shared modules (defaults to "async", "initial" and "all" requires adding these chunks to the HTML). + --optimization-split-chunks-chunks Select chunks for determining shared modules (defaults to "async", "initial" and "all" requires adding these chunks to + the HTML). --optimization-split-chunks-default-size-types Size type, like 'javascript', 'webassembly'. - --optimization-split-chunks-default-size-types-reset Clear all items provided in configuration. Sets the size types which are used when a number is used for sizes. + --optimization-split-chunks-default-size-types-reset Clear all items provided in 'optimization.splitChunks.defaultSizeTypes' configuration. Sets the size types which are + used when a number is used for sizes. --optimization-split-chunks-enforce-size-threshold Size of the javascript part of the chunk. --optimization-split-chunks-fallback-cache-group-automatic-name-delimiter Sets the name delimiter for created chunks. --optimization-split-chunks-fallback-cache-group-max-async-size Size of the javascript part of the chunk. @@ -479,16 +547,21 @@ Options: --no-optimization-split-chunks-name Negative 'optimization-split-chunks-name' option. --optimization-split-chunks-used-exports Compare used exports when checking common modules. Modules will only be put in the same chunk when exports are equal. --no-optimization-split-chunks-used-exports Negative 'optimization-split-chunks-used-exports' option. - --optimization-used-exports [value] Figure out which exports are used by modules to mangle export names, omit unused exports and generate more efficient code (true: analyse used exports for each runtime, "global": analyse exports globally for all runtimes combined). + --optimization-used-exports [value] Figure out which exports are used by modules to mangle export names, omit unused exports and generate more efficient + code (true: analyse used exports for each runtime, "global": analyse exports globally for all runtimes combined). --no-optimization-used-exports Negative 'optimization-used-exports' option. --output-asset-module-filename The filename of asset modules as relative path inside the 'output.path' directory. --output-charset Add charset attribute for script tag. --no-output-charset Negative 'output-charset' option. - --output-chunk-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to determine the location on disk. - --output-chunk-format The format of chunks (formats included by default are 'array-push' (web/WebWorker), 'commonjs' (node.js), but others might be added by plugins). + --output-chunk-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path + may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to + determine the location on disk. + --output-chunk-format The format of chunks (formats included by default are 'array-push' (web/WebWorker), 'commonjs' (node.js), but others + might be added by plugins). --no-output-chunk-format Negative 'output-chunk-format' option. --output-chunk-load-timeout Number of milliseconds before chunk request expires. - --output-chunk-loading The method of loading chunks (methods included by default are 'jsonp' (web), 'importScripts' (WebWorker), 'require' (sync node.js), 'async-node' (async node.js), but others might be added by plugins). + --output-chunk-loading The method of loading chunks (methods included by default are 'jsonp' (web), 'importScripts' (WebWorker), 'require' + (sync node.js), 'async-node' (async node.js), but others might be added by plugins). --no-output-chunk-loading Negative 'output-chunk-loading' option. --output-chunk-loading-global The global variable used by webpack for loading of chunks. --output-clean Clean the output directory before emit. @@ -502,13 +575,22 @@ Options: --no-output-cross-origin-loading Negative 'output-cross-origin-loading' option. --output-devtool-fallback-module-filename-template Similar to `output.devtoolModuleFilenameTemplate`, but used in the case of duplicate module identifiers. --output-devtool-module-filename-template Filename template string of function for the sources array in a generated SourceMap. - --output-devtool-namespace Module namespace to use when interpolating filename template string for the sources array in a generated SourceMap. Defaults to `output.library` if not set. It's useful for avoiding runtime collisions in sourcemaps from multiple webpack projects built as libraries. - --output-enabled-chunk-loading-types The method of loading chunks (methods included by default are 'jsonp' (web), 'importScripts' (WebWorker), 'require' (sync node.js), 'async-node' (async node.js), but others might be added by plugins). - --output-enabled-chunk-loading-types-reset Clear all items provided in configuration. List of chunk loading types enabled for use by entry points. - --output-enabled-library-types Type of library (types included by default are 'var', 'module', 'assign', 'assign-properties', 'this', 'window', 'self', 'global', 'commonjs', 'commonjs2', 'commonjs-module', 'amd', 'amd-require', 'umd', 'umd2', 'jsonp', 'system', but others might be added by plugins). - --output-enabled-library-types-reset Clear all items provided in configuration. List of library types enabled for use by entry points. - --output-enabled-wasm-loading-types The method of loading WebAssembly Modules (methods included by default are 'fetch' (web/WebWorker), 'async-node' (node.js), but others might be added by plugins). - --output-enabled-wasm-loading-types-reset Clear all items provided in configuration. List of wasm loading types enabled for use by entry points. + --output-devtool-namespace Module namespace to use when interpolating filename template string for the sources array in a generated SourceMap. + Defaults to `output.library` if not set. It's useful for avoiding runtime collisions in sourcemaps from multiple + webpack projects built as libraries. + --output-enabled-chunk-loading-types The method of loading chunks (methods included by default are 'jsonp' (web), 'importScripts' (WebWorker), 'require' + (sync node.js), 'async-node' (async node.js), but others might be added by plugins). + --output-enabled-chunk-loading-types-reset Clear all items provided in 'output.enabledChunkLoadingTypes' configuration. List of chunk loading types enabled for + use by entry points. + --output-enabled-library-types Type of library (types included by default are 'var', 'module', 'assign', 'assign-properties', 'this', 'window', + 'self', 'global', 'commonjs', 'commonjs2', 'commonjs-module', 'amd', 'amd-require', 'umd', 'umd2', 'jsonp', 'system', + but others might be added by plugins). + --output-enabled-library-types-reset Clear all items provided in 'output.enabledLibraryTypes' configuration. List of library types enabled for use by entry + points. + --output-enabled-wasm-loading-types The method of loading WebAssembly Modules (methods included by default are 'fetch' (web/WebWorker), 'async-node' + (node.js), but others might be added by plugins). + --output-enabled-wasm-loading-types-reset Clear all items provided in 'output.enabledWasmLoadingTypes' configuration. List of wasm loading types enabled for use + by entry points. --output-environment-arrow-function The environment supports arrow functions ('() => { ... }'). --no-output-environment-arrow-function Negative 'output-environment-arrow-function' option. --output-environment-big-int-literal The environment supports BigInt as literal (123n). @@ -523,7 +605,9 @@ Options: --no-output-environment-for-of Negative 'output-environment-for-of' option. --output-environment-module The environment supports EcmaScript Module syntax to import EcmaScript modules (import ... from '...'). --no-output-environment-module Negative 'output-environment-module' option. - --output-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to determine the location on disk. + --output-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path + may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to + determine the location on disk. --output-global-object An expression which is used to address the global object/scope in runtime code. --output-hash-digest Digest type used for the hash. --output-hash-digest-length Number of chars which are used for the hash. @@ -537,25 +621,31 @@ Options: --output-import-function-name The name of the native import() function (can be exchanged for a polyfill). --output-import-meta-name The name of the native import.meta object (can be exchanged for a polyfill). --output-library A part of the library name. - --output-library-reset Clear all items provided in configuration. The name of the library (some types allow unnamed libraries too). + --output-library-reset Clear all items provided in 'output.library' configuration. The name of the library (some types allow unnamed + libraries too). --output-library-amd Name of the exposed AMD library in the UMD. --output-library-commonjs Name of the exposed commonjs export in the UMD. --output-library-root Part of the name of the property exposed globally by a UMD library. - --output-library-root-reset Clear all items provided in configuration. Name of the property exposed globally by a UMD library. + --output-library-root-reset Clear all items provided in 'output.library.root' configuration. Name of the property exposed globally by a UMD + library. --output-library-auxiliary-comment Append the same comment above each import style. --output-library-auxiliary-comment-amd Set comment for `amd` section in UMD. --output-library-auxiliary-comment-commonjs Set comment for `commonjs` (exports) section in UMD. --output-library-auxiliary-comment-commonjs2 Set comment for `commonjs2` (module.exports) section in UMD. --output-library-auxiliary-comment-root Set comment for `root` (global variable) section in UMD. --output-library-export Part of the export that should be exposed as library. - --output-library-export-reset Clear all items provided in configuration. Specify which export should be exposed as library. + --output-library-export-reset Clear all items provided in 'output.library.export' configuration. Specify which export should be exposed as library. --output-library-name A part of the library name. - --output-library-name-reset Clear all items provided in configuration. The name of the library (some types allow unnamed libraries too). + --output-library-name-reset Clear all items provided in 'output.library.name' configuration. The name of the library (some types allow unnamed + libraries too). --output-library-name-amd Name of the exposed AMD library in the UMD. --output-library-name-commonjs Name of the exposed commonjs export in the UMD. --output-library-name-root Part of the name of the property exposed globally by a UMD library. - --output-library-name-root-reset Clear all items provided in configuration. Name of the property exposed globally by a UMD library. - --output-library-type Type of library (types included by default are 'var', 'module', 'assign', 'assign-properties', 'this', 'window', 'self', 'global', 'commonjs', 'commonjs2', 'commonjs-module', 'amd', 'amd-require', 'umd', 'umd2', 'jsonp', 'system', but others might be added by plugins). + --output-library-name-root-reset Clear all items provided in 'output.library.name.root' configuration. Name of the property exposed globally by a UMD + library. + --output-library-type Type of library (types included by default are 'var', 'module', 'assign', 'assign-properties', 'this', 'window', + 'self', 'global', 'commonjs', 'commonjs2', 'commonjs-module', 'amd', 'amd-require', 'umd', 'umd2', 'jsonp', 'system', + but others might be added by plugins). --output-library-umd-named-define If `output.libraryTarget` is set to umd and `output.library` is set, setting this to true will name the AMD module. --no-output-library-umd-named-define Negative 'output-library-umd-named-define' option. --output-module Output javascript files as module source type. @@ -568,19 +658,25 @@ Options: --no-output-script-type Negative 'output-script-type' option. --output-source-map-filename The filename of the SourceMaps for the JavaScript files. They are inside the 'output.path' directory. --output-source-prefix Prefixes every line of the source in the bundle with this string. - --output-strict-module-error-handling Handles error in module loading correctly at a performance cost. This will handle module error compatible with the EcmaScript Modules spec. + --output-strict-module-error-handling Handles error in module loading correctly at a performance cost. This will handle module error compatible with the + EcmaScript Modules spec. --no-output-strict-module-error-handling Negative 'output-strict-module-error-handling' option. - --output-strict-module-exception-handling Handles exceptions in module loading correctly at a performance cost (Deprecated). This will handle module error compatible with the Node.js CommonJS way. + --output-strict-module-exception-handling Handles exceptions in module loading correctly at a performance cost (Deprecated). This will handle module error + compatible with the Node.js CommonJS way. --no-output-strict-module-exception-handling Negative 'output-strict-module-exception-handling' option. - --output-trusted-types [value] Use a Trusted Types policy to create urls for chunks. 'output.uniqueName' is used a default policy name. Passing a string sets a custom policy name. The name of the Trusted Types policy created by webpack to serve bundle chunks. + --output-trusted-types [value] Use a Trusted Types policy to create urls for chunks. 'output.uniqueName' is used a default policy name. Passing a + string sets a custom policy name. The name of the Trusted Types policy created by webpack to serve bundle chunks. --output-trusted-types-policy-name The name of the Trusted Types policy created by webpack to serve bundle chunks. --output-unique-name A unique name of the webpack build to avoid multiple webpack runtimes to conflict when using globals. - --output-wasm-loading The method of loading WebAssembly Modules (methods included by default are 'fetch' (web/WebWorker), 'async-node' (node.js), but others might be added by plugins). + --output-wasm-loading The method of loading WebAssembly Modules (methods included by default are 'fetch' (web/WebWorker), 'async-node' + (node.js), but others might be added by plugins). --no-output-wasm-loading Negative 'output-wasm-loading' option. --output-webassembly-module-filename The filename of WebAssembly modules as relative path inside the 'output.path' directory. - --output-worker-chunk-loading The method of loading chunks (methods included by default are 'jsonp' (web), 'importScripts' (WebWorker), 'require' (sync node.js), 'async-node' (async node.js), but others might be added by plugins). + --output-worker-chunk-loading The method of loading chunks (methods included by default are 'jsonp' (web), 'importScripts' (WebWorker), 'require' + (sync node.js), 'async-node' (async node.js), but others might be added by plugins). --no-output-worker-chunk-loading Negative 'output-worker-chunk-loading' option. - --output-worker-wasm-loading The method of loading WebAssembly Modules (methods included by default are 'fetch' (web/WebWorker), 'async-node' (node.js), but others might be added by plugins). + --output-worker-wasm-loading The method of loading WebAssembly Modules (methods included by default are 'fetch' (web/WebWorker), 'async-node' + (node.js), but others might be added by plugins). --no-output-worker-wasm-loading Negative 'output-worker-wasm-loading' option. --parallelism The number of parallel processed modules in the compilation. --no-performance Negative 'performance' option. @@ -594,54 +690,70 @@ Options: --no-records-input-path Negative 'records-input-path' option. --records-output-path Load compiler state from a json file. --no-records-output-path Negative 'records-output-path' option. - --records-path Store/Load compiler state from/to a json file. This will result in persistent ids of modules and chunks. An absolute path is expected. `recordsPath` is used for `recordsInputPath` and `recordsOutputPath` if they left undefined. + --records-path Store/Load compiler state from/to a json file. This will result in persistent ids of modules and chunks. An absolute + path is expected. `recordsPath` is used for `recordsInputPath` and `recordsOutputPath` if they left undefined. --no-records-path Negative 'records-path' option. --resolve-alias-alias Ignore request (replace with empty module). New request. --no-resolve-alias-alias Negative 'resolve-alias-alias' option. --resolve-alias-name Request to be redirected. --resolve-alias-only-module Redirect only exact matching request. --no-resolve-alias-only-module Negative 'resolve-alias-only-module' option. - --resolve-alias-reset Clear all items provided in configuration. Redirect module requests. + --resolve-alias-reset Clear all items provided in 'resolve.alias' configuration. Redirect module requests. --resolve-alias-fields Field in the description file (usually package.json) which are used to redirect requests inside the module. - --resolve-alias-fields-reset Clear all items provided in configuration. Fields in the description file (usually package.json) which are used to redirect requests inside the module. + --resolve-alias-fields-reset Clear all items provided in 'resolve.aliasFields' configuration. Fields in the description file (usually package.json) + which are used to redirect requests inside the module. --resolve-cache Enable caching of successfully resolved requests (cache entries are revalidated). --no-resolve-cache Negative 'resolve-cache' option. --resolve-cache-with-context Include the context information in the cache identifier when caching. --no-resolve-cache-with-context Negative 'resolve-cache-with-context' option. --resolve-condition-names Condition names for exports field entry point. - --resolve-condition-names-reset Clear all items provided in configuration. Condition names for exports field entry point. + --resolve-condition-names-reset Clear all items provided in 'resolve.conditionNames' configuration. Condition names for exports field entry point. --resolve-description-files Filename used to find a description file (like a package.json). - --resolve-description-files-reset Clear all items provided in configuration. Filenames used to find a description file (like a package.json). - --resolve-enforce-extension Enforce the resolver to use one of the extensions from the extensions option (User must specify requests without extension). + --resolve-description-files-reset Clear all items provided in 'resolve.descriptionFiles' configuration. Filenames used to find a description file (like + a package.json). + --resolve-enforce-extension Enforce the resolver to use one of the extensions from the extensions option (User must specify requests without + extension). --no-resolve-enforce-extension Negative 'resolve-enforce-extension' option. --resolve-exports-fields Field name from the description file (usually package.json) which is used to provide entry points of a package. - --resolve-exports-fields-reset Clear all items provided in configuration. Field names from the description file (usually package.json) which are used to provide entry points of a package. + --resolve-exports-fields-reset Clear all items provided in 'resolve.exportsFields' configuration. Field names from the description file (usually + package.json) which are used to provide entry points of a package. --resolve-extensions Extension added to the request when trying to find the file. - --resolve-extensions-reset Clear all items provided in configuration. Extensions added to the request when trying to find the file. + --resolve-extensions-reset Clear all items provided in 'resolve.extensions' configuration. Extensions added to the request when trying to find + the file. --resolve-fallback-alias Ignore request (replace with empty module). New request. --no-resolve-fallback-alias Negative 'resolve-fallback-alias' option. --resolve-fallback-name Request to be redirected. --resolve-fallback-only-module Redirect only exact matching request. --no-resolve-fallback-only-module Negative 'resolve-fallback-only-module' option. - --resolve-fallback-reset Clear all items provided in configuration. Redirect module requests. - --resolve-fully-specified Treats the request specified by the user as fully specified, meaning no extensions are added and the mainFiles in directories are not resolved (This doesn't affect requests from mainFields, aliasFields or aliases). + --resolve-fallback-reset Clear all items provided in 'resolve.fallback' configuration. Redirect module requests. + --resolve-fully-specified Treats the request specified by the user as fully specified, meaning no extensions are added and the mainFiles in + directories are not resolved (This doesn't affect requests from mainFields, aliasFields or aliases). --no-resolve-fully-specified Negative 'resolve-fully-specified' option. - --resolve-imports-fields Field name from the description file (usually package.json) which is used to provide internal request of a package (requests starting with # are considered as internal). - --resolve-imports-fields-reset Clear all items provided in configuration. Field names from the description file (usually package.json) which are used to provide internal request of a package (requests starting with # are considered as internal). + --resolve-imports-fields Field name from the description file (usually package.json) which is used to provide internal request of a package + (requests starting with # are considered as internal). + --resolve-imports-fields-reset Clear all items provided in 'resolve.importsFields' configuration. Field names from the description file (usually + package.json) which are used to provide internal request of a package (requests starting with # are considered as + internal). --resolve-main-fields Field name from the description file (package.json) which are used to find the default entry point. - --resolve-main-fields-reset Clear all items provided in configuration. Field names from the description file (package.json) which are used to find the default entry point. + --resolve-main-fields-reset Clear all items provided in 'resolve.mainFields' configuration. Field names from the description file (package.json) + which are used to find the default entry point. --resolve-main-files Filename used to find the default entry point if there is no description file or main field. - --resolve-main-files-reset Clear all items provided in configuration. Filenames used to find the default entry point if there is no description file or main field. + --resolve-main-files-reset Clear all items provided in 'resolve.mainFiles' configuration. Filenames used to find the default entry point if there + is no description file or main field. --resolve-modules Folder name or directory path where to find modules. - --resolve-modules-reset Clear all items provided in configuration. Folder names or directory paths where to find modules. - --resolve-prefer-absolute Prefer to resolve server-relative URLs (starting with '/') as absolute paths before falling back to resolve in 'resolve.roots'. + --resolve-modules-reset Clear all items provided in 'resolve.modules' configuration. Folder names or directory paths where to find modules. + --resolve-prefer-absolute Prefer to resolve server-relative URLs (starting with '/') as absolute paths before falling back to resolve in + 'resolve.roots'. --no-resolve-prefer-absolute Negative 'resolve-prefer-absolute' option. --resolve-prefer-relative Prefer to resolve module requests as relative request and fallback to resolving as module. --no-resolve-prefer-relative Negative 'resolve-prefer-relative' option. --resolve-restrictions Resolve restriction. Resolve result must fulfill this restriction. - --resolve-restrictions-reset Clear all items provided in configuration. A list of resolve restrictions. Resolve results must fulfill all of these restrictions to resolve successfully. Other resolve paths are taken when restrictions are not met. + --resolve-restrictions-reset Clear all items provided in 'resolve.restrictions' configuration. A list of resolve restrictions. Resolve results must + fulfill all of these restrictions to resolve successfully. Other resolve paths are taken when restrictions are not + met. --resolve-roots Directory in which requests that are server-relative URLs (starting with '/') are resolved. - --resolve-roots-reset Clear all items provided in configuration. A list of directories in which requests that are server-relative URLs (starting with '/') are resolved. + --resolve-roots-reset Clear all items provided in 'resolve.roots' configuration. A list of directories in which requests that are + server-relative URLs (starting with '/') are resolved. --resolve-symlinks Enable resolving symlinks to the original location. --no-resolve-symlinks Negative 'resolve-symlinks' option. --resolve-unsafe-cache Enable caching of successfully resolved requests (cache entries are not revalidated). @@ -653,47 +765,64 @@ Options: --resolve-loader-alias-name Request to be redirected. --resolve-loader-alias-only-module Redirect only exact matching request. --no-resolve-loader-alias-only-module Negative 'resolve-loader-alias-only-module' option. - --resolve-loader-alias-reset Clear all items provided in configuration. Redirect module requests. + --resolve-loader-alias-reset Clear all items provided in 'resolveLoader.alias' configuration. Redirect module requests. --resolve-loader-alias-fields Field in the description file (usually package.json) which are used to redirect requests inside the module. - --resolve-loader-alias-fields-reset Clear all items provided in configuration. Fields in the description file (usually package.json) which are used to redirect requests inside the module. + --resolve-loader-alias-fields-reset Clear all items provided in 'resolveLoader.aliasFields' configuration. Fields in the description file (usually + package.json) which are used to redirect requests inside the module. --resolve-loader-cache Enable caching of successfully resolved requests (cache entries are revalidated). --no-resolve-loader-cache Negative 'resolve-loader-cache' option. --resolve-loader-cache-with-context Include the context information in the cache identifier when caching. --no-resolve-loader-cache-with-context Negative 'resolve-loader-cache-with-context' option. --resolve-loader-condition-names Condition names for exports field entry point. - --resolve-loader-condition-names-reset Clear all items provided in configuration. Condition names for exports field entry point. + --resolve-loader-condition-names-reset Clear all items provided in 'resolveLoader.conditionNames' configuration. Condition names for exports field entry + point. --resolve-loader-description-files Filename used to find a description file (like a package.json). - --resolve-loader-description-files-reset Clear all items provided in configuration. Filenames used to find a description file (like a package.json). - --resolve-loader-enforce-extension Enforce the resolver to use one of the extensions from the extensions option (User must specify requests without extension). + --resolve-loader-description-files-reset Clear all items provided in 'resolveLoader.descriptionFiles' configuration. Filenames used to find a description file + (like a package.json). + --resolve-loader-enforce-extension Enforce the resolver to use one of the extensions from the extensions option (User must specify requests without + extension). --no-resolve-loader-enforce-extension Negative 'resolve-loader-enforce-extension' option. --resolve-loader-exports-fields Field name from the description file (usually package.json) which is used to provide entry points of a package. - --resolve-loader-exports-fields-reset Clear all items provided in configuration. Field names from the description file (usually package.json) which are used to provide entry points of a package. + --resolve-loader-exports-fields-reset Clear all items provided in 'resolveLoader.exportsFields' configuration. Field names from the description file + (usually package.json) which are used to provide entry points of a package. --resolve-loader-extensions Extension added to the request when trying to find the file. - --resolve-loader-extensions-reset Clear all items provided in configuration. Extensions added to the request when trying to find the file. + --resolve-loader-extensions-reset Clear all items provided in 'resolveLoader.extensions' configuration. Extensions added to the request when trying to + find the file. --resolve-loader-fallback-alias Ignore request (replace with empty module). New request. --no-resolve-loader-fallback-alias Negative 'resolve-loader-fallback-alias' option. --resolve-loader-fallback-name Request to be redirected. --resolve-loader-fallback-only-module Redirect only exact matching request. --no-resolve-loader-fallback-only-module Negative 'resolve-loader-fallback-only-module' option. - --resolve-loader-fallback-reset Clear all items provided in configuration. Redirect module requests. - --resolve-loader-fully-specified Treats the request specified by the user as fully specified, meaning no extensions are added and the mainFiles in directories are not resolved (This doesn't affect requests from mainFields, aliasFields or aliases). + --resolve-loader-fallback-reset Clear all items provided in 'resolveLoader.fallback' configuration. Redirect module requests. + --resolve-loader-fully-specified Treats the request specified by the user as fully specified, meaning no extensions are added and the mainFiles in + directories are not resolved (This doesn't affect requests from mainFields, aliasFields or aliases). --no-resolve-loader-fully-specified Negative 'resolve-loader-fully-specified' option. - --resolve-loader-imports-fields Field name from the description file (usually package.json) which is used to provide internal request of a package (requests starting with # are considered as internal). - --resolve-loader-imports-fields-reset Clear all items provided in configuration. Field names from the description file (usually package.json) which are used to provide internal request of a package (requests starting with # are considered as internal). + --resolve-loader-imports-fields Field name from the description file (usually package.json) which is used to provide internal request of a package + (requests starting with # are considered as internal). + --resolve-loader-imports-fields-reset Clear all items provided in 'resolveLoader.importsFields' configuration. Field names from the description file + (usually package.json) which are used to provide internal request of a package (requests starting with # are + considered as internal). --resolve-loader-main-fields Field name from the description file (package.json) which are used to find the default entry point. - --resolve-loader-main-fields-reset Clear all items provided in configuration. Field names from the description file (package.json) which are used to find the default entry point. + --resolve-loader-main-fields-reset Clear all items provided in 'resolveLoader.mainFields' configuration. Field names from the description file + (package.json) which are used to find the default entry point. --resolve-loader-main-files Filename used to find the default entry point if there is no description file or main field. - --resolve-loader-main-files-reset Clear all items provided in configuration. Filenames used to find the default entry point if there is no description file or main field. + --resolve-loader-main-files-reset Clear all items provided in 'resolveLoader.mainFiles' configuration. Filenames used to find the default entry point if + there is no description file or main field. --resolve-loader-modules Folder name or directory path where to find modules. - --resolve-loader-modules-reset Clear all items provided in configuration. Folder names or directory paths where to find modules. - --resolve-loader-prefer-absolute Prefer to resolve server-relative URLs (starting with '/') as absolute paths before falling back to resolve in 'resolve.roots'. + --resolve-loader-modules-reset Clear all items provided in 'resolveLoader.modules' configuration. Folder names or directory paths where to find + modules. + --resolve-loader-prefer-absolute Prefer to resolve server-relative URLs (starting with '/') as absolute paths before falling back to resolve in + 'resolve.roots'. --no-resolve-loader-prefer-absolute Negative 'resolve-loader-prefer-absolute' option. --resolve-loader-prefer-relative Prefer to resolve module requests as relative request and fallback to resolving as module. --no-resolve-loader-prefer-relative Negative 'resolve-loader-prefer-relative' option. --resolve-loader-restrictions Resolve restriction. Resolve result must fulfill this restriction. - --resolve-loader-restrictions-reset Clear all items provided in configuration. A list of resolve restrictions. Resolve results must fulfill all of these restrictions to resolve successfully. Other resolve paths are taken when restrictions are not met. + --resolve-loader-restrictions-reset Clear all items provided in 'resolveLoader.restrictions' configuration. A list of resolve restrictions. Resolve + results must fulfill all of these restrictions to resolve successfully. Other resolve paths are taken when + restrictions are not met. --resolve-loader-roots Directory in which requests that are server-relative URLs (starting with '/') are resolved. - --resolve-loader-roots-reset Clear all items provided in configuration. A list of directories in which requests that are server-relative URLs (starting with '/') are resolved. + --resolve-loader-roots-reset Clear all items provided in 'resolveLoader.roots' configuration. A list of directories in which requests that are + server-relative URLs (starting with '/') are resolved. --resolve-loader-symlinks Enable resolving symlinks to the original location. --no-resolve-loader-symlinks Negative 'resolve-loader-symlinks' option. --resolve-loader-unsafe-cache Enable caching of successfully resolved requests (cache entries are not revalidated). @@ -705,9 +834,11 @@ Options: --snapshot-build-dependencies-timestamp Use timestamps of the files/directories to determine invalidation. --no-snapshot-build-dependencies-timestamp Negative 'snapshot-build-dependencies-timestamp' option. --snapshot-immutable-paths A path to a immutable directory (usually a package manager cache directory). - --snapshot-immutable-paths-reset Clear all items provided in configuration. List of paths that are managed by a package manager and contain a version or hash in its path so all files are immutable. + --snapshot-immutable-paths-reset Clear all items provided in 'snapshot.immutablePaths' configuration. List of paths that are managed by a package + manager and contain a version or hash in its path so all files are immutable. --snapshot-managed-paths A path to a managed directory (usually a node_modules directory). - --snapshot-managed-paths-reset Clear all items provided in configuration. List of paths that are managed by a package manager and can be trusted to not be modified otherwise. + --snapshot-managed-paths-reset Clear all items provided in 'snapshot.managedPaths' configuration. List of paths that are managed by a package manager + and can be trusted to not be modified otherwise. --snapshot-module-hash Use hashes of the content of the files/directories to determine invalidation. --no-snapshot-module-hash Negative 'snapshot-module-hash' option. --snapshot-module-timestamp Use timestamps of the files/directories to determine invalidation. @@ -781,10 +912,12 @@ Options: --stats-errors-count Add errors count. --no-stats-errors-count Negative 'stats-errors-count' option. --stats-exclude-assets Suppress assets that match the specified filters. Filters can be Strings, RegExps or Functions. - --stats-exclude-assets-reset Clear all items provided in configuration. Suppress assets that match the specified filters. Filters can be Strings, RegExps or Functions. + --stats-exclude-assets-reset Clear all items provided in 'stats.excludeAssets' configuration. Suppress assets that match the specified filters. + Filters can be Strings, RegExps or Functions. --stats-exclude-modules [value...] Suppress modules that match the specified filters. Filters can be Strings, RegExps, Booleans or Functions. --no-stats-exclude-modules Negative 'stats-exclude-modules' option. - --stats-exclude-modules-reset Clear all items provided in configuration. Suppress modules that match the specified filters. Filters can be Strings, RegExps, Booleans or Functions. + --stats-exclude-modules-reset Clear all items provided in 'stats.excludeModules' configuration. Suppress modules that match the specified filters. + Filters can be Strings, RegExps, Booleans or Functions. --stats-group-assets-by-chunk Group assets by how their are related to chunks. --no-stats-group-assets-by-chunk Negative 'stats-group-assets-by-chunk' option. --stats-group-assets-by-emit-status Group assets by their status (emitted, compared for emit or cached). @@ -811,11 +944,14 @@ Options: --no-stats-hash Negative 'stats-hash' option. --stats-ids Add ids. --no-stats-ids Negative 'stats-ids' option. - --stats-logging [value] Specify log level of logging output. Enable/disable logging output (`true`: shows normal logging output, loglevel: log). + --stats-logging [value] Specify log level of logging output. Enable/disable logging output (`true`: shows normal logging output, loglevel: + log). --no-stats-logging Negative 'stats-logging' option. - --stats-logging-debug [value...] Enable/Disable debug logging for all loggers. Include debug logging of specified loggers (i. e. for plugins or loaders). Filters can be Strings, RegExps or Functions. + --stats-logging-debug [value...] Enable/Disable debug logging for all loggers. Include debug logging of specified loggers (i. e. for plugins or + loaders). Filters can be Strings, RegExps or Functions. --no-stats-logging-debug Negative 'stats-logging-debug' option. - --stats-logging-debug-reset Clear all items provided in configuration. Include debug logging of specified loggers (i. e. for plugins or loaders). Filters can be Strings, RegExps or Functions. + --stats-logging-debug-reset Clear all items provided in 'stats.loggingDebug' configuration. Include debug logging of specified loggers (i. e. for + plugins or loaders). Filters can be Strings, RegExps or Functions. --stats-logging-trace Add stack traces to logging output. --no-stats-logging-trace Negative 'stats-logging-trace' option. --stats-module-assets Add information about assets inside modules. @@ -828,7 +964,8 @@ Options: --stats-modules-space Space to display modules (groups will be collapsed to fit this space, value is in number of modules/groups). --stats-nested-modules Add information about modules nested in other modules (like with module concatenation). --no-stats-nested-modules Negative 'stats-nested-modules' option. - --stats-nested-modules-space Space to display modules nested within other modules (groups will be collapsed to fit this space, value is in number of modules/group). + --stats-nested-modules-space Space to display modules nested within other modules (groups will be collapsed to fit this space, value is in number + of modules/group). --stats-optimization-bailout Show reasons why optimization bailed out for modules. --no-stats-optimization-bailout Negative 'stats-optimization-bailout' option. --stats-orphan-modules Add information about orphan modules. @@ -863,18 +1000,24 @@ Options: --no-stats-warnings Negative 'stats-warnings' option. --stats-warnings-count Add warnings count. --no-stats-warnings-count Negative 'stats-warnings-count' option. - --stats-warnings-filter Suppress listing warnings that match the specified filters (they will still be counted). Filters can be Strings, RegExps or Functions. - --stats-warnings-filter-reset Clear all items provided in configuration. Suppress listing warnings that match the specified filters (they will still be counted). Filters can be Strings, RegExps or Functions. + --stats-warnings-filter Suppress listing warnings that match the specified filters (they will still be counted). Filters can be Strings, + RegExps or Functions. + --stats-warnings-filter-reset Clear all items provided in 'stats.warningsFilter' configuration. Suppress listing warnings that match the specified + filters (they will still be counted). Filters can be Strings, RegExps or Functions. -t, --target Sets the build target e.g. node. --no-target Negative 'target' option. - --target-reset Clear all items provided in configuration. Environment to build for. An array of environments to build for all of them when possible. + --target-reset Clear all items provided in 'target' configuration. Environment to build for. An array of environments to build for + all of them when possible. -w, --watch Watch for files changes. --no-watch Do not watch for file changes. --watch-options-aggregate-timeout Delay the rebuilt after the first change. Value is a time in ms. - --watch-options-follow-symlinks Resolve symlinks and watch symlink and real file. This is usually not needed as webpack already resolves symlinks ('resolve.symlinks'). + --watch-options-follow-symlinks Resolve symlinks and watch symlink and real file. This is usually not needed as webpack already resolves symlinks + ('resolve.symlinks'). --no-watch-options-follow-symlinks Negative 'watch-options-follow-symlinks' option. - --watch-options-ignored A glob pattern for files that should be ignored from watching. Ignore some files from watching (glob pattern or regexp). - --watch-options-ignored-reset Clear all items provided in configuration. Ignore some files from watching (glob pattern or regexp). + --watch-options-ignored A glob pattern for files that should be ignored from watching. Ignore some files from watching (glob pattern or + regexp). + --watch-options-ignored-reset Clear all items provided in 'watchOptions.ignored' configuration. Ignore some files from watching (glob pattern or + regexp). --watch-options-poll [value] `number`: use polling with specified interval. `true`: use polling. --no-watch-options-poll Negative 'watch-options-poll' option. --watch-options-stdin Stop watching when stdin stream has ended. From e1490321f9794a96d0b21f5c6f0c07cd6030fcae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Jun 2021 14:52:23 +0300 Subject: [PATCH 039/173] chore(deps-dev): bump webpack from 5.41.0 to 5.41.1 (#2810) Bumps [webpack](https://github.com/webpack/webpack) from 5.41.0 to 5.41.1. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.41.0...v5.41.1) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 47 ++++------------------------------------------- 1 file changed, 4 insertions(+), 43 deletions(-) diff --git a/yarn.lock b/yarn.lock index bd481f74cb5..aa51e6f2cf6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1833,12 +1833,7 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*": - version "0.0.47" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" - integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== - -"@types/estree@^0.0.48": +"@types/estree@*", "@types/estree@^0.0.48": version "0.0.48" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74" integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew== @@ -2076,14 +2071,6 @@ "@typescript-eslint/typescript-estree" "4.28.1" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.28.0": - version "4.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.0.tgz#6a3009d2ab64a30fc8a1e257a1a320067f36a0ce" - integrity sha512-eCALCeScs5P/EYjwo6se9bdjtrh8ByWjtHzOkC4Tia6QQWtQr3PHovxh3TdYTuFcurkYI4rmFsRFpucADIkseg== - dependencies: - "@typescript-eslint/types" "4.28.0" - "@typescript-eslint/visitor-keys" "4.28.0" - "@typescript-eslint/scope-manager@4.28.1": version "4.28.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.1.tgz#fd3c20627cdc12933f6d98b386940d8d0ce8a991" @@ -2092,29 +2079,11 @@ "@typescript-eslint/types" "4.28.1" "@typescript-eslint/visitor-keys" "4.28.1" -"@typescript-eslint/types@4.28.0": - version "4.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.0.tgz#a33504e1ce7ac51fc39035f5fe6f15079d4dafb0" - integrity sha512-p16xMNKKoiJCVZY5PW/AfILw2xe1LfruTcfAKBj3a+wgNYP5I9ZEKNDOItoRt53p4EiPV6iRSICy8EPanG9ZVA== - "@typescript-eslint/types@4.28.1": version "4.28.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.1.tgz#d0f2ecbef3684634db357b9bbfc97b94b828f83f" integrity sha512-4z+knEihcyX7blAGi7O3Fm3O6YRCP+r56NJFMNGsmtdw+NCdpG5SgNz427LS9nQkRVTswZLhz484hakQwB8RRg== -"@typescript-eslint/typescript-estree@4.28.0": - version "4.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.0.tgz#e66d4e5aa2ede66fec8af434898fe61af10c71cf" - integrity sha512-m19UQTRtxMzKAm8QxfKpvh6OwQSXaW1CdZPoCaQuLwAq7VZMNuhJmZR4g5281s2ECt658sldnJfdpSZZaxUGMQ== - dependencies: - "@typescript-eslint/types" "4.28.0" - "@typescript-eslint/visitor-keys" "4.28.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.28.1": version "4.28.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz#af882ae41740d1f268e38b4d0fad21e7e8d86a81" @@ -2128,14 +2097,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.28.0": - version "4.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.0.tgz#255c67c966ec294104169a6939d96f91c8a89434" - integrity sha512-PjJyTWwrlrvM5jazxYF5ZPs/nl0kHDZMVbuIcbpawVXaDPelp3+S9zpOz5RmVUfS/fD5l5+ZXNKnWhNYjPzCvw== - dependencies: - "@typescript-eslint/types" "4.28.0" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.28.1": version "4.28.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz#162a515ee255f18a6068edc26df793cdc1ec9157" @@ -11049,9 +11010,9 @@ webpack-sources@^2.3.0: source-map "^0.6.1" webpack@^5.41.0: - version "5.41.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.41.0.tgz#217daa27bdd30287c1d7f9d9e0a2304fe33c5a51" - integrity sha512-pCVO7hVm8XiL6DpPtXrFLS8ktmH/tpvtbEex6hn4RweTFe6z6Cugh5FlQoEPZotb15HiirjM2Kv7THTA7sKLzQ== + version "5.41.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.41.1.tgz#23fa1d82c95c222d3fc3163806b9a833fe52b253" + integrity sha512-AJZIIsqJ/MVTmegEq9Tlw5mk5EHdGiJbDdz9qP15vmUH+oxI1FdWcL0E9EO8K/zKaRPWqEs7G/OPxq1P61u5Ug== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.48" From 1e0a68ccec146a6bdab497401b7c3776a0783249 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Jul 2021 15:06:30 +0300 Subject: [PATCH 040/173] chore(deps-dev): bump typescript from 4.3.4 to 4.3.5 (#2812) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.3.4 to 4.3.5. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v4.3.4...v4.3.5) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index aa51e6f2cf6..d096b04ecc2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10631,9 +10631,9 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^4.1.3: - version "4.3.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc" - integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== + version "4.3.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" + integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== uglify-js@^3.1.4: version "3.13.6" From 45d1fea4593ce0a0f2c5b67259c6ce7717332e29 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Jul 2021 13:57:15 +0300 Subject: [PATCH 041/173] chore(deps-dev): bump @types/node from 15.12.5 to 15.14.0 (#2813) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 15.12.5 to 15.14.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d096b04ecc2..91f9f38c213 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1941,9 +1941,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@^15.0.3": - version "15.12.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.5.tgz#9a78318a45d75c9523d2396131bd3cca54b2d185" - integrity sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg== + version "15.14.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.0.tgz#74dbf254fb375551a9d2a71faf6b9dbc2178dc53" + integrity sha512-um/+/ip3QZmwLfIkWZSNtQIJNVAqrJ92OkLMeuZrjZMTAJniI7fh8N8OICyDhAJ2mzgk/fmYFo72jRr5HyZ1EQ== "@types/normalize-package-data@^2.4.0": version "2.4.0" From 627732c4e33e523813d5db90b6933b0e70dbe2ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Jul 2021 14:35:35 +0300 Subject: [PATCH 042/173] chore(deps-dev): bump @types/node from 15.14.0 to 15.14.1 (#2817) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 15.14.0 to 15.14.1. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 91f9f38c213..2e7187a2c5d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1941,9 +1941,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@^15.0.3": - version "15.14.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.0.tgz#74dbf254fb375551a9d2a71faf6b9dbc2178dc53" - integrity sha512-um/+/ip3QZmwLfIkWZSNtQIJNVAqrJ92OkLMeuZrjZMTAJniI7fh8N8OICyDhAJ2mzgk/fmYFo72jRr5HyZ1EQ== + version "15.14.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.1.tgz#4f9d3689532499fdda1c898e19f4593718655e36" + integrity sha512-wF6hazbsnwaW3GhK4jFuw5NaLDQVRQ6pWQUGAUrJzxixFkTaODSiAKMPXuHwPEPkAKQWHAzj6uJ5h+3zU9gQxg== "@types/normalize-package-data@^2.4.0": version "2.4.0" From 7ff94c30d862ffcf994f8ef1f20a29e0070bb9e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Jul 2021 14:39:21 +0300 Subject: [PATCH 043/173] chore(deps-dev): bump eslint from 7.29.0 to 7.30.0 (#2816) Bumps [eslint](https://github.com/eslint/eslint) from 7.29.0 to 7.30.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.29.0...v7.30.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2e7187a2c5d..6410693bffa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -607,6 +607,20 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" + integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -4335,12 +4349,13 @@ eslint-visitor-keys@^2.0.0: integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint@^7.12.1: - version "7.29.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.29.0.tgz#ee2a7648f2e729485e4d0bd6383ec1deabc8b3c0" - integrity sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA== + version "7.30.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.30.0.tgz#6d34ab51aaa56112fd97166226c9a97f505474f8" + integrity sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg== dependencies: "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.4.2" + "@humanwhocodes/config-array" "^0.5.0" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" From dbecc6750e3cd5ece92163545481ba3f608c48d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Jul 2021 14:40:29 +0300 Subject: [PATCH 044/173] chore(deps-dev): bump webpack from 5.41.1 to 5.42.0 (#2818) Bumps [webpack](https://github.com/webpack/webpack) from 5.41.1 to 5.42.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.41.1...v5.42.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6410693bffa..4de6e5d6c10 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2333,10 +2333,10 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.2.1, acorn@^8.2.4: - version "8.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.3.0.tgz#1193f9b96c4e8232f00b11a9edff81b2c8b98b88" - integrity sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw== +acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" + integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== add-stream@^1.0.0: version "1.0.0" @@ -11025,16 +11025,16 @@ webpack-sources@^2.3.0: source-map "^0.6.1" webpack@^5.41.0: - version "5.41.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.41.1.tgz#23fa1d82c95c222d3fc3163806b9a833fe52b253" - integrity sha512-AJZIIsqJ/MVTmegEq9Tlw5mk5EHdGiJbDdz9qP15vmUH+oxI1FdWcL0E9EO8K/zKaRPWqEs7G/OPxq1P61u5Ug== + version "5.42.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.42.0.tgz#39aadbce84ad2cebf86cc5f88a2c53db65cbddfb" + integrity sha512-Ln8HL0F831t1x/yPB/qZEUVmZM4w9BnHZ1EQD/sAUHv8m22hthoPniWTXEzFMh/Sf84mhrahut22TX5KxWGuyQ== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.48" "@webassemblyjs/ast" "1.11.0" "@webassemblyjs/wasm-edit" "1.11.0" "@webassemblyjs/wasm-parser" "1.11.0" - acorn "^8.2.1" + acorn "^8.4.1" browserslist "^4.14.5" chrome-trace-event "^1.0.2" enhanced-resolve "^5.8.0" From 49554a72f36f06c1b2b05b7bc5ee2fb309539e6e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Jul 2021 16:57:54 +0300 Subject: [PATCH 045/173] chore(deps-dev): bump webpack from 5.42.0 to 5.43.0 (#2824) Bumps [webpack](https://github.com/webpack/webpack) from 5.42.0 to 5.43.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.42.0...v5.43.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 236 +++++++++++++++++++++++++++--------------------------- 1 file changed, 118 insertions(+), 118 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4de6e5d6c10..287998eca15 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1847,10 +1847,10 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^0.0.48": - version "0.0.48" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74" - integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew== +"@types/estree@*", "@types/estree@^0.0.49": + version "0.0.49" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.49.tgz#3facb98ebcd4114a4ecef74e0de2175b56fd4464" + integrity sha512-K1AFuMe8a+pXmfHTtnwBvqoEylNKVeaiKYkjmcEAdytMQVJ/i9Fu7sc13GxgXdO49gkE7Hy8SyJonUZUn+eVaw== "@types/expect@^1.20.4": version "1.20.4" @@ -2119,125 +2119,125 @@ "@typescript-eslint/types" "4.28.1" eslint-visitor-keys "^2.0.0" -"@webassemblyjs/ast@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" - integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== dependencies: - "@webassemblyjs/helper-numbers" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" -"@webassemblyjs/floating-point-hex-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" - integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== -"@webassemblyjs/helper-api-error@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" - integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== -"@webassemblyjs/helper-buffer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" - integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== -"@webassemblyjs/helper-numbers@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" - integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" - integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== -"@webassemblyjs/helper-wasm-section@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" - integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" -"@webassemblyjs/ieee754@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" - integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" - integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" - integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== - -"@webassemblyjs/wasm-edit@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" - integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/helper-wasm-section" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-opt" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - "@webassemblyjs/wast-printer" "1.11.0" - -"@webassemblyjs/wasm-gen@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" - integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wasm-opt@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" - integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - -"@webassemblyjs/wasm-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" - integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wast-printer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" - integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" "@webpack-cli/migrate@^1.1.2": @@ -4228,10 +4228,10 @@ es-abstract@^1.18.0-next.2: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.0" -es-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.6.0.tgz#e72ab05b7412e62b9be37c37a09bdb6000d706f0" - integrity sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA== +es-module-lexer@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.7.1.tgz#c2c8e0f46f2df06274cdaf0dd3f3b33e0a0b267d" + integrity sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw== es-to-primitive@^1.2.1: version "1.2.1" @@ -11025,20 +11025,20 @@ webpack-sources@^2.3.0: source-map "^0.6.1" webpack@^5.41.0: - version "5.42.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.42.0.tgz#39aadbce84ad2cebf86cc5f88a2c53db65cbddfb" - integrity sha512-Ln8HL0F831t1x/yPB/qZEUVmZM4w9BnHZ1EQD/sAUHv8m22hthoPniWTXEzFMh/Sf84mhrahut22TX5KxWGuyQ== + version "5.43.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.43.0.tgz#36a122d6e9bac3836273857f56ed7801d40c9145" + integrity sha512-ex3nB9uxNI0azzb0r3xGwi+LS5Gw1RCRSKk0kg3kq9MYdIPmLS6UI3oEtG7esBaB51t9I+5H+vHmL3htaxqMSw== dependencies: "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.48" - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/wasm-edit" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" + "@types/estree" "^0.0.49" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" acorn "^8.4.1" browserslist "^4.14.5" chrome-trace-event "^1.0.2" enhanced-resolve "^5.8.0" - es-module-lexer "^0.6.0" + es-module-lexer "^0.7.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" From 828e5c923719982dfc828f9935f65384d6ede2d1 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Thu, 8 Jul 2021 03:15:48 +0530 Subject: [PATCH 046/173] feat: show possible values for option in help output (#2819) * feat: show possible values for option in help output * fix: show all possible values * test: updates * test: update snaps * test: fix * test: fix --- packages/webpack-cli/lib/webpack-cli.js | 23 ++++++++++++++++++- .../help.test.js.snap.devServer3.webpack5 | 19 +++++++++++++++ .../help.test.js.snap.devServer4.webpack5 | 19 +++++++++++++++ test/help/help.test.js | 14 ++++++++++- 4 files changed, 73 insertions(+), 2 deletions(-) diff --git a/packages/webpack-cli/lib/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index 5ab16847c01..e8f7b0a3146 100644 --- a/packages/webpack-cli/lib/webpack-cli.js +++ b/packages/webpack-cli/lib/webpack-cli.js @@ -1363,10 +1363,31 @@ class WebpackCLI { ); } + const flag = this.getBuiltInOptions().find( + (flag) => option.long === `--${flag.name}`, + ); + + if (flag && flag.configs) { + const possibleValues = flag.configs.reduce((accumulator, currentValue) => { + if (currentValue.values) { + return accumulator.concat(currentValue.values); + } else { + return accumulator; + } + }, []); + + if (possibleValues.length > 0) { + this.logger.raw( + `${bold("Possible values:")} ${JSON.stringify( + possibleValues.join(" | "), + )}`, + ); + } + } + this.logger.raw(""); // TODO implement this after refactor cli arguments - // logger.raw('Possible values: foo | bar'); // logger.raw('Documentation: https://webpack.js.org/option/name/'); } else { outputIncorrectUsageOfHelp(); diff --git a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 index e64ba7ddde2..849523f1832 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 +++ b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 @@ -2540,6 +2540,20 @@ CLI documentation: https://webpack.js.org/api/cli/. Made with ♥ by the webpack team." `; +exports[`help should show help information using the "help --cache-type" option: stderr 1`] = `""`; + +exports[`help should show help information using the "help --cache-type" option: stdout 1`] = ` +"Usage: webpack --cache-type +Description: In memory caching. Filesystem caching. +Possible values: \\"memory | filesystem\\" + +To see list of all supported commands and options run 'webpack --help=verbose'. + +Webpack documentation: https://webpack.js.org/. +CLI documentation: https://webpack.js.org/api/cli/. +Made with ♥ by the webpack team." +`; + exports[`help should show help information using the "help --color" option: stderr 1`] = `""`; exports[`help should show help information using the "help --color" option: stdout 1`] = ` @@ -2560,6 +2574,7 @@ exports[`help should show help information using the "help --mode" option: stder exports[`help should show help information using the "help --mode" option: stdout 1`] = ` "Usage: webpack --mode Description: Defines the mode to pass to webpack. +Possible values: \\"development | production | none\\" To see list of all supported commands and options run 'webpack --help=verbose'. @@ -2571,6 +2586,7 @@ Made with ♥ by the webpack team." exports[`help should show help information using the "help --mode" option: stdout 2`] = ` "Usage: webpack --mode Description: Defines the mode to pass to webpack. +Possible values: \\"development | production | none\\" To see list of all supported commands and options run 'webpack --help=verbose'. @@ -2610,6 +2626,7 @@ exports[`help should show help information using the "help --stats" option: stde exports[`help should show help information using the "help --stats" option: stdout 1`] = ` "Usage: webpack --stats [value] Description: It instructs webpack on how to treat the stats e.g. verbose. +Possible values: \\"none | summary | errors-only | errors-warnings | minimal | normal | detailed | verbose\\" To see list of all supported commands and options run 'webpack --help=verbose'. @@ -2624,6 +2641,7 @@ exports[`help should show help information using the "help --target" option: std "Usage: webpack --target Short: webpack -t Description: Sets the build target e.g. node. +Possible values: \\"false\\" To see list of all supported commands and options run 'webpack --help=verbose'. @@ -2678,6 +2696,7 @@ exports[`help should show help information using the "help serve --mode" option: exports[`help should show help information using the "help serve --mode" option: stdout 1`] = ` "Usage: webpack serve --mode Description: Defines the mode to pass to webpack. +Possible values: \\"development | production | none\\" To see list of all supported commands and options run 'webpack --help=verbose'. diff --git a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 index 3fa2c24e7bb..e76d76b08b9 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 +++ b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 @@ -2670,6 +2670,20 @@ CLI documentation: https://webpack.js.org/api/cli/. Made with ♥ by the webpack team." `; +exports[`help should show help information using the "help --cache-type" option: stderr 1`] = `""`; + +exports[`help should show help information using the "help --cache-type" option: stdout 1`] = ` +"Usage: webpack --cache-type +Description: In memory caching. Filesystem caching. +Possible values: \\"memory | filesystem\\" + +To see list of all supported commands and options run 'webpack --help=verbose'. + +Webpack documentation: https://webpack.js.org/. +CLI documentation: https://webpack.js.org/api/cli/. +Made with ♥ by the webpack team." +`; + exports[`help should show help information using the "help --color" option: stderr 1`] = `""`; exports[`help should show help information using the "help --color" option: stdout 1`] = ` @@ -2690,6 +2704,7 @@ exports[`help should show help information using the "help --mode" option: stder exports[`help should show help information using the "help --mode" option: stdout 1`] = ` "Usage: webpack --mode Description: Defines the mode to pass to webpack. +Possible values: \\"development | production | none\\" To see list of all supported commands and options run 'webpack --help=verbose'. @@ -2701,6 +2716,7 @@ Made with ♥ by the webpack team." exports[`help should show help information using the "help --mode" option: stdout 2`] = ` "Usage: webpack --mode Description: Defines the mode to pass to webpack. +Possible values: \\"development | production | none\\" To see list of all supported commands and options run 'webpack --help=verbose'. @@ -2740,6 +2756,7 @@ exports[`help should show help information using the "help --stats" option: stde exports[`help should show help information using the "help --stats" option: stdout 1`] = ` "Usage: webpack --stats [value] Description: It instructs webpack on how to treat the stats e.g. verbose. +Possible values: \\"none | summary | errors-only | errors-warnings | minimal | normal | detailed | verbose\\" To see list of all supported commands and options run 'webpack --help=verbose'. @@ -2754,6 +2771,7 @@ exports[`help should show help information using the "help --target" option: std "Usage: webpack --target Short: webpack -t Description: Sets the build target e.g. node. +Possible values: \\"false\\" To see list of all supported commands and options run 'webpack --help=verbose'. @@ -2808,6 +2826,7 @@ exports[`help should show help information using the "help serve --mode" option: exports[`help should show help information using the "help serve --mode" option: stdout 1`] = ` "Usage: webpack serve --mode Description: Defines the mode to pass to webpack. +Possible values: \\"development | production | none\\" To see list of all supported commands and options run 'webpack --help=verbose'. diff --git a/test/help/help.test.js b/test/help/help.test.js index 627a1ab9929..f7f556bcf8e 100644 --- a/test/help/help.test.js +++ b/test/help/help.test.js @@ -1,6 +1,6 @@ "use strict"; -const { run, normalizeStderr, normalizeStdout } = require("../utils/test-utils"); +const { run, normalizeStderr, normalizeStdout, isWebpack5 } = require("../utils/test-utils"); describe("help", () => { it('should show help information using the "--help" option', async () => { @@ -242,6 +242,18 @@ describe("help", () => { expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); }); + it('should show help information using the "help --cache-type" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--cache-type"]); + + if (isWebpack5) { + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } else { + expect(exitCode).toBe(2); + } + }); + it('should show help information using the "help --no-stats" option', async () => { const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--no-stats"]); From b94c12493d7e50527ab7a63c94a2ed521aa3315e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Jul 2021 11:42:31 +0300 Subject: [PATCH 047/173] chore(deps-dev): bump @typescript-eslint/parser from 4.28.1 to 4.28.2 (#2822) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.28.1 to 4.28.2. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.28.2/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 287998eca15..e3ba8768c0d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2076,13 +2076,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.1.tgz#5181b81658414f47291452c15bf6cd44a32f85bd" - integrity sha512-UjrMsgnhQIIK82hXGaD+MCN8IfORS1CbMdu7VlZbYa8LCZtbZjJA26De4IPQB7XYZbL8gJ99KWNj0l6WD0guJg== + version "4.28.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.2.tgz#6aff11bf4b91eb67ca7517962eede951e9e2a15d" + integrity sha512-Q0gSCN51eikAgFGY+gnd5p9bhhCUAl0ERMiDKrTzpSoMYRubdB8MJrTTR/BBii8z+iFwz8oihxd0RAdP4l8w8w== dependencies: - "@typescript-eslint/scope-manager" "4.28.1" - "@typescript-eslint/types" "4.28.1" - "@typescript-eslint/typescript-estree" "4.28.1" + "@typescript-eslint/scope-manager" "4.28.2" + "@typescript-eslint/types" "4.28.2" + "@typescript-eslint/typescript-estree" "4.28.2" debug "^4.3.1" "@typescript-eslint/scope-manager@4.28.1": @@ -2093,11 +2093,24 @@ "@typescript-eslint/types" "4.28.1" "@typescript-eslint/visitor-keys" "4.28.1" +"@typescript-eslint/scope-manager@4.28.2": + version "4.28.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.2.tgz#451dce90303a3ce283750111495d34c9c204e510" + integrity sha512-MqbypNjIkJFEFuOwPWNDjq0nqXAKZvDNNs9yNseoGBB1wYfz1G0WHC2AVOy4XD7di3KCcW3+nhZyN6zruqmp2A== + dependencies: + "@typescript-eslint/types" "4.28.2" + "@typescript-eslint/visitor-keys" "4.28.2" + "@typescript-eslint/types@4.28.1": version "4.28.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.1.tgz#d0f2ecbef3684634db357b9bbfc97b94b828f83f" integrity sha512-4z+knEihcyX7blAGi7O3Fm3O6YRCP+r56NJFMNGsmtdw+NCdpG5SgNz427LS9nQkRVTswZLhz484hakQwB8RRg== +"@typescript-eslint/types@4.28.2": + version "4.28.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.2.tgz#e6b9e234e0e9a66c4d25bab881661e91478223b5" + integrity sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA== + "@typescript-eslint/typescript-estree@4.28.1": version "4.28.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz#af882ae41740d1f268e38b4d0fad21e7e8d86a81" @@ -2111,6 +2124,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.28.2": + version "4.28.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz#680129b2a285289a15e7c6108c84739adf3a798c" + integrity sha512-86lLstLvK6QjNZjMoYUBMMsULFw0hPHJlk1fzhAVoNjDBuPVxiwvGuPQq3fsBMCxuDJwmX87tM/AXoadhHRljg== + dependencies: + "@typescript-eslint/types" "4.28.2" + "@typescript-eslint/visitor-keys" "4.28.2" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.28.1": version "4.28.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz#162a515ee255f18a6068edc26df793cdc1ec9157" @@ -2119,6 +2145,14 @@ "@typescript-eslint/types" "4.28.1" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.28.2": + version "4.28.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz#bf56a400857bb68b59b311e6d0a5fbef5c3b5130" + integrity sha512-aT2B4PLyyRDUVUafXzpZFoc0C9t0za4BJAKP5sgWIhG+jHECQZUEjuQSCIwZdiJJ4w4cgu5r3Kh20SOdtEBl0w== + dependencies: + "@typescript-eslint/types" "4.28.2" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From aa357c371763f2141fc10ec87d5dbd90862f3224 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Jul 2021 11:47:27 +0300 Subject: [PATCH 048/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin (#2820) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 4.28.1 to 4.28.2. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.28.2/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index e3ba8768c0d..9c592dd99de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2051,27 +2051,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.1.tgz#c045e440196ae45464e08e20c38aff5c3a825947" - integrity sha512-9yfcNpDaNGQ6/LQOX/KhUFTR1sCKH+PBr234k6hI9XJ0VP5UqGxap0AnNwBnWFk1MNyWBylJH9ZkzBXC+5akZQ== + version "4.28.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.2.tgz#7a8320f00141666813d0ae43b49ee8244f7cf92a" + integrity sha512-PGqpLLzHSxq956rzNGasO3GsAPf2lY9lDUBXhS++SKonglUmJypaUtcKzRtUte8CV7nruwnDxtLUKpVxs0wQBw== dependencies: - "@typescript-eslint/experimental-utils" "4.28.1" - "@typescript-eslint/scope-manager" "4.28.1" + "@typescript-eslint/experimental-utils" "4.28.2" + "@typescript-eslint/scope-manager" "4.28.2" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.1.tgz#3869489dcca3c18523c46018b8996e15948dbadc" - integrity sha512-n8/ggadrZ+uyrfrSEchx3jgODdmcx7MzVM2sI3cTpI/YlfSm0+9HEUaWw3aQn2urL2KYlWYMDgn45iLfjDYB+Q== +"@typescript-eslint/experimental-utils@4.28.2": + version "4.28.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.2.tgz#4ebdec06a10888e9326e1d51d81ad52a361bd0b0" + integrity sha512-MwHPsL6qo98RC55IoWWP8/opTykjTp4JzfPu1VfO2Z0MshNP0UZ1GEV5rYSSnZSUI8VD7iHvtIPVGW5Nfh7klQ== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.28.1" - "@typescript-eslint/types" "4.28.1" - "@typescript-eslint/typescript-estree" "4.28.1" + "@typescript-eslint/scope-manager" "4.28.2" + "@typescript-eslint/types" "4.28.2" + "@typescript-eslint/typescript-estree" "4.28.2" eslint-scope "^5.1.1" eslint-utils "^3.0.0" From 455e1913f1c19e5c346cb128905cae574c45ba3e Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Mon, 12 Jul 2021 15:01:30 +0530 Subject: [PATCH 049/173] test: remove duplicate testcase (#2825) --- .../help.test.js.snap.devServer3.webpack4 | 13 ------------- .../help.test.js.snap.devServer3.webpack5 | 14 -------------- .../help.test.js.snap.devServer4.webpack4 | 13 ------------- .../help.test.js.snap.devServer4.webpack5 | 14 -------------- test/help/help.test.js | 8 -------- 5 files changed, 62 deletions(-) diff --git a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack4 b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack4 index 5e9c6cb436b..c8b13330a95 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack4 +++ b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack4 @@ -2530,8 +2530,6 @@ Made with ♥ by the webpack team." exports[`help should show help information using the "help --mode" option: stderr 1`] = `""`; -exports[`help should show help information using the "help --mode" option: stderr 2`] = `""`; - exports[`help should show help information using the "help --mode" option: stdout 1`] = ` "Usage: webpack --mode Description: Defines the mode to pass to webpack. @@ -2543,17 +2541,6 @@ CLI documentation: https://webpack.js.org/api/cli/. Made with ♥ by the webpack team." `; -exports[`help should show help information using the "help --mode" option: stdout 2`] = ` -"Usage: webpack --mode -Description: Defines the mode to pass to webpack. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information using the "help --no-color" option: stderr 1`] = `""`; exports[`help should show help information using the "help --no-color" option: stdout 1`] = ` diff --git a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 index 849523f1832..37c30d8aefb 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 +++ b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 @@ -2569,8 +2569,6 @@ Made with ♥ by the webpack team." exports[`help should show help information using the "help --mode" option: stderr 1`] = `""`; -exports[`help should show help information using the "help --mode" option: stderr 2`] = `""`; - exports[`help should show help information using the "help --mode" option: stdout 1`] = ` "Usage: webpack --mode Description: Defines the mode to pass to webpack. @@ -2583,18 +2581,6 @@ CLI documentation: https://webpack.js.org/api/cli/. Made with ♥ by the webpack team." `; -exports[`help should show help information using the "help --mode" option: stdout 2`] = ` -"Usage: webpack --mode -Description: Defines the mode to pass to webpack. -Possible values: \\"development | production | none\\" - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information using the "help --no-color" option: stderr 1`] = `""`; exports[`help should show help information using the "help --no-color" option: stdout 1`] = ` diff --git a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 index 170369e3ff3..ffa57fa8bbf 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 +++ b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 @@ -2660,8 +2660,6 @@ Made with ♥ by the webpack team." exports[`help should show help information using the "help --mode" option: stderr 1`] = `""`; -exports[`help should show help information using the "help --mode" option: stderr 2`] = `""`; - exports[`help should show help information using the "help --mode" option: stdout 1`] = ` "Usage: webpack --mode Description: Defines the mode to pass to webpack. @@ -2673,17 +2671,6 @@ CLI documentation: https://webpack.js.org/api/cli/. Made with ♥ by the webpack team." `; -exports[`help should show help information using the "help --mode" option: stdout 2`] = ` -"Usage: webpack --mode -Description: Defines the mode to pass to webpack. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information using the "help --no-color" option: stderr 1`] = `""`; exports[`help should show help information using the "help --no-color" option: stdout 1`] = ` diff --git a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 index e76d76b08b9..4c63b5668c1 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 +++ b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 @@ -2699,8 +2699,6 @@ Made with ♥ by the webpack team." exports[`help should show help information using the "help --mode" option: stderr 1`] = `""`; -exports[`help should show help information using the "help --mode" option: stderr 2`] = `""`; - exports[`help should show help information using the "help --mode" option: stdout 1`] = ` "Usage: webpack --mode Description: Defines the mode to pass to webpack. @@ -2713,18 +2711,6 @@ CLI documentation: https://webpack.js.org/api/cli/. Made with ♥ by the webpack team." `; -exports[`help should show help information using the "help --mode" option: stdout 2`] = ` -"Usage: webpack --mode -Description: Defines the mode to pass to webpack. -Possible values: \\"development | production | none\\" - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information using the "help --no-color" option: stderr 1`] = `""`; exports[`help should show help information using the "help --no-color" option: stdout 1`] = ` diff --git a/test/help/help.test.js b/test/help/help.test.js index f7f556bcf8e..d619daf897a 100644 --- a/test/help/help.test.js +++ b/test/help/help.test.js @@ -262,14 +262,6 @@ describe("help", () => { expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); }); - it('should show help information using the "help --mode" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--mode"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - it('should show help information using the "help serve --mode" option', async () => { const { exitCode, stderr, stdout } = await run(__dirname, ["help", "serve", "--mode"]); From cc85b073d20f811f810a7a18d73e08b3fc9ecc99 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jul 2021 12:31:46 +0300 Subject: [PATCH 050/173] chore(deps-dev): bump webpack from 5.43.0 to 5.44.0 (#2826) Bumps [webpack](https://github.com/webpack/webpack) from 5.43.0 to 5.44.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.43.0...v5.44.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 50 ++++++++------------------------------------------ 1 file changed, 8 insertions(+), 42 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9c592dd99de..2e76cb3523b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1847,10 +1847,10 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^0.0.49": - version "0.0.49" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.49.tgz#3facb98ebcd4114a4ecef74e0de2175b56fd4464" - integrity sha512-K1AFuMe8a+pXmfHTtnwBvqoEylNKVeaiKYkjmcEAdytMQVJ/i9Fu7sc13GxgXdO49gkE7Hy8SyJonUZUn+eVaw== +"@types/estree@*", "@types/estree@^0.0.50": + version "0.0.50" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" + integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== "@types/expect@^1.20.4": version "1.20.4" @@ -2085,14 +2085,6 @@ "@typescript-eslint/typescript-estree" "4.28.2" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.1.tgz#fd3c20627cdc12933f6d98b386940d8d0ce8a991" - integrity sha512-o95bvGKfss6705x7jFGDyS7trAORTy57lwJ+VsYwil/lOUxKQ9tA7Suuq+ciMhJc/1qPwB3XE2DKh9wubW8YYA== - dependencies: - "@typescript-eslint/types" "4.28.1" - "@typescript-eslint/visitor-keys" "4.28.1" - "@typescript-eslint/scope-manager@4.28.2": version "4.28.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.2.tgz#451dce90303a3ce283750111495d34c9c204e510" @@ -2101,29 +2093,11 @@ "@typescript-eslint/types" "4.28.2" "@typescript-eslint/visitor-keys" "4.28.2" -"@typescript-eslint/types@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.1.tgz#d0f2ecbef3684634db357b9bbfc97b94b828f83f" - integrity sha512-4z+knEihcyX7blAGi7O3Fm3O6YRCP+r56NJFMNGsmtdw+NCdpG5SgNz427LS9nQkRVTswZLhz484hakQwB8RRg== - "@typescript-eslint/types@4.28.2": version "4.28.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.2.tgz#e6b9e234e0e9a66c4d25bab881661e91478223b5" integrity sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA== -"@typescript-eslint/typescript-estree@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz#af882ae41740d1f268e38b4d0fad21e7e8d86a81" - integrity sha512-GhKxmC4sHXxHGJv8e8egAZeTZ6HI4mLU6S7FUzvFOtsk7ZIDN1ksA9r9DyOgNqowA9yAtZXV0Uiap61bIO81FQ== - dependencies: - "@typescript-eslint/types" "4.28.1" - "@typescript-eslint/visitor-keys" "4.28.1" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.28.2": version "4.28.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz#680129b2a285289a15e7c6108c84739adf3a798c" @@ -2137,14 +2111,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz#162a515ee255f18a6068edc26df793cdc1ec9157" - integrity sha512-K4HMrdFqr9PFquPu178SaSb92CaWe2yErXyPumc8cYWxFmhgJsNY9eSePmO05j0JhBvf2Cdhptd6E6Yv9HVHcg== - dependencies: - "@typescript-eslint/types" "4.28.1" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.28.2": version "4.28.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz#bf56a400857bb68b59b311e6d0a5fbef5c3b5130" @@ -11059,12 +11025,12 @@ webpack-sources@^2.3.0: source-map "^0.6.1" webpack@^5.41.0: - version "5.43.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.43.0.tgz#36a122d6e9bac3836273857f56ed7801d40c9145" - integrity sha512-ex3nB9uxNI0azzb0r3xGwi+LS5Gw1RCRSKk0kg3kq9MYdIPmLS6UI3oEtG7esBaB51t9I+5H+vHmL3htaxqMSw== + version "5.44.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.44.0.tgz#97b13a02bd79fb71ac6301ce697920660fa214a1" + integrity sha512-I1S1w4QLoKmH19pX6YhYN0NiSXaWY8Ou00oA+aMcr9IUGeF5azns+IKBkfoAAG9Bu5zOIzZt/mN35OffBya8AQ== dependencies: "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.49" + "@types/estree" "^0.0.50" "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" From 0fa5b7022e281594967a6469078874e6b774a9db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jul 2021 12:32:53 +0300 Subject: [PATCH 051/173] chore(deps-dev): bump @types/node --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2e76cb3523b..016bc06d2ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1955,9 +1955,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@^15.0.3": - version "15.14.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.1.tgz#4f9d3689532499fdda1c898e19f4593718655e36" - integrity sha512-wF6hazbsnwaW3GhK4jFuw5NaLDQVRQ6pWQUGAUrJzxixFkTaODSiAKMPXuHwPEPkAKQWHAzj6uJ5h+3zU9gQxg== + version "15.14.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.2.tgz#7af8ab20156586f076f4760bc1b3c5ddfffd1ff2" + integrity sha512-dvMUE/m2LbXPwlvVuzCyslTEtQ2ZwuuFClDrOQ6mp2CenCg971719PTILZ4I6bTP27xfFFc+o7x2TkLuun/MPw== "@types/normalize-package-data@^2.4.0": version "2.4.0" From 690c122feb942ea9022347e2a9cf033d92f31056 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Mon, 12 Jul 2021 21:13:35 +0530 Subject: [PATCH 052/173] docs: update (#2828) --- OPTIONS.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/OPTIONS.md b/OPTIONS.md index 1af9b634637..c03635a100a 100644 --- a/OPTIONS.md +++ b/OPTIONS.md @@ -29,6 +29,8 @@ Options: --no-cache-allow-collecting-memory Negative 'cache-allow-collecting-memory' option. --cache-cache-directory Base directory for the cache (defaults to node_modules/.cache/webpack). --cache-cache-location Locations for the cache (defaults to cacheDirectory / name). + --cache-compression Compression type used for the cache files. + --no-cache-compression Negative 'cache-compression' option. --cache-hash-algorithm Algorithm used for generation the hash (see node.js crypto package). --cache-idle-timeout Time in ms after which idle period the cache storing should happen. --cache-idle-timeout-after-large-changes Time in ms after which idle period the cache storing should happen when larger changes has been detected (cumulative @@ -556,12 +558,12 @@ Options: --output-chunk-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to determine the location on disk. - --output-chunk-format The format of chunks (formats included by default are 'array-push' (web/WebWorker), 'commonjs' (node.js), but others - might be added by plugins). + --output-chunk-format The format of chunks (formats included by default are 'array-push' (web/WebWorker), 'commonjs' (node.js), 'module' + (ESM), but others might be added by plugins). --no-output-chunk-format Negative 'output-chunk-format' option. --output-chunk-load-timeout Number of milliseconds before chunk request expires. - --output-chunk-loading The method of loading chunks (methods included by default are 'jsonp' (web), 'importScripts' (WebWorker), 'require' - (sync node.js), 'async-node' (async node.js), but others might be added by plugins). + --output-chunk-loading The method of loading chunks (methods included by default are 'jsonp' (web), 'import' (ESM), 'importScripts' + (WebWorker), 'require' (sync node.js), 'async-node' (async node.js), but others might be added by plugins). --no-output-chunk-loading Negative 'output-chunk-loading' option. --output-chunk-loading-global The global variable used by webpack for loading of chunks. --output-clean Clean the output directory before emit. @@ -578,8 +580,8 @@ Options: --output-devtool-namespace Module namespace to use when interpolating filename template string for the sources array in a generated SourceMap. Defaults to `output.library` if not set. It's useful for avoiding runtime collisions in sourcemaps from multiple webpack projects built as libraries. - --output-enabled-chunk-loading-types The method of loading chunks (methods included by default are 'jsonp' (web), 'importScripts' (WebWorker), 'require' - (sync node.js), 'async-node' (async node.js), but others might be added by plugins). + --output-enabled-chunk-loading-types The method of loading chunks (methods included by default are 'jsonp' (web), 'import' (ESM), 'importScripts' + (WebWorker), 'require' (sync node.js), 'async-node' (async node.js), but others might be added by plugins). --output-enabled-chunk-loading-types-reset Clear all items provided in 'output.enabledChunkLoadingTypes' configuration. List of chunk loading types enabled for use by entry points. --output-enabled-library-types Type of library (types included by default are 'var', 'module', 'assign', 'assign-properties', 'this', 'window', @@ -672,8 +674,8 @@ Options: (node.js), but others might be added by plugins). --no-output-wasm-loading Negative 'output-wasm-loading' option. --output-webassembly-module-filename The filename of WebAssembly modules as relative path inside the 'output.path' directory. - --output-worker-chunk-loading The method of loading chunks (methods included by default are 'jsonp' (web), 'importScripts' (WebWorker), 'require' - (sync node.js), 'async-node' (async node.js), but others might be added by plugins). + --output-worker-chunk-loading The method of loading chunks (methods included by default are 'jsonp' (web), 'import' (ESM), 'importScripts' + (WebWorker), 'require' (sync node.js), 'async-node' (async node.js), but others might be added by plugins). --no-output-worker-chunk-loading Negative 'output-worker-chunk-loading' option. --output-worker-wasm-loading The method of loading WebAssembly Modules (methods included by default are 'fetch' (web/WebWorker), 'async-node' (node.js), but others might be added by plugins). From 098b1856d89c06c14b0153a42c45b8ae7cf2e4e1 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Tue, 13 Jul 2021 15:07:47 +0530 Subject: [PATCH 053/173] ci: use actions/setup-node@v2 (#2829) --- .github/workflows/nodejs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index ddeb6e45a76..a42fed46799 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -30,7 +30,7 @@ jobs: - uses: actions/checkout@v2 - name: Using Node v${{ matrix.node-version }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} @@ -67,7 +67,7 @@ jobs: fetch-depth: 0 - name: Using Node v${{ matrix.node-version }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} From d4315ce077f07fd7d48671cf2bcda719e66f951f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Jul 2021 12:40:19 +0300 Subject: [PATCH 054/173] chore(deps-dev): bump @typescript-eslint/parser --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 016bc06d2ee..38790542fe1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2076,13 +2076,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.28.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.2.tgz#6aff11bf4b91eb67ca7517962eede951e9e2a15d" - integrity sha512-Q0gSCN51eikAgFGY+gnd5p9bhhCUAl0ERMiDKrTzpSoMYRubdB8MJrTTR/BBii8z+iFwz8oihxd0RAdP4l8w8w== + version "4.28.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.3.tgz#95f1d475c08268edffdcb2779993c488b6434b44" + integrity sha512-ZyWEn34bJexn/JNYvLQab0Mo5e+qqQNhknxmc8azgNd4XqspVYR5oHq9O11fLwdZMRcj4by15ghSlIEq+H5ltQ== dependencies: - "@typescript-eslint/scope-manager" "4.28.2" - "@typescript-eslint/types" "4.28.2" - "@typescript-eslint/typescript-estree" "4.28.2" + "@typescript-eslint/scope-manager" "4.28.3" + "@typescript-eslint/types" "4.28.3" + "@typescript-eslint/typescript-estree" "4.28.3" debug "^4.3.1" "@typescript-eslint/scope-manager@4.28.2": @@ -2093,11 +2093,24 @@ "@typescript-eslint/types" "4.28.2" "@typescript-eslint/visitor-keys" "4.28.2" +"@typescript-eslint/scope-manager@4.28.3": + version "4.28.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.3.tgz#c32ad4491b3726db1ba34030b59ea922c214e371" + integrity sha512-/8lMisZ5NGIzGtJB+QizQ5eX4Xd8uxedFfMBXOKuJGP0oaBBVEMbJVddQKDXyyB0bPlmt8i6bHV89KbwOelJiQ== + dependencies: + "@typescript-eslint/types" "4.28.3" + "@typescript-eslint/visitor-keys" "4.28.3" + "@typescript-eslint/types@4.28.2": version "4.28.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.2.tgz#e6b9e234e0e9a66c4d25bab881661e91478223b5" integrity sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA== +"@typescript-eslint/types@4.28.3": + version "4.28.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.3.tgz#8fffd436a3bada422c2c1da56060a0566a9506c7" + integrity sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA== + "@typescript-eslint/typescript-estree@4.28.2": version "4.28.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz#680129b2a285289a15e7c6108c84739adf3a798c" @@ -2111,6 +2124,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.28.3": + version "4.28.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.3.tgz#253d7088100b2a38aefe3c8dd7bd1f8232ec46fb" + integrity sha512-YAb1JED41kJsqCQt1NcnX5ZdTA93vKFCMP4lQYG6CFxd0VzDJcKttRlMrlG+1qiWAw8+zowmHU1H0OzjWJzR2w== + dependencies: + "@typescript-eslint/types" "4.28.3" + "@typescript-eslint/visitor-keys" "4.28.3" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.28.2": version "4.28.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz#bf56a400857bb68b59b311e6d0a5fbef5c3b5130" @@ -2119,6 +2145,14 @@ "@typescript-eslint/types" "4.28.2" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.28.3": + version "4.28.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.3.tgz#26ac91e84b23529968361045829da80a4e5251c4" + integrity sha512-ri1OzcLnk1HH4gORmr1dllxDzzrN6goUIz/P4MHFV0YZJDCADPR3RvYNp0PW2SetKTThar6wlbFTL00hV2Q+fg== + dependencies: + "@typescript-eslint/types" "4.28.3" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From 2d8c77f662a5a9741a87d70de476499d94523b49 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Jul 2021 22:47:11 +0300 Subject: [PATCH 055/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin (#2831) --- yarn.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index 38790542fe1..cbaed4524d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2051,27 +2051,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.28.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.2.tgz#7a8320f00141666813d0ae43b49ee8244f7cf92a" - integrity sha512-PGqpLLzHSxq956rzNGasO3GsAPf2lY9lDUBXhS++SKonglUmJypaUtcKzRtUte8CV7nruwnDxtLUKpVxs0wQBw== + version "4.28.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.3.tgz#36cdcd9ca6f9e5cb49b9f61b970b1976708d084b" + integrity sha512-jW8sEFu1ZeaV8xzwsfi6Vgtty2jf7/lJmQmDkDruBjYAbx5DA8JtbcMnP0rNPUG+oH5GoQBTSp+9613BzuIpYg== dependencies: - "@typescript-eslint/experimental-utils" "4.28.2" - "@typescript-eslint/scope-manager" "4.28.2" + "@typescript-eslint/experimental-utils" "4.28.3" + "@typescript-eslint/scope-manager" "4.28.3" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.28.2": - version "4.28.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.2.tgz#4ebdec06a10888e9326e1d51d81ad52a361bd0b0" - integrity sha512-MwHPsL6qo98RC55IoWWP8/opTykjTp4JzfPu1VfO2Z0MshNP0UZ1GEV5rYSSnZSUI8VD7iHvtIPVGW5Nfh7klQ== +"@typescript-eslint/experimental-utils@4.28.3": + version "4.28.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.3.tgz#976f8c1191b37105fd06658ed57ddfee4be361ca" + integrity sha512-zZYl9TnrxwEPi3FbyeX0ZnE8Hp7j3OCR+ELoUfbwGHGxWnHg9+OqSmkw2MoCVpZksPCZYpQzC559Ee9pJNHTQw== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.28.2" - "@typescript-eslint/types" "4.28.2" - "@typescript-eslint/typescript-estree" "4.28.2" + "@typescript-eslint/scope-manager" "4.28.3" + "@typescript-eslint/types" "4.28.3" + "@typescript-eslint/typescript-estree" "4.28.3" eslint-scope "^5.1.1" eslint-utils "^3.0.0" From 0d8d832d25083b69593f6af53dd74ec9c5c0fa84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Jul 2021 22:47:27 +0300 Subject: [PATCH 056/173] chore(deps-dev): bump @types/jest --- yarn.lock | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index cbaed4524d0..84cf5fd8f55 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1905,9 +1905,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^26.0.15": - version "26.0.23" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.23.tgz#a1b7eab3c503b80451d019efb588ec63522ee4e7" - integrity sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA== + version "26.0.24" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" + integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== dependencies: jest-diff "^26.0.0" pretty-format "^26.0.0" @@ -8857,17 +8857,7 @@ pretty-format@^26.0.0, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.1.tgz#c4094621dfbd3e8ab751964d1cf01edc6f88474d" - integrity sha512-qE+0J6c/gd+R6XTcQgPJMc5hMJNsxzSF5p8iZSbMZ7GQzYGlSLNkh2P80Wa2dbF4gEVUsJEgcrBY+1L2/j265w== - dependencies: - "@jest/types" "^27.0.1" - ansi-regex "^5.0.0" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -pretty-format@^27.0.6: +pretty-format@^27.0.1, pretty-format@^27.0.6: version "27.0.6" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.6.tgz#ab770c47b2c6f893a21aefc57b75da63ef49a11f" integrity sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ== From 7f50948bb984821449277d6b5632b98a695eb029 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Thu, 15 Jul 2021 09:31:52 +0530 Subject: [PATCH 057/173] fix: show default value in help output if available (#2814) * fix: show default value in help output if available * test: add --- packages/webpack-cli/lib/webpack-cli.js | 2 +- test/api/CLI.test.js | 30 ++++++++++++++++++ .../__snapshots__/CLI.test.js.snap.webpack4 | 31 +++++++++++++++++++ .../__snapshots__/CLI.test.js.snap.webpack5 | 31 +++++++++++++++++++ 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 test/api/__snapshots__/CLI.test.js.snap.webpack4 create mode 100644 test/api/__snapshots__/CLI.test.js.snap.webpack5 diff --git a/packages/webpack-cli/lib/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index e8f7b0a3146..14d2294638e 100644 --- a/packages/webpack-cli/lib/webpack-cli.js +++ b/packages/webpack-cli/lib/webpack-cli.js @@ -1357,7 +1357,7 @@ class WebpackCLI { this.logger.raw(`${bold("Description:")} ${option.description}`); } - if (!option.negate && options.defaultValue) { + if (!option.negate && option.defaultValue) { this.logger.raw( `${bold("Default value:")} ${JSON.stringify(option.defaultValue)}`, ); diff --git a/test/api/CLI.test.js b/test/api/CLI.test.js index b785fa4f90a..0896c989deb 100644 --- a/test/api/CLI.test.js +++ b/test/api/CLI.test.js @@ -1699,4 +1699,34 @@ describe("CLI API", () => { expect(command.helpInformation()).toContain("--no-boolean Negated description"); }); }); + + describe("custom help output", () => { + let consoleSpy; + let exitSpy; + + beforeEach(async () => { + consoleSpy = jest.spyOn(global.console, "log"); + exitSpy = jest.spyOn(process, "exit").mockImplementation(() => {}); + + cli.program.option("--color [value]", "any color", "blue"); + await new Promise((resolve, reject) => { + try { + cli.run(["help", "--color"], { from: "user" }); + resolve(); + } catch (error) { + reject(error); + } + }); + }); + + afterEach(async () => { + consoleSpy.mockRestore(); + exitSpy.mockRestore(); + }); + + it("should display help information", () => { + expect(exitSpy).toHaveBeenCalledWith(0); + expect(consoleSpy.mock.calls).toMatchSnapshot(); + }); + }); }); diff --git a/test/api/__snapshots__/CLI.test.js.snap.webpack4 b/test/api/__snapshots__/CLI.test.js.snap.webpack4 new file mode 100644 index 00000000000..50607abaa35 --- /dev/null +++ b/test/api/__snapshots__/CLI.test.js.snap.webpack4 @@ -0,0 +1,31 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CLI API custom help output should display help information 1`] = ` +Array [ + Array [ + "Usage: webpack --color [value]", + ], + Array [ + "Description: any color", + ], + Array [ + "Default value: \\"blue\\"", + ], + Array [ + "", + ], + Array [ + "To see list of all supported commands and options run 'webpack --help=verbose'. +", + ], + Array [ + "Webpack documentation: https://webpack.js.org/.", + ], + Array [ + "CLI documentation: https://webpack.js.org/api/cli/.", + ], + Array [ + "Made with ♥ by the webpack team.", + ], +] +`; diff --git a/test/api/__snapshots__/CLI.test.js.snap.webpack5 b/test/api/__snapshots__/CLI.test.js.snap.webpack5 new file mode 100644 index 00000000000..50607abaa35 --- /dev/null +++ b/test/api/__snapshots__/CLI.test.js.snap.webpack5 @@ -0,0 +1,31 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CLI API custom help output should display help information 1`] = ` +Array [ + Array [ + "Usage: webpack --color [value]", + ], + Array [ + "Description: any color", + ], + Array [ + "Default value: \\"blue\\"", + ], + Array [ + "", + ], + Array [ + "To see list of all supported commands and options run 'webpack --help=verbose'. +", + ], + Array [ + "Webpack documentation: https://webpack.js.org/.", + ], + Array [ + "CLI documentation: https://webpack.js.org/api/cli/.", + ], + Array [ + "Made with ♥ by the webpack team.", + ], +] +`; From 7470b0930e78eac6d60532039b2c2ab16bf97966 Mon Sep 17 00:00:00 2001 From: Anshuman Verma Date: Mon, 19 Jul 2021 13:18:18 +0530 Subject: [PATCH 058/173] chore: upgrade webpack (#2838) --- package.json | 2 +- .../target-flag.test.js.snap.webpack5 | 2 +- yarn.lock | 53 +++++-------------- 3 files changed, 16 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index 19ddc59dab5..82347c0b686 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "ts-jest": "^27.0.2", "ts-node": "^9.1.1", "typescript": "^4.1.3", - "webpack": "^5.41.0", + "webpack": "^5.45.1", "webpack-bundle-analyzer": "^4.3.0", "webpack-dev-server": "^3.11.2" } diff --git a/test/build/target/flag-test/__snapshots__/target-flag.test.js.snap.webpack5 b/test/build/target/flag-test/__snapshots__/target-flag.test.js.snap.webpack5 index b94d836067f..cc162eb7d7b 100644 --- a/test/build/target/flag-test/__snapshots__/target-flag.test.js.snap.webpack5 +++ b/test/build/target/flag-test/__snapshots__/target-flag.test.js.snap.webpack5 @@ -28,7 +28,7 @@ exports[`--target flag should throw an error for invalid target in multiple synt exports[`--target flag should throw error if target is an empty array: stderr 1`] = ` "[webpack-cli] Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema. - - configuration.target should be an non-empty array." + - configuration.target should be a non-empty array." `; exports[`--target flag should throw error if target is an empty array: stdout 1`] = `""`; diff --git a/yarn.lock b/yarn.lock index 84cf5fd8f55..01d8df9118a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2085,14 +2085,6 @@ "@typescript-eslint/typescript-estree" "4.28.3" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.28.2": - version "4.28.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.2.tgz#451dce90303a3ce283750111495d34c9c204e510" - integrity sha512-MqbypNjIkJFEFuOwPWNDjq0nqXAKZvDNNs9yNseoGBB1wYfz1G0WHC2AVOy4XD7di3KCcW3+nhZyN6zruqmp2A== - dependencies: - "@typescript-eslint/types" "4.28.2" - "@typescript-eslint/visitor-keys" "4.28.2" - "@typescript-eslint/scope-manager@4.28.3": version "4.28.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.3.tgz#c32ad4491b3726db1ba34030b59ea922c214e371" @@ -2101,29 +2093,11 @@ "@typescript-eslint/types" "4.28.3" "@typescript-eslint/visitor-keys" "4.28.3" -"@typescript-eslint/types@4.28.2": - version "4.28.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.2.tgz#e6b9e234e0e9a66c4d25bab881661e91478223b5" - integrity sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA== - "@typescript-eslint/types@4.28.3": version "4.28.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.3.tgz#8fffd436a3bada422c2c1da56060a0566a9506c7" integrity sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA== -"@typescript-eslint/typescript-estree@4.28.2": - version "4.28.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz#680129b2a285289a15e7c6108c84739adf3a798c" - integrity sha512-86lLstLvK6QjNZjMoYUBMMsULFw0hPHJlk1fzhAVoNjDBuPVxiwvGuPQq3fsBMCxuDJwmX87tM/AXoadhHRljg== - dependencies: - "@typescript-eslint/types" "4.28.2" - "@typescript-eslint/visitor-keys" "4.28.2" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.28.3": version "4.28.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.3.tgz#253d7088100b2a38aefe3c8dd7bd1f8232ec46fb" @@ -2137,14 +2111,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.28.2": - version "4.28.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz#bf56a400857bb68b59b311e6d0a5fbef5c3b5130" - integrity sha512-aT2B4PLyyRDUVUafXzpZFoc0C9t0za4BJAKP5sgWIhG+jHECQZUEjuQSCIwZdiJJ4w4cgu5r3Kh20SOdtEBl0w== - dependencies: - "@typescript-eslint/types" "4.28.2" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.28.3": version "4.28.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.3.tgz#26ac91e84b23529968361045829da80a4e5251c4" @@ -9529,6 +9495,15 @@ schema-utils@^3.0.0: ajv "^6.12.5" ajv-keywords "^3.5.2" +schema-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.0.tgz#95986eb604f66daadeed56e379bfe7a7f963cdb9" + integrity sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w== + dependencies: + "@types/json-schema" "^7.0.7" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + scoped-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8" @@ -11048,10 +11023,10 @@ webpack-sources@^2.3.0: source-list-map "^2.0.1" source-map "^0.6.1" -webpack@^5.41.0: - version "5.44.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.44.0.tgz#97b13a02bd79fb71ac6301ce697920660fa214a1" - integrity sha512-I1S1w4QLoKmH19pX6YhYN0NiSXaWY8Ou00oA+aMcr9IUGeF5azns+IKBkfoAAG9Bu5zOIzZt/mN35OffBya8AQ== +webpack@^5.45.1: + version "5.45.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.45.1.tgz#d78dcbeda18a872dc62b0455d3ed3dcfd1c886bb" + integrity sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" @@ -11071,7 +11046,7 @@ webpack@^5.41.0: loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.0.0" + schema-utils "^3.1.0" tapable "^2.1.1" terser-webpack-plugin "^5.1.3" watchpack "^2.2.0" From d820873776d5c1e93a0c797ff963c25cdf986cc7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jul 2021 14:20:46 +0300 Subject: [PATCH 059/173] chore(deps-dev): bump eslint from 7.30.0 to 7.31.0 (#2837) Bumps [eslint](https://github.com/eslint/eslint) from 7.30.0 to 7.31.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.30.0...v7.31.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 01d8df9118a..13aac9d841a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -592,10 +592,10 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== -"@eslint/eslintrc@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" - integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -4349,12 +4349,12 @@ eslint-visitor-keys@^2.0.0: integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint@^7.12.1: - version "7.30.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.30.0.tgz#6d34ab51aaa56112fd97166226c9a97f505474f8" - integrity sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg== + version "7.31.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.31.0.tgz#f972b539424bf2604907a970860732c5d99d3aca" + integrity sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA== dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.2" + "@eslint/eslintrc" "^0.4.3" "@humanwhocodes/config-array" "^0.5.0" ajv "^6.10.0" chalk "^4.0.0" From 54d34b723cbeaf8cc13cff45398530be1db911e4 Mon Sep 17 00:00:00 2001 From: Anshuman Verma Date: Wed, 21 Jul 2021 16:55:50 +0530 Subject: [PATCH 060/173] fix: ci for dev server next (#2841) --- packages/serve/src/index.ts | 3 +- .../help.test.js.snap.devServer4.webpack4 | 704 ----------------- .../help.test.js.snap.devServer4.webpack5 | 712 ------------------ test/help/help.test.js | 51 +- ...rve-basic.test.js.snap.devServer3.webpack4 | 70 -- ...rve-basic.test.js.snap.devServer3.webpack5 | 71 -- ...rve-basic.test.js.snap.devServer4.webpack4 | 83 -- ...rve-basic.test.js.snap.devServer4.webpack5 | 84 --- test/serve/basic/serve-basic.test.js | 8 - ...id-schema.test.js.snap.devServer4.webpack4 | 14 +- ...id-schema.test.js.snap.devServer4.webpack5 | 14 +- test/utils/test-utils.js | 16 +- 12 files changed, 73 insertions(+), 1757 deletions(-) diff --git a/packages/serve/src/index.ts b/packages/serve/src/index.ts index d310cc4f01b..3149222ed9d 100644 --- a/packages/serve/src/index.ts +++ b/packages/serve/src/index.ts @@ -174,7 +174,8 @@ class ServeCommand { } return accumulator; }, {}); - const result = Object.assign({}, compiler.options.devServer); + // TODO fix compatibility with multi compiler mode + const result = Object.assign({}, (compiler.options || {}).devServer); const problems = ( webpack.cli && typeof webpack.cli.processArguments === "function" ? webpack.cli diff --git a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 index ffa57fa8bbf..8e6d3c6e502 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 +++ b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 @@ -1517,724 +1517,20 @@ Made with ♥ by the webpack team." exports[`help should show help information for 's' command using command syntax: stderr 1`] = `""`; -exports[`help should show help information for 's' command using command syntax: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - --entry The entry point(s) of your application e.g. ./src/main.js. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - -t, --target Sets the build target e.g. node. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 's' command using the "--help" option: stderr 1`] = `""`; -exports[`help should show help information for 's' command using the "--help" option: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - --entry The entry point(s) of your application e.g. ./src/main.js. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - -t, --target Sets the build target e.g. node. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 'serve' and respect the "--color" flag using the "--help" option: stderr 1`] = `""`; -exports[`help should show help information for 'serve' and respect the "--color" flag using the "--help" option: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file - e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using - 'webpack-merge'. - --env Environment passed to the configuration when - it is a function. - --node-env Sets process.env.NODE_ENV to the specified - value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - --entry The entry point(s) of your application e.g. - ./src/main.js. - -o, --output-path Output location of the file generated by - webpack e.g. ./dist/. - -t, --target Sets the build target e.g. node. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading - multiple configurations. - --stats [value] It instructs webpack on how to treat the - stats e.g. verbose. - --no-stats Disable stats output. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has - ended. - --host The hostname/ip address the server will bind - to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the - browser under this path. - --static-serve-index Tells dev-server to use serveIndex - middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex - middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content - directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf - networking on start. - --no-bonjour Do not broadcast the server via ZeroConf - networking on start. - --client-progress Print compilation progress in percentage in - the browser. - --no-client-progress Do not print compilation progress in - percentage in the browser. - --client-overlay Show a full-screen overlay in the browser - when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the - browser when there are compiler errors or - warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, - info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page - Applications. - --no-history-api-fallback Do not fallback to /index.html for Single - Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the - server. - --firewall [value...] Enable firewall or set hosts that are - allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', - 'webpack-cli' and 'webpack-dev-server' and - commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 'serve' and respect the "--no-color" flag using the "--help" option: stderr 1`] = `""`; -exports[`help should show help information for 'serve' and respect the "--no-color" flag using the "--help" option: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file - e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using - 'webpack-merge'. - --env Environment passed to the configuration when - it is a function. - --node-env Sets process.env.NODE_ENV to the specified - value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - --entry The entry point(s) of your application e.g. - ./src/main.js. - -o, --output-path Output location of the file generated by - webpack e.g. ./dist/. - -t, --target Sets the build target e.g. node. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading - multiple configurations. - --stats [value] It instructs webpack on how to treat the - stats e.g. verbose. - --no-stats Disable stats output. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has - ended. - --host The hostname/ip address the server will bind - to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the - browser under this path. - --static-serve-index Tells dev-server to use serveIndex - middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex - middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content - directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf - networking on start. - --no-bonjour Do not broadcast the server via ZeroConf - networking on start. - --client-progress Print compilation progress in percentage in - the browser. - --no-client-progress Do not print compilation progress in - percentage in the browser. - --client-overlay Show a full-screen overlay in the browser - when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the - browser when there are compiler errors or - warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, - info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page - Applications. - --no-history-api-fallback Do not fallback to /index.html for Single - Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the - server. - --firewall [value...] Enable firewall or set hosts that are - allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', - 'webpack-cli' and 'webpack-dev-server' and - commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 'serve' command using command syntax: stderr 1`] = `""`; -exports[`help should show help information for 'serve' command using command syntax: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - --entry The entry point(s) of your application e.g. ./src/main.js. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - -t, --target Sets the build target e.g. node. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 'serve' command using the "--help" option: stderr 1`] = `""`; -exports[`help should show help information for 'serve' command using the "--help" option: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - --entry The entry point(s) of your application e.g. ./src/main.js. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - -t, --target Sets the build target e.g. node. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 'server' command using command syntax: stderr 1`] = `""`; -exports[`help should show help information for 'server' command using command syntax: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - --entry The entry point(s) of your application e.g. ./src/main.js. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - -t, --target Sets the build target e.g. node. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 'server' command using the "--help" option: stderr 1`] = `""`; -exports[`help should show help information for 'server' command using the "--help" option: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - --entry The entry point(s) of your application e.g. ./src/main.js. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - -t, --target Sets the build target e.g. node. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 't' command using command syntax: stderr 1`] = `""`; exports[`help should show help information for 't' command using command syntax: stdout 1`] = ` diff --git a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 index 4c63b5668c1..56259dec98e 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 +++ b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 @@ -1526,732 +1526,20 @@ Made with ♥ by the webpack team." exports[`help should show help information for 's' command using command syntax: stderr 1`] = `""`; -exports[`help should show help information for 's' command using command syntax: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --entry The entry point(s) of your application e.g. ./src/main.js. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - -t, --target Sets the build target e.g. node. - --no-target Negative 'target' option. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 's' command using the "--help" option: stderr 1`] = `""`; -exports[`help should show help information for 's' command using the "--help" option: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --entry The entry point(s) of your application e.g. ./src/main.js. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - -t, --target Sets the build target e.g. node. - --no-target Negative 'target' option. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 'serve' and respect the "--color" flag using the "--help" option: stderr 1`] = `""`; -exports[`help should show help information for 'serve' and respect the "--color" flag using the "--help" option: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file - e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using - 'webpack-merge'. - --env Environment passed to the configuration when - it is a function. - --node-env Sets process.env.NODE_ENV to the specified - value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --entry The entry point(s) of your application e.g. - ./src/main.js. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading - multiple configurations. - -o, --output-path Output location of the file generated by - webpack e.g. ./dist/. - --stats [value] It instructs webpack on how to treat the - stats e.g. verbose. - --no-stats Disable stats output. - -t, --target Sets the build target e.g. node. - --no-target Negative 'target' option. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has - ended. - --host The hostname/ip address the server will bind - to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the - browser under this path. - --static-serve-index Tells dev-server to use serveIndex - middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex - middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content - directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf - networking on start. - --no-bonjour Do not broadcast the server via ZeroConf - networking on start. - --client-progress Print compilation progress in percentage in - the browser. - --no-client-progress Do not print compilation progress in - percentage in the browser. - --client-overlay Show a full-screen overlay in the browser - when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the - browser when there are compiler errors or - warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, - info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page - Applications. - --no-history-api-fallback Do not fallback to /index.html for Single - Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the - server. - --firewall [value...] Enable firewall or set hosts that are - allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', - 'webpack-cli' and 'webpack-dev-server' and - commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 'serve' and respect the "--no-color" flag using the "--help" option: stderr 1`] = `""`; -exports[`help should show help information for 'serve' and respect the "--no-color" flag using the "--help" option: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file - e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using - 'webpack-merge'. - --env Environment passed to the configuration when - it is a function. - --node-env Sets process.env.NODE_ENV to the specified - value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --entry The entry point(s) of your application e.g. - ./src/main.js. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading - multiple configurations. - -o, --output-path Output location of the file generated by - webpack e.g. ./dist/. - --stats [value] It instructs webpack on how to treat the - stats e.g. verbose. - --no-stats Disable stats output. - -t, --target Sets the build target e.g. node. - --no-target Negative 'target' option. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has - ended. - --host The hostname/ip address the server will bind - to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the - browser under this path. - --static-serve-index Tells dev-server to use serveIndex - middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex - middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content - directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf - networking on start. - --no-bonjour Do not broadcast the server via ZeroConf - networking on start. - --client-progress Print compilation progress in percentage in - the browser. - --no-client-progress Do not print compilation progress in - percentage in the browser. - --client-overlay Show a full-screen overlay in the browser - when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the - browser when there are compiler errors or - warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, - info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page - Applications. - --no-history-api-fallback Do not fallback to /index.html for Single - Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the - server. - --firewall [value...] Enable firewall or set hosts that are - allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', - 'webpack-cli' and 'webpack-dev-server' and - commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 'serve' command using command syntax: stderr 1`] = `""`; -exports[`help should show help information for 'serve' command using command syntax: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --entry The entry point(s) of your application e.g. ./src/main.js. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - -t, --target Sets the build target e.g. node. - --no-target Negative 'target' option. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 'serve' command using the "--help" option: stderr 1`] = `""`; -exports[`help should show help information for 'serve' command using the "--help" option: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --entry The entry point(s) of your application e.g. ./src/main.js. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - -t, --target Sets the build target e.g. node. - --no-target Negative 'target' option. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 'server' command using command syntax: stderr 1`] = `""`; -exports[`help should show help information for 'server' command using command syntax: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --entry The entry point(s) of your application e.g. ./src/main.js. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - -t, --target Sets the build target e.g. node. - --no-target Negative 'target' option. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 'server' command using the "--help" option: stderr 1`] = `""`; -exports[`help should show help information for 'server' command using the "--help" option: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --entry The entry point(s) of your application e.g. ./src/main.js. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - -t, --target Sets the build target e.g. node. - --no-target Negative 'target' option. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`help should show help information for 't' command using command syntax: stderr 1`] = `""`; exports[`help should show help information for 't' command using command syntax: stdout 1`] = ` diff --git a/test/help/help.test.js b/test/help/help.test.js index d619daf897a..ee29dcf5f32 100644 --- a/test/help/help.test.js +++ b/test/help/help.test.js @@ -1,6 +1,12 @@ "use strict"; -const { run, normalizeStderr, normalizeStdout, isWebpack5 } = require("../utils/test-utils"); +const { + run, + normalizeStderr, + normalizeStdout, + isWebpack5, + isDevServer4, +} = require("../utils/test-utils"); describe("help", () => { it('should show help information using the "--help" option', async () => { @@ -121,12 +127,18 @@ describe("help", () => { ]; commands.forEach(({ name, alias }) => { + // TODO fix it + const needSkip = name === "serve" && isDevServer4; + it(`should show help information for '${name}' command using the "--help" option`, async () => { const { exitCode, stderr, stdout } = await run(__dirname, [name, "--help"]); expect(exitCode).toBe(0); expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + + if (!needSkip) { + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } }); it.skip(`should show help information for '${name}' command using the "--help verbose" option`, async () => { @@ -134,7 +146,10 @@ describe("help", () => { expect(exitCode).toBe(0); expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + + if (!needSkip) { + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } }); it(`should show help information for '${name}' command using command syntax`, async () => { @@ -142,7 +157,10 @@ describe("help", () => { expect(exitCode).toBe(0); expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + + if (!needSkip) { + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } }); it(`should show help information for '${name}' and respect the "--color" flag using the "--help" option`, async () => { @@ -153,7 +171,10 @@ describe("help", () => { expect(exitCode).toBe(0); expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); expect(stdout).toContain("\x1b[1m"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + + if (!needSkip) { + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } }); it(`should show help information for '${name}' and respect the "--no-color" flag using the "--help" option`, async () => { @@ -166,7 +187,10 @@ describe("help", () => { expect(exitCode).toBe(0); expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); expect(stdout).not.toContain("\x1b[1m"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + + if (!needSkip) { + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } }); const alises = Array.isArray(alias) ? alias : [alias]; @@ -177,7 +201,10 @@ describe("help", () => { expect(exitCode).toBe(0); expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + + if (!needSkip) { + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } }); it.skip(`should show help information for '${alias}' command using the "--help verbose" option`, async () => { @@ -189,7 +216,10 @@ describe("help", () => { expect(exitCode).toBe(0); expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + + if (!needSkip) { + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } }); it(`should show help information for '${alias}' command using command syntax`, async () => { @@ -197,7 +227,10 @@ describe("help", () => { expect(exitCode).toBe(0); expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + + if (!needSkip) { + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } }); }); }); diff --git a/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer3.webpack4 b/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer3.webpack4 index e34efbf1bf6..19d8b4c21f7 100644 --- a/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer3.webpack4 +++ b/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer3.webpack4 @@ -36,76 +36,6 @@ exports[`basic serve usage should respect the "publicPath" option from configura exports[`basic serve usage should respect the "publicPath" option from configuration: stderr 1`] = `""`; -exports[`basic serve usage should shoe help information for serve: stderr 1`] = `""`; - -exports[`basic serve usage should shoe help information for serve: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - --entry The entry point(s) of your application e.g. ./src/main.js. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - -t, --target Sets the build target e.g. node. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --bonjour Broadcasts the server via ZeroConf networking on start - --lazy Lazy - --liveReload Enables/Disables live reloading on changing files - --serveIndex Enables/Disables serveIndex middleware - --inline Inline mode (set to false to disable including client scripts like livereload) - --profile Print compilation profile data for progress steps - --progress Print compilation progress in percentage - --hot-only Do not refresh page if HMR fails - --stdin close when stdin ends - --open [value] Open the default browser, or optionally specify a browser name - --useLocalIp Open default browser with local IP - --open-page Open default browser with the specified page - --client-log-level Log level in the browser (trace, debug, info, warn, error or silent) - --https HTTPS - --http2 HTTP/2, must be used with HTTPS - --key Path to a SSL key. - --cert Path to a SSL certificate. - --cacert Path to a SSL CA certificate. - --pfx Path to a SSL pfx file. - --pfx-passphrase Passphrase for pfx file. - --content-base A directory or URL to serve HTML content from. - --watch-content-base Enable live-reloading of the content-base. - --history-api-fallback Fallback to /index.html for Single Page Applications. - --compress Enable gzip compression - --port The port - --disable-host-check Will not check the host - --socket Socket to listen - --public The public hostname/ip address of the server - --host The hostname/ip address the server will bind to - --allowed-hosts A list of hosts that are allowed to access the dev server, separated by spaces - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`basic serve usage should throw error when same ports in multicompiler: stderr 1`] = ` "[webpack-cli] Error: Unique ports must be specified for each devServer option in your webpack configuration. Alternatively, run only 1 devServer config using the --config-name flag to specify your desired config. at stack" diff --git a/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer3.webpack5 b/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer3.webpack5 index 43d3cfed3a2..661825da41d 100644 --- a/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer3.webpack5 +++ b/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer3.webpack5 @@ -36,77 +36,6 @@ exports[`basic serve usage should respect the "publicPath" option from configura exports[`basic serve usage should respect the "publicPath" option from configuration: stderr 1`] = `""`; -exports[`basic serve usage should shoe help information for serve: stderr 1`] = `""`; - -exports[`basic serve usage should shoe help information for serve: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --entry The entry point(s) of your application e.g. ./src/main.js. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - -t, --target Sets the build target e.g. node. - --no-target Negative 'target' option. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --bonjour Broadcasts the server via ZeroConf networking on start - --lazy Lazy - --liveReload Enables/Disables live reloading on changing files - --serveIndex Enables/Disables serveIndex middleware - --inline Inline mode (set to false to disable including client scripts like livereload) - --profile Print compilation profile data for progress steps - --progress Print compilation progress in percentage - --hot-only Do not refresh page if HMR fails - --stdin close when stdin ends - --open [value] Open the default browser, or optionally specify a browser name - --useLocalIp Open default browser with local IP - --open-page Open default browser with the specified page - --client-log-level Log level in the browser (trace, debug, info, warn, error or silent) - --https HTTPS - --http2 HTTP/2, must be used with HTTPS - --key Path to a SSL key. - --cert Path to a SSL certificate. - --cacert Path to a SSL CA certificate. - --pfx Path to a SSL pfx file. - --pfx-passphrase Passphrase for pfx file. - --content-base A directory or URL to serve HTML content from. - --watch-content-base Enable live-reloading of the content-base. - --history-api-fallback Fallback to /index.html for Single Page Applications. - --compress Enable gzip compression - --port The port - --disable-host-check Will not check the host - --socket Socket to listen - --public The public hostname/ip address of the server - --host The hostname/ip address the server will bind to - --allowed-hosts A list of hosts that are allowed to access the dev server, separated by spaces - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`basic serve usage should throw error when same ports in multicompiler: stderr 1`] = ` "[webpack-cli] Error: Unique ports must be specified for each devServer option in your webpack configuration. Alternatively, run only 1 devServer config using the --config-name flag to specify your desired config. at stack" diff --git a/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack4 b/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack4 index 117e8e5580e..17bee54b7b5 100644 --- a/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack4 +++ b/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack4 @@ -66,89 +66,6 @@ exports[`basic serve usage should respect the "publicPath" option from configura [webpack-dev-server] Content not from webpack is served from '/test/serve/basic/public' directory" `; -exports[`basic serve usage should shoe help information for serve: stderr 1`] = `""`; - -exports[`basic serve usage should shoe help information for serve: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - --entry The entry point(s) of your application e.g. ./src/main.js. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - -t, --target Sets the build target e.g. node. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`basic serve usage should throw error when same ports in multicompiler: stderr 1`] = ` "[webpack-cli] Error: Unique ports must be specified for each devServer option in your webpack configuration. Alternatively, run only 1 devServer config using the --config-name flag to specify your desired config. at stack" diff --git a/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack5 b/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack5 index 1dd6fc728ee..628436d4780 100644 --- a/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack5 +++ b/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack5 @@ -66,90 +66,6 @@ exports[`basic serve usage should respect the "publicPath" option from configura [webpack-dev-server] Content not from webpack is served from '/test/serve/basic/public' directory" `; -exports[`basic serve usage should shoe help information for serve: stderr 1`] = `""`; - -exports[`basic serve usage should shoe help information for serve: stdout 1`] = ` -"Usage: webpack serve|server|s [entries...] [options] - -Run the webpack dev server. - -Options: - -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using 'webpack-merge'. - --env Environment passed to the configuration when it is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --entry The entry point(s) of your application e.g. ./src/main.js. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading multiple configurations. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. - --stats [value] It instructs webpack on how to treat the stats e.g. verbose. - --no-stats Disable stats output. - -t, --target Sets the build target e.g. node. - --no-target Negative 'target' option. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --host The hostname/ip address the server will bind to. - --port The port server will listen to. - --static [value...] A directory to serve static content from. - --no-static Negative 'static' option. - --static-directory Directory for static contents. - --static-public-path The bundled files will be available in the browser under this path. - --static-serve-index Tells dev-server to use serveIndex middleware. - --no-static-serve-index Do not tell dev-server to use serveIndex middleware. - --static-watch Watch for files in static content directory. - --no-static-watch Do not watch for files in static content directory. - --live-reload Enables live reloading on changing files. - --no-live-reload Disables live reloading on changing files. - --https Use HTTPS protocol. - --no-https Do not use HTTPS protocol. - --https-passphrase Passphrase for a pfx file. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-request-cert Request for an SSL certificate. - --no-https-request-cert Do not request for an SSL certificate. - --http2 Use HTTP/2, must be used with HTTPS. - --no-http2 Do not use HTTP/2. - --bonjour Broadcasts the server via ZeroConf networking on start. - --no-bonjour Do not broadcast the server via ZeroConf networking on start. - --client-progress Print compilation progress in percentage in the browser. - --no-client-progress Do not print compilation progress in percentage in the browser. - --client-overlay Show a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Do not show a full-screen overlay in the browser when there are compiler errors or warnings. - --open [value...] Open the default browser. - --no-open Do not open the default browser. - --open-app Open specified browser. - --open-target [value...] Open specified route in browser. - --no-open-target Do not open specified route in browser. - --client-logging Log level in the browser (none, error, warn, info, log, verbose). - --history-api-fallback Fallback to /index.html for Single Page Applications. - --no-history-api-fallback Do not fallback to /index.html for Single Page Applications. - --compress Enable gzip compression. - --no-compress Disable gzip compression. - --public The public hostname/ip address of the server. - --firewall [value...] Enable firewall or set hosts that are allowed to access the dev server. - --no-firewall Disable firewall. - --watch-files Watch static files for file changes. - -Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. - -To see list of all supported commands and options run 'webpack --help=verbose'. - -Webpack documentation: https://webpack.js.org/. -CLI documentation: https://webpack.js.org/api/cli/. -Made with ♥ by the webpack team." -`; - exports[`basic serve usage should throw error when same ports in multicompiler: stderr 1`] = ` "[webpack-cli] Error: Unique ports must be specified for each devServer option in your webpack configuration. Alternatively, run only 1 devServer config using the --config-name flag to specify your desired config. at stack" diff --git a/test/serve/basic/serve-basic.test.js b/test/serve/basic/serve-basic.test.js index d714dc0db8e..85f13639ba0 100644 --- a/test/serve/basic/serve-basic.test.js +++ b/test/serve/basic/serve-basic.test.js @@ -533,14 +533,6 @@ describe("basic serve usage", () => { expect(stdout).toContain("development"); }); - it("should shoe help information for serve", async () => { - const { exitCode, stderr, stdout } = await runWatch(__dirname, ["serve", "--help"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - it("should log used supplied config with serve", async () => { const { stderr, stdout } = await runWatch( __dirname, diff --git a/test/serve/invalid-schema/__snapshots__/invalid-schema.test.js.snap.devServer4.webpack4 b/test/serve/invalid-schema/__snapshots__/invalid-schema.test.js.snap.devServer4.webpack4 index 5d45ad3d218..6a6f81a5138 100644 --- a/test/serve/invalid-schema/__snapshots__/invalid-schema.test.js.snap.devServer4.webpack4 +++ b/test/serve/invalid-schema/__snapshots__/invalid-schema.test.js.snap.devServer4.webpack4 @@ -19,14 +19,14 @@ exports[`invalid schema should log webpack error and exit process on invalid fla exports[`invalid schema should log webpack error and exit process on invalid flag: stdout 1`] = `""`; exports[`invalid schema should log webpack-dev-server error and exit process on invalid config: stderr 1`] = ` -"[webpack-cli] Invalid configuration object. Object has been initialized using a configuration object that does not match the API schema. - - configuration.bonjour should be one of these: +"[webpack-cli] Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.bonjour should be one of these: boolean | object { … } - -> Broadcasts the server via ZeroConf networking on start. https://webpack.js.org/configuration/dev-server/#devserverbonjour - Details: - * configuration.bonjour should be a boolean. - * configuration.bonjour should be an object: - object { … }" + -> Allows to broadcasts dev server via ZeroConf networking on start. + -> Read more + at stack + -> Options for bonjour. + -> Read more at https://github.com/watson/bonjour#initializing" `; exports[`invalid schema should log webpack-dev-server error and exit process on invalid config: stdout 1`] = `""`; diff --git a/test/serve/invalid-schema/__snapshots__/invalid-schema.test.js.snap.devServer4.webpack5 b/test/serve/invalid-schema/__snapshots__/invalid-schema.test.js.snap.devServer4.webpack5 index 764cb17a6d3..81550614e9e 100644 --- a/test/serve/invalid-schema/__snapshots__/invalid-schema.test.js.snap.devServer4.webpack5 +++ b/test/serve/invalid-schema/__snapshots__/invalid-schema.test.js.snap.devServer4.webpack5 @@ -17,14 +17,14 @@ exports[`invalid schema should log webpack error and exit process on invalid fla exports[`invalid schema should log webpack error and exit process on invalid flag: stdout 1`] = `""`; exports[`invalid schema should log webpack-dev-server error and exit process on invalid config: stderr 1`] = ` -"[webpack-cli] Invalid configuration object. Object has been initialized using a configuration object that does not match the API schema. - - configuration.bonjour should be one of these: +"[webpack-cli] Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. + - options.bonjour should be one of these: boolean | object { … } - -> Broadcasts the server via ZeroConf networking on start. https://webpack.js.org/configuration/dev-server/#devserverbonjour - Details: - * configuration.bonjour should be a boolean. - * configuration.bonjour should be an object: - object { … }" + -> Allows to broadcasts dev server via ZeroConf networking on start. + -> Read more + at stack + -> Options for bonjour. + -> Read more at https://github.com/watson/bonjour#initializing" `; exports[`invalid schema should log webpack-dev-server error and exit process on invalid config: stdout 1`] = `""`; diff --git a/test/utils/test-utils.js b/test/utils/test-utils.js index ed707c23691..58bf0de4bcf 100644 --- a/test/utils/test-utils.js +++ b/test/utils/test-utils.js @@ -361,8 +361,22 @@ const readdir = (path) => }); }); +const urlAlphabet = "ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW"; + +const uuid = (size = 21) => { + let id = ""; + let i = size; + + while (i--) { + // `| 0` is more compact and faster than `Math.floor()`. + id += urlAlphabet[(Math.random() * 64) | 0]; + } + + return id; +}; + const uniqueDirectoryForTest = async () => { - const result = path.resolve(os.tmpdir(), Date.now().toString()); + const result = path.resolve(os.tmpdir(), uuid()); if (!fs.existsSync(result)) { fs.mkdirSync(result); From 4f976ddf0b483b90ca5978ee7b1da35e85c84374 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Jul 2021 17:17:34 +0300 Subject: [PATCH 061/173] chore(deps): bump rechoir from 0.7.0 to 0.7.1 (#2843) Bumps [rechoir](https://github.com/gulpjs/rechoir) from 0.7.0 to 0.7.1. - [Release notes](https://github.com/gulpjs/rechoir/releases) - [Commits](https://github.com/gulpjs/rechoir/compare/v0.7.0...v0.7.1) --- updated-dependencies: - dependency-name: rechoir dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 13aac9d841a..02ab3b6ed7a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9185,9 +9185,9 @@ rechoir@^0.6.2: resolve "^1.1.6" rechoir@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" - integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== dependencies: resolve "^1.9.0" From 85ee969815919b2332430a64b37d6f17a561e9d5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Jul 2021 18:23:39 +0300 Subject: [PATCH 062/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin --- yarn.lock | 58 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index 02ab3b6ed7a..67fd9861823 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2051,27 +2051,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.3.tgz#36cdcd9ca6f9e5cb49b9f61b970b1976708d084b" - integrity sha512-jW8sEFu1ZeaV8xzwsfi6Vgtty2jf7/lJmQmDkDruBjYAbx5DA8JtbcMnP0rNPUG+oH5GoQBTSp+9613BzuIpYg== + version "4.28.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.4.tgz#e73c8cabbf3f08dee0e1bda65ed4e622ae8f8921" + integrity sha512-s1oY4RmYDlWMlcV0kKPBaADn46JirZzvvH7c2CtAqxCY96S538JRBAzt83RrfkDheV/+G/vWNK0zek+8TB3Gmw== dependencies: - "@typescript-eslint/experimental-utils" "4.28.3" - "@typescript-eslint/scope-manager" "4.28.3" + "@typescript-eslint/experimental-utils" "4.28.4" + "@typescript-eslint/scope-manager" "4.28.4" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.28.3": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.3.tgz#976f8c1191b37105fd06658ed57ddfee4be361ca" - integrity sha512-zZYl9TnrxwEPi3FbyeX0ZnE8Hp7j3OCR+ELoUfbwGHGxWnHg9+OqSmkw2MoCVpZksPCZYpQzC559Ee9pJNHTQw== +"@typescript-eslint/experimental-utils@4.28.4": + version "4.28.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.4.tgz#9c70c35ebed087a5c70fb0ecd90979547b7fec96" + integrity sha512-OglKWOQRWTCoqMSy6pm/kpinEIgdcXYceIcH3EKWUl4S8xhFtN34GQRaAvTIZB9DD94rW7d/U7tUg3SYeDFNHA== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.28.3" - "@typescript-eslint/types" "4.28.3" - "@typescript-eslint/typescript-estree" "4.28.3" + "@typescript-eslint/scope-manager" "4.28.4" + "@typescript-eslint/types" "4.28.4" + "@typescript-eslint/typescript-estree" "4.28.4" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -2093,11 +2093,24 @@ "@typescript-eslint/types" "4.28.3" "@typescript-eslint/visitor-keys" "4.28.3" +"@typescript-eslint/scope-manager@4.28.4": + version "4.28.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.4.tgz#bdbce9b6a644e34f767bd68bc17bb14353b9fe7f" + integrity sha512-ZJBNs4usViOmlyFMt9X9l+X0WAFcDH7EdSArGqpldXu7aeZxDAuAzHiMAeI+JpSefY2INHrXeqnha39FVqXb8w== + dependencies: + "@typescript-eslint/types" "4.28.4" + "@typescript-eslint/visitor-keys" "4.28.4" + "@typescript-eslint/types@4.28.3": version "4.28.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.3.tgz#8fffd436a3bada422c2c1da56060a0566a9506c7" integrity sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA== +"@typescript-eslint/types@4.28.4": + version "4.28.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.4.tgz#41acbd79b5816b7c0dd7530a43d97d020d3aeb42" + integrity sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww== + "@typescript-eslint/typescript-estree@4.28.3": version "4.28.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.3.tgz#253d7088100b2a38aefe3c8dd7bd1f8232ec46fb" @@ -2111,6 +2124,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.28.4": + version "4.28.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.4.tgz#252e6863278dc0727244be9e371eb35241c46d00" + integrity sha512-z7d8HK8XvCRyN2SNp+OXC2iZaF+O2BTquGhEYLKLx5k6p0r05ureUtgEfo5f6anLkhCxdHtCf6rPM1p4efHYDQ== + dependencies: + "@typescript-eslint/types" "4.28.4" + "@typescript-eslint/visitor-keys" "4.28.4" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.28.3": version "4.28.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.3.tgz#26ac91e84b23529968361045829da80a4e5251c4" @@ -2119,6 +2145,14 @@ "@typescript-eslint/types" "4.28.3" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.28.4": + version "4.28.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.4.tgz#92dacfefccd6751cbb0a964f06683bfd72d0c4d3" + integrity sha512-NIAXAdbz1XdOuzqkJHjNKXKj8QQ4cv5cxR/g0uQhCYf/6//XrmfpaYsM7PnBcNbfvTDLUkqQ5TPNm1sozDdTWg== + dependencies: + "@typescript-eslint/types" "4.28.4" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From f163f1146cc110bc40c73958dfdc1bca961e8b2d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Jul 2021 19:36:38 +0300 Subject: [PATCH 063/173] chore(deps-dev): bump @typescript-eslint/parser --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 67fd9861823..cc3316f57b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2076,13 +2076,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.3.tgz#95f1d475c08268edffdcb2779993c488b6434b44" - integrity sha512-ZyWEn34bJexn/JNYvLQab0Mo5e+qqQNhknxmc8azgNd4XqspVYR5oHq9O11fLwdZMRcj4by15ghSlIEq+H5ltQ== + version "4.28.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.4.tgz#bc462dc2779afeefdcf49082516afdc3e7b96fab" + integrity sha512-4i0jq3C6n+og7/uCHiE6q5ssw87zVdpUj1k6VlVYMonE3ILdFApEzTWgppSRG4kVNB/5jxnH+gTeKLMNfUelQA== dependencies: - "@typescript-eslint/scope-manager" "4.28.3" - "@typescript-eslint/types" "4.28.3" - "@typescript-eslint/typescript-estree" "4.28.3" + "@typescript-eslint/scope-manager" "4.28.4" + "@typescript-eslint/types" "4.28.4" + "@typescript-eslint/typescript-estree" "4.28.4" debug "^4.3.1" "@typescript-eslint/scope-manager@4.28.3": From de482784a4f8cbb9eacbbe1c6b6f3c62ef60567a Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Thu, 22 Jul 2021 14:03:13 +0300 Subject: [PATCH 064/173] fix: respect dev server CLI options for multi compiler mode --- packages/serve/src/index.ts | 260 +++++++++++++----- packages/serve/src/startDevServer.ts | 152 ---------- ...ti-dev-server-output-public-path.config.js | 1 + test/serve/basic/serve-basic.test.js | 6 +- 4 files changed, 194 insertions(+), 225 deletions(-) delete mode 100644 packages/serve/src/startDevServer.ts diff --git a/packages/serve/src/index.ts b/packages/serve/src/index.ts index 3149222ed9d..23aa5551eca 100644 --- a/packages/serve/src/index.ts +++ b/packages/serve/src/index.ts @@ -1,4 +1,4 @@ -import startDevServer from "./startDevServer"; +import { devServerOptionsType } from "./types"; class ServeCommand { // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any @@ -81,9 +81,9 @@ class ServeCommand { } // eslint-disable-next-line @typescript-eslint/no-explicit-any - const webpackOptions: Record = {}; + const webpackCLIOptions: Record = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any - let devServerOptions: Record = {}; + const devServerCLIOptions: Record = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any const processors: Array<(opts: Record) => void> = []; @@ -98,7 +98,7 @@ class ServeCommand { ); if (isBuiltInOption) { - webpackOptions[optionName] = options[optionName]; + webpackCLIOptions[optionName] = options[optionName]; } else { const needToProcess = devServerFlags.find( (devServerOption) => @@ -109,37 +109,37 @@ class ServeCommand { processors.push(needToProcess.processor); } - devServerOptions[optionName] = options[optionName]; + devServerCLIOptions[optionName] = options[optionName]; } } for (const processor of processors) { - processor(devServerOptions); + processor(devServerCLIOptions); } if (entries.length > 0) { - webpackOptions.entry = [...entries, ...(webpackOptions.entry || [])]; + webpackCLIOptions.entry = [...entries, ...(webpackCLIOptions.entry || [])]; } - webpackOptions.argv = { + webpackCLIOptions.argv = { ...options, env: { WEBPACK_SERVE: true, ...options.env }, }; - const compiler = await cli.createCompiler(webpackOptions); + const compiler = await cli.createCompiler(webpackCLIOptions); if (!compiler) { return; } - let servers; + const servers = []; - if (cli.needWatchStdin(compiler) || devServerOptions.stdin) { + if (cli.needWatchStdin(compiler) || devServerCLIOptions.stdin) { // TODO remove in the next major release // Compatibility with old `stdin` option for `webpack-dev-server` // Should be removed for the next major release on both sides - if (devServerOptions.stdin) { - delete devServerOptions.stdin; + if (devServerCLIOptions.stdin) { + delete devServerCLIOptions.stdin; } process.stdin.on("end", () => { @@ -159,75 +159,193 @@ class ServeCommand { } // eslint-disable-next-line @typescript-eslint/no-var-requires, node/no-extraneous-require - const devServer = require("webpack-dev-server"); - const isNewDevServerCLIAPI = typeof devServer.schema !== "undefined"; - - if (isNewDevServerCLIAPI) { - const args = devServerFlags.reduce((accumulator, flag) => { - accumulator[flag.name] = flag; - return accumulator; - }, {}); - const values = Object.keys(devServerOptions).reduce((accumulator, name) => { - const kebabName = cli.utils.toKebabCase(name); - if (args[kebabName]) { - accumulator[kebabName] = options[name]; + const DevServer = require("webpack-dev-server"); + const isNewDevServerCLIAPI = typeof DevServer.schema !== "undefined"; + + let devServerVersion; + + try { + // eslint-disable-next-line node/no-extraneous-require, @typescript-eslint/no-var-requires + 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); + } + + const compilers = + typeof compiler.compilers !== "undefined" ? compiler.compilers : [compiler]; + const possibleCompilers = compilers.filter( + (compiler) => compiler.options.devServer, + ); + const compilersForDevServer = + possibleCompilers.length > 0 ? possibleCompilers : [compilers[0]]; + const isDevServer4 = devServerVersion.startsWith("4"); + const usedPorts = []; + + for (const compilerForDevServer of compilersForDevServer) { + let devServerOptions: devServerOptionsType; + + if (isNewDevServerCLIAPI) { + const args = devServerFlags.reduce((accumulator, flag) => { + accumulator[flag.name] = flag; + return accumulator; + }, {}); + const values = Object.keys(devServerCLIOptions).reduce( + (accumulator, name) => { + const kebabName = cli.utils.toKebabCase(name); + if (args[kebabName]) { + accumulator[kebabName] = options[name]; + } + return accumulator; + }, + {}, + ); + const result = { ...(compilerForDevServer.options.devServer || {}) }; + const problems = ( + webpack.cli && typeof webpack.cli.processArguments === "function" + ? webpack.cli + : DevServer.cli + ).processArguments(args, result, values); + + if (problems) { + const groupBy = (xs, key) => { + return xs.reduce((rv, x) => { + (rv[x[key]] = rv[x[key]] || []).push(x); + + return rv; + }, {}); + }; + + const problemsByPath = groupBy(problems, "path"); + + for (const path in problemsByPath) { + const problems = problemsByPath[path]; + problems.forEach((problem) => { + cli.logger.error( + `${cli.utils.capitalizeFirstLetter( + problem.type.replace(/-/g, " "), + )}${ + problem.value ? ` '${problem.value}'` : "" + } for the '--${problem.argument}' option${ + problem.index ? ` by index '${problem.index}'` : "" + }`, + ); + + if (problem.expected) { + cli.logger.error(`Expected: '${problem.expected}'`); + } + }); + } + + process.exit(2); } - return accumulator; - }, {}); - // TODO fix compatibility with multi compiler mode - const result = Object.assign({}, (compiler.options || {}).devServer); - const problems = ( - webpack.cli && typeof webpack.cli.processArguments === "function" - ? webpack.cli - : devServer.cli - ).processArguments(args, result, values); - - if (problems) { - const groupBy = (xs, key) => { - return xs.reduce((rv, x) => { - (rv[x[key]] = rv[x[key]] || []).push(x); - - return rv; - }, {}); + + devServerOptions = result; + } else { + // TODO remove in the next major release + const mergeOptions = ( + devServerOptions: devServerOptionsType, + devServerCliOptions: devServerOptionsType, + ): devServerOptionsType => { + // CLI options should take precedence over devServer options, + // and CLI options should have no default values included + const options = { ...devServerOptions, ...devServerCliOptions }; + + if (devServerOptions.client && devServerCliOptions.client) { + // the user could set some client options in their devServer config, + // then also specify client options on the CLI + options.client = { + ...devServerOptions.client, + ...devServerCliOptions.client, + }; + } + + return options; }; - const problemsByPath = groupBy(problems, "path"); - - for (const path in problemsByPath) { - const problems = problemsByPath[path]; - problems.forEach((problem) => { - cli.logger.error( - `${cli.utils.capitalizeFirstLetter( - problem.type.replace(/-/g, " "), - )}${problem.value ? ` '${problem.value}'` : ""} for the '--${ - problem.argument - }' option${ - problem.index ? ` by index '${problem.index}'` : "" - }`, + devServerOptions = mergeOptions( + compilerForDevServer.options.devServer || {}, + devServerCLIOptions, + ); + } + + // TODO remove in the next major release + if (!isDevServer4) { + const getPublicPathOption = (): string => { + const normalizePublicPath = (publicPath): string => + typeof publicPath === "undefined" || publicPath === "auto" + ? "/" + : publicPath; + + if (options.outputPublicPath) { + return normalizePublicPath( + compilerForDevServer.options.output.publicPath, ); + } - if (problem.expected) { - cli.logger.error(`Expected: '${problem.expected}'`); - } - }); - } + if (devServerOptions.publicPath) { + return normalizePublicPath(devServerOptions.publicPath); + } - process.exit(2); + return normalizePublicPath( + compilerForDevServer.options.output.publicPath, + ); + }; + const getStatsOption = (): string | boolean => { + if (options.stats) { + return options.stats; + } + + if (devServerOptions.stats) { + return devServerOptions.stats; + } + + return compilerForDevServer.options.stats; + }; + + devServerOptions.host = devServerOptions.host || "localhost"; + devServerOptions.port = devServerOptions.port || 8080; + devServerOptions.stats = getStatsOption(); + devServerOptions.publicPath = getPublicPathOption(); } - devServerOptions = result; - } + if (devServerOptions.port) { + const portNumber = Number(devServerOptions.port); - try { - servers = await startDevServer(compiler, devServerOptions, options, logger); - } catch (error) { - if (cli.isValidationError(error)) { - logger.error(error.message); - } else { - logger.error(error); + if (usedPorts.find((port) => portNumber === port)) { + throw new Error( + "Unique ports must be specified for each devServer option in your webpack configuration. Alternatively, run only 1 devServer config using the --config-name flag to specify your desired config.", + ); + } + + usedPorts.push(portNumber); } - process.exit(2); + try { + const server = new DevServer(compiler, devServerOptions); + + server.listen( + devServerOptions.port, + devServerOptions.host, + (error): void => { + if (error) { + throw error; + } + }, + ); + + servers.push(server); + } catch (error) { + if (cli.isValidationError(error)) { + logger.error(error.message); + } else { + logger.error(error); + } + + process.exit(2); + } } }, ); diff --git a/packages/serve/src/startDevServer.ts b/packages/serve/src/startDevServer.ts deleted file mode 100644 index 8795a299654..00000000000 --- a/packages/serve/src/startDevServer.ts +++ /dev/null @@ -1,152 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -/* eslint-disable @typescript-eslint/no-var-requires */ -import { devServerOptionsType } from "./types"; - -/** - * - * Starts the devServer - * - * @param {Object} compiler - a webpack compiler - * @param {Object} devServerCliOptions - dev server CLI options - * @param {Object} cliOptions - CLI options - * @param {Object} logger - logger - * - * @returns {Object[]} array of resulting servers - */ - -export default async function startDevServer( - compiler: any, - devServerCliOptions: any, - cliOptions: any, - logger: any, -): Promise[]> { - let devServerVersion, Server; - - try { - // eslint-disable-next-line node/no-extraneous-require - devServerVersion = require("webpack-dev-server/package.json").version; - // eslint-disable-next-line node/no-extraneous-require - Server = 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 mergeOptions = ( - devServerOptions: devServerOptionsType, - devServerCliOptions: devServerOptionsType, - ): devServerOptionsType => { - // CLI options should take precedence over devServer options, - // and CLI options should have no default values included - const options = { ...devServerOptions, ...devServerCliOptions }; - - if (devServerOptions.client && devServerCliOptions.client) { - // the user could set some client options in their devServer config, - // then also specify client options on the CLI - options.client = { - ...devServerOptions.client, - ...devServerCliOptions.client, - }; - } - - return options; - }; - - const isMultiCompiler = Boolean(compiler.compilers); - - let compilersWithDevServerOption; - - if (isMultiCompiler) { - compilersWithDevServerOption = compiler.compilers.filter( - (compiler) => compiler.options.devServer, - ); - - // No compilers found with the `devServer` option, let's use first compiler - if (compilersWithDevServerOption.length === 0) { - compilersWithDevServerOption = [compiler.compilers[0]]; - } - } else { - compilersWithDevServerOption = [compiler]; - } - - const isDevServer4 = devServerVersion.startsWith("4"); - const usedPorts = []; - const devServersOptions = []; - - for (const compilerWithDevServerOption of compilersWithDevServerOption) { - const options = mergeOptions( - compilerWithDevServerOption.options.devServer || {}, - devServerCliOptions, - ); - - if (!isDevServer4) { - const getPublicPathOption = (): string => { - const normalizePublicPath = (publicPath): string => - typeof publicPath === "undefined" || publicPath === "auto" ? "/" : publicPath; - - if (cliOptions.outputPublicPath) { - return normalizePublicPath( - compilerWithDevServerOption.options.output.publicPath, - ); - } - - // webpack-dev-server@3 - if (options.publicPath) { - return normalizePublicPath(options.publicPath); - } - - return normalizePublicPath(compilerWithDevServerOption.options.output.publicPath); - }; - const getStatsOption = (): string | boolean => { - if (cliOptions.stats) { - return compilerWithDevServerOption.options.stats; - } - - if (options.stats) { - return options.stats; - } - - return compilerWithDevServerOption.options.stats; - }; - - options.host = options.host || "localhost"; - options.port = options.port || 8080; - options.stats = getStatsOption(); - options.publicPath = getPublicPathOption(); - } - - if (options.port) { - const portNumber = Number(options.port); - - if (usedPorts.find((port) => portNumber === port)) { - throw new Error( - "Unique ports must be specified for each devServer option in your webpack configuration. Alternatively, run only 1 devServer config using the --config-name flag to specify your desired config.", - ); - } - - usedPorts.push(portNumber); - } - - devServersOptions.push({ compiler, options }); - } - - const servers = []; - - for (const devServerOptions of devServersOptions) { - const { compiler, options } = devServerOptions; - const server = new Server(compiler, options); - - server.listen(options.port, options.host, (error): void => { - if (error) { - throw error; - } - }); - - servers.push(server); - } - - return servers; -} diff --git a/test/serve/basic/multi-dev-server-output-public-path.config.js b/test/serve/basic/multi-dev-server-output-public-path.config.js index e1098ce284c..64761c54c2d 100644 --- a/test/serve/basic/multi-dev-server-output-public-path.config.js +++ b/test/serve/basic/multi-dev-server-output-public-path.config.js @@ -18,6 +18,7 @@ module.exports = [ }, } : {}, + plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], }, { name: "two", diff --git a/test/serve/basic/serve-basic.test.js b/test/serve/basic/serve-basic.test.js index 85f13639ba0..b2fba51819b 100644 --- a/test/serve/basic/serve-basic.test.js +++ b/test/serve/basic/serve-basic.test.js @@ -356,21 +356,23 @@ describe("basic serve usage", () => { expect(stdout).toContain("main.js"); }); - // TODO bug on webpack-dev-server side, need respect `output.publicPath` too it('should work with the "--output-public-path" option', async () => { const { stderr, stdout } = await runWatch(__dirname, [ "serve", "--output-public-path", "/my-public-path/", + "--stats", + "verbose", ]); expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); if (isWebpack5) { + expect(stdout).toContain("/my-public-path/"); + if (isDevServer4) { expect(stdout).toContain("HotModuleReplacementPlugin"); } else { - expect(stdout).toContain("/my-public-path/"); expect(stdout).not.toContain("HotModuleReplacementPlugin"); } From 85a9f201b1c31a35e9f8d4ec2d3b6677230fe4d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Jul 2021 14:03:31 +0300 Subject: [PATCH 065/173] chore(deps-dev): bump ts-jest from 27.0.3 to 27.0.4 (#2845) Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 27.0.3 to 27.0.4. - [Release notes](https://github.com/kulshekhar/ts-jest/releases) - [Changelog](https://github.com/kulshekhar/ts-jest/blob/master/CHANGELOG.md) - [Commits](https://github.com/kulshekhar/ts-jest/compare/v27.0.3...v27.0.4) --- updated-dependencies: - dependency-name: ts-jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 65 ++++--------------------------------------------------- 1 file changed, 4 insertions(+), 61 deletions(-) diff --git a/yarn.lock b/yarn.lock index cc3316f57b2..d66d57533ea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -839,17 +839,6 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^27.0.2": - version "27.0.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.2.tgz#e153d6c46bda0f2589f0702b071f9898c7bbd37e" - integrity sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - "@jest/types@^27.0.6": version "27.0.6" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.6.tgz#9a992bc517e0c49f035938b8549719c2de40706b" @@ -2085,14 +2074,6 @@ "@typescript-eslint/typescript-estree" "4.28.4" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.28.3": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.3.tgz#c32ad4491b3726db1ba34030b59ea922c214e371" - integrity sha512-/8lMisZ5NGIzGtJB+QizQ5eX4Xd8uxedFfMBXOKuJGP0oaBBVEMbJVddQKDXyyB0bPlmt8i6bHV89KbwOelJiQ== - dependencies: - "@typescript-eslint/types" "4.28.3" - "@typescript-eslint/visitor-keys" "4.28.3" - "@typescript-eslint/scope-manager@4.28.4": version "4.28.4" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.4.tgz#bdbce9b6a644e34f767bd68bc17bb14353b9fe7f" @@ -2101,29 +2082,11 @@ "@typescript-eslint/types" "4.28.4" "@typescript-eslint/visitor-keys" "4.28.4" -"@typescript-eslint/types@4.28.3": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.3.tgz#8fffd436a3bada422c2c1da56060a0566a9506c7" - integrity sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA== - "@typescript-eslint/types@4.28.4": version "4.28.4" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.4.tgz#41acbd79b5816b7c0dd7530a43d97d020d3aeb42" integrity sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww== -"@typescript-eslint/typescript-estree@4.28.3": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.3.tgz#253d7088100b2a38aefe3c8dd7bd1f8232ec46fb" - integrity sha512-YAb1JED41kJsqCQt1NcnX5ZdTA93vKFCMP4lQYG6CFxd0VzDJcKttRlMrlG+1qiWAw8+zowmHU1H0OzjWJzR2w== - dependencies: - "@typescript-eslint/types" "4.28.3" - "@typescript-eslint/visitor-keys" "4.28.3" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.28.4": version "4.28.4" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.4.tgz#252e6863278dc0727244be9e371eb35241c46d00" @@ -2137,14 +2100,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.28.3": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.3.tgz#26ac91e84b23529968361045829da80a4e5251c4" - integrity sha512-ri1OzcLnk1HH4gORmr1dllxDzzrN6goUIz/P4MHFV0YZJDCADPR3RvYNp0PW2SetKTThar6wlbFTL00hV2Q+fg== - dependencies: - "@typescript-eslint/types" "4.28.3" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.28.4": version "4.28.4" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.4.tgz#92dacfefccd6751cbb0a964f06683bfd72d0c4d3" @@ -6760,19 +6715,7 @@ jest-snapshot@^27.0.6: pretty-format "^27.0.6" semver "^7.3.2" -jest-util@^27.0.0, jest-util@^27.0.1: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.2.tgz#fc2c7ace3c75ae561cf1e5fdb643bf685a5be7c7" - integrity sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA== - dependencies: - "@jest/types" "^27.0.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^3.0.0" - picomatch "^2.2.3" - -jest-util@^27.0.6: +jest-util@^27.0.0, jest-util@^27.0.1, jest-util@^27.0.6: version "27.0.6" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.6.tgz#e8e04eec159de2f4d5f57f795df9cdc091e50297" integrity sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ== @@ -10548,9 +10491,9 @@ trim-off-newlines@^1.0.0: integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= ts-jest@^27.0.2: - version "27.0.3" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.0.3.tgz#808492f022296cde19390bb6ad627c8126bf93f8" - integrity sha512-U5rdMjnYam9Ucw+h0QvtNDbc5+88nxt7tbIvqaZUhFrfG4+SkWhMXjejCLVGcpILTPuV+H3W/GZDZrnZFpPeXw== + version "27.0.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.0.4.tgz#df49683535831560ccb58f94c023d831b1b80df0" + integrity sha512-c4E1ECy9Xz2WGfTMyHbSaArlIva7Wi2p43QOMmCqjSSjHP06KXv+aT+eSY+yZMuqsMi3k7pyGsGj2q5oSl5WfQ== dependencies: bs-logger "0.x" buffer-from "1.x" From 104b9c4a9aa63c8962bf9decf9dd580180aec24c Mon Sep 17 00:00:00 2001 From: James George Date: Thu, 22 Jul 2021 21:33:56 +0530 Subject: [PATCH 066/173] refactor(generators): leverage helpers (#2842) --- packages/generators/src/addon-generator.ts | 36 +-------- packages/generators/src/init-generator.ts | 42 ++--------- packages/generators/src/utils/helpers.ts | 43 +++++++++++ .../scaffold-utils.test.js.snap.webpack4 | 0 .../scaffold-utils.test.js.snap.webpack5 | 0 test/api/generators/helpers.test.js | 73 +++++++++++++++++++ .../{ => generators}/scaffold-utils.test.js | 2 +- 7 files changed, 125 insertions(+), 71 deletions(-) rename test/api/{ => generators}/__snapshots__/scaffold-utils.test.js.snap.webpack4 (100%) rename test/api/{ => generators}/__snapshots__/scaffold-utils.test.js.snap.webpack5 (100%) create mode 100644 test/api/generators/helpers.test.js rename test/api/{ => generators}/scaffold-utils.test.js (97%) diff --git a/packages/generators/src/addon-generator.ts b/packages/generators/src/addon-generator.ts index 1a78c4bb614..02720b5dbed 100644 --- a/packages/generators/src/addon-generator.ts +++ b/packages/generators/src/addon-generator.ts @@ -2,7 +2,7 @@ import fs from "fs"; import path from "path"; import Generator from "yeoman-generator"; -import { List } from "./utils/scaffold-utils"; +import { getInstaller, getTemplate } from "./utils/helpers"; // Helper to get the template-directory content @@ -57,42 +57,12 @@ const addonGenerator = ( public copyTpl: (value: string, index: number, array: string[]) => void; public async prompting(): Promise { - if (!this.supportedTemplates.includes(this.template)) { - this.utils.logger.warn( - `⚠ ${this.template} is not a valid template, please select one from below`, - ); - - const { selectedTemplate } = await List( - this, - "selectedTemplate", - "Select a valid template from below:", - this.supportedTemplates, - "default", - false, - ); - - this.template = selectedTemplate; - } + this.template = await getTemplate.call(this); this.resolvedTemplatePath = path.join(templateDir, this.template); this.props = await this.prompt(prompts); - const installers = this.utils.getAvailableInstallers(); - if (installers.length === 1) { - return ([this.packageManager] = installers); - } - - // Prompt for the package manager of choice - const defaultPackager = this.utils.getPackageManager(); - const { packager } = await List( - this, - "packager", - "Pick a package manager:", - installers, - defaultPackager, - false, - ); - this.packageManager = packager; + this.packageManager = await getInstaller.call(this); } public default(): void { diff --git a/packages/generators/src/init-generator.ts b/packages/generators/src/init-generator.ts index 7b022fd8e51..8196e104884 100644 --- a/packages/generators/src/init-generator.ts +++ b/packages/generators/src/init-generator.ts @@ -1,13 +1,12 @@ import { blue, yellow } from "colorette"; +import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs"; import path from "path"; -import * as Question from "./utils/scaffold-utils"; import { CustomGenerator } from "./types"; -import { existsSync, mkdirSync } from "fs"; +import { getInstaller, getTemplate } from "./utils/helpers"; +import * as Question from "./utils/scaffold-utils"; import handlers from "./handlers"; -import { readFileSync, writeFileSync } from "fs"; - /** * * Generator for initializing a webpack config @@ -62,22 +61,7 @@ export default class InitGenerator extends CustomGenerator { } } - if (!this.supportedTemplates.includes(this.template)) { - this.utils.logger.warn( - `⚠ ${this.template} is not a valid template, please select one from below`, - ); - - const { selectedTemplate } = await Question.List( - this, - "selectedTemplate", - "Select a valid template from below:", - this.supportedTemplates, - "default", - false, - ); - - this.template = selectedTemplate; - } + this.template = await getTemplate.call(this); await handlers[this.template].questions(this, Question); @@ -101,23 +85,7 @@ export default class InitGenerator extends CustomGenerator { } public async installPlugins(): Promise { - const installers = this.utils.getAvailableInstallers(); - - if (installers.length === 1) { - [this.packageManager] = installers; - } else { - // Prompt for the package manager of choice - const defaultPackager = this.utils.getPackageManager(); - const { packager } = await Question.List( - this, - "packager", - "Pick a package manager:", - installers, - defaultPackager, - this.force, - ); - this.packageManager = packager; - } + this.packageManager = await getInstaller.call(this); const opts: { dev?: boolean; diff --git a/packages/generators/src/utils/helpers.ts b/packages/generators/src/utils/helpers.ts index 1c6291d7877..98f59794015 100644 --- a/packages/generators/src/utils/helpers.ts +++ b/packages/generators/src/utils/helpers.ts @@ -1,3 +1,5 @@ +import { List } from "./scaffold-utils"; + const regex = /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g; /** @@ -20,3 +22,44 @@ export function toUpperCamelCase(str: string): string { .map((x) => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase()) .join(""); } + +export async function getInstaller(): Promise { + const installers = this.utils.getAvailableInstallers(); + + if (installers.length === 1) { + return installers[0]; + } + + // Prompt for the package manager of choice + const defaultPackager = this.utils.getPackageManager(); + const { packager } = await List( + this, + "packager", + "Pick a package manager:", + installers, + defaultPackager, + this.force, + ); + return packager; +} + +export async function getTemplate(): Promise { + if (this.supportedTemplates.includes(this.template)) { + return this.template; + } + + this.utils.logger.warn( + `⚠ ${this.template} is not a valid template, please select one from below`, + ); + + const { selectedTemplate } = await List( + this, + "selectedTemplate", + "Select a valid template from below:", + this.supportedTemplates, + "default", + false, + ); + + return selectedTemplate; +} diff --git a/test/api/__snapshots__/scaffold-utils.test.js.snap.webpack4 b/test/api/generators/__snapshots__/scaffold-utils.test.js.snap.webpack4 similarity index 100% rename from test/api/__snapshots__/scaffold-utils.test.js.snap.webpack4 rename to test/api/generators/__snapshots__/scaffold-utils.test.js.snap.webpack4 diff --git a/test/api/__snapshots__/scaffold-utils.test.js.snap.webpack5 b/test/api/generators/__snapshots__/scaffold-utils.test.js.snap.webpack5 similarity index 100% rename from test/api/__snapshots__/scaffold-utils.test.js.snap.webpack5 rename to test/api/generators/__snapshots__/scaffold-utils.test.js.snap.webpack5 diff --git a/test/api/generators/helpers.test.js b/test/api/generators/helpers.test.js new file mode 100644 index 00000000000..3996c9bb275 --- /dev/null +++ b/test/api/generators/helpers.test.js @@ -0,0 +1,73 @@ +const path = require("path"); + +const utilsDirectory = { + cli: "../../../packages/webpack-cli/lib/utils", + generators: "../../../packages/generators/src/utils", +}; + +jest.setMock(path.join(utilsDirectory.cli, "get-available-installers"), jest.fn()); +jest.mock(path.join(utilsDirectory.generators, "scaffold-utils"), () => ({ + List: jest.fn(), +})); + +const getAvailableInstallers = require(path.join(utilsDirectory.cli, "get-available-installers")); +const getPackageManager = require(path.join(utilsDirectory.cli, "get-package-manager")); +const logger = require(path.join(utilsDirectory.cli, "logger")); + +const { getInstaller, getTemplate } = require(path.join(utilsDirectory.generators, "helpers")); +const { List } = require(path.join(utilsDirectory.generators, "scaffold-utils")); + +const context = { + prompt: () => {}, + supportedTemplates: ["default"], + utils: { + getAvailableInstallers, + getPackageManager, + logger, + }, +}; + +describe("helpers", () => { + it("getInstaller() returns the available installer", async () => { + // Multiple installers are not available + getAvailableInstallers.mockReturnValue(["npm"]); + + // Invoke the helper function + const installer = await getInstaller.call(context); + expect(installer).toBe("npm"); + }); + + it("getInstaller() invokes a List prompt if multiple installers are available", async () => { + // Multiple installers are available + getAvailableInstallers.mockReturnValue(["npm", "yarn", "pnpm"]); + + // User chose "pnpm" + List.mockReturnValue({ packager: "pnpm" }); + + // Invoke the helper function + const installer = await getInstaller.call(context); + expect(installer).toBe("pnpm"); + }); + + it("getTemplate() returns with the valid template", async () => { + context.template = "default"; + + // Invoke the helper function + const template = await getTemplate.call(context); + expect(template).toBe("default"); + }); + + it("getTemplate() invokes a List prompt on supplying an invalid template", async () => { + context.template = "unknown"; + + // User chose "default" + List.mockReturnValue({ selectedTemplate: "default" }); + + const loggerMock = jest.spyOn(logger, "warn").mockImplementation(() => {}); + + // Invoke the helper function` + const template = await getTemplate.call(context); + expect(template).toBe("default"); + expect(loggerMock).toHaveBeenCalled(); + }); +}); diff --git a/test/api/scaffold-utils.test.js b/test/api/generators/scaffold-utils.test.js similarity index 97% rename from test/api/scaffold-utils.test.js rename to test/api/generators/scaffold-utils.test.js index 06cdc64bfcb..93860e47743 100755 --- a/test/api/scaffold-utils.test.js +++ b/test/api/generators/scaffold-utils.test.js @@ -4,7 +4,7 @@ const { InputValidate, Input, // eslint-disable-next-line node/no-missing-require -} = require("../../packages/generators/src/utils/scaffold-utils"); +} = require("../../../packages/generators/src/utils/scaffold-utils"); describe("utils", () => { let mockSelf; From 5351fd3aae8c0d2808dc299808c13551b0b6c125 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Jul 2021 14:47:11 +0300 Subject: [PATCH 067/173] chore(deps-dev): bump webpack from 5.45.1 to 5.46.0 (#2851) Bumps [webpack](https://github.com/webpack/webpack) from 5.45.1 to 5.46.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.45.1...v5.46.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/yarn.lock b/yarn.lock index d66d57533ea..e64f3287266 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1901,7 +1901,7 @@ jest-diff "^26.0.0" pretty-format "^26.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7": +"@types/json-schema@*", "@types/json-schema@^7.0.7": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== @@ -9463,16 +9463,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== - dependencies: - "@types/json-schema" "^7.0.6" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.0: +schema-utils@^3.0.0, schema-utils@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.0.tgz#95986eb604f66daadeed56e379bfe7a7f963cdb9" integrity sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w== @@ -10992,18 +10983,18 @@ webpack-merge@^5.7.3: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.0.tgz#9ed2de69b25143a4c18847586ad9eccb19278cfa" - integrity sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ== +webpack-sources@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" + integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== dependencies: source-list-map "^2.0.1" source-map "^0.6.1" webpack@^5.45.1: - version "5.45.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.45.1.tgz#d78dcbeda18a872dc62b0455d3ed3dcfd1c886bb" - integrity sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ== + version "5.46.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.46.0.tgz#105d20d96f79db59b316b0ae54316f0f630314b5" + integrity sha512-qxD0t/KTedJbpcXUmvMxY5PUvXDbF8LsThCzqomeGaDlCA6k998D8yYVwZMvO8sSM3BTEOaD4uzFniwpHaTIJw== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" @@ -11027,7 +11018,7 @@ webpack@^5.45.1: tapable "^2.1.1" terser-webpack-plugin "^5.1.3" watchpack "^2.2.0" - webpack-sources "^2.3.0" + webpack-sources "^2.3.1" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" From bf776ff63e9ba74c3e49cdd58115ca755dbca60c Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Fri, 23 Jul 2021 17:21:10 +0530 Subject: [PATCH 068/173] test: add more cases for colors test (#2848) --- test/build/colors/colors.test.js | 35 +++++++++++++++++++ .../multi-stats-colors.webpack.config.js | 22 ++++++++++++ .../colors/stats-colors.webpack.config.js | 8 +++++ 3 files changed, 65 insertions(+) create mode 100644 test/build/colors/multi-stats-colors.webpack.config.js create mode 100644 test/build/colors/stats-colors.webpack.config.js diff --git a/test/build/colors/colors.test.js b/test/build/colors/colors.test.js index 9d332515c6d..0132bc6fef1 100644 --- a/test/build/colors/colors.test.js +++ b/test/build/colors/colors.test.js @@ -144,6 +144,41 @@ describe("colors", () => { expect(stdout).toContain(output); }); + it('should work with the "stats" option from the configuration #5', async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--config=stats-colors.webpack.config.js"], + { + env: { FORCE_COLOR: true }, + }, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).toContain(`\u001b[31m${output}\u001b[39m\u001b[22m`); + }); + + it('should work with the "stats" option from the configuration in multi compiler mode', async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--config=multi-stats-colors.webpack.config.js"], + { + env: { FORCE_COLOR: true }, + }, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + + if (isWebpack5) { + // red from first config + expect(stdout).toContain(`\u001b[31msuccessfully`); + // blue from second config + expect(stdout).toContain(`\u001b[34msuccessfully`); + } + }); + it("should prioritize --color over colors in config", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "--config=colors-false.webpack.config.js", diff --git a/test/build/colors/multi-stats-colors.webpack.config.js b/test/build/colors/multi-stats-colors.webpack.config.js new file mode 100644 index 00000000000..c9675f190a2 --- /dev/null +++ b/test/build/colors/multi-stats-colors.webpack.config.js @@ -0,0 +1,22 @@ +module.exports = [ + { + name: "first-config", + entry: "./src/first.js", + stats: { + colors: { + green: "\u001b[31m", // overwriting with red for test + }, + }, + mode: "development", + }, + { + name: "second-config", + entry: "./src/second.js", + stats: { + colors: { + green: "\u001b[34m", // overwriting with blue for test + }, + }, + mode: "development", + }, +]; diff --git a/test/build/colors/stats-colors.webpack.config.js b/test/build/colors/stats-colors.webpack.config.js new file mode 100644 index 00000000000..210b807952f --- /dev/null +++ b/test/build/colors/stats-colors.webpack.config.js @@ -0,0 +1,8 @@ +module.exports = { + stats: { + colors: { + green: "\u001b[31m", // overwriting with red for test + }, + }, + mode: "development", +}; From 6bb6b7dd3b17f9376e287d1981b218c595db5281 Mon Sep 17 00:00:00 2001 From: Anshuman Verma Date: Fri, 23 Jul 2021 17:22:51 +0530 Subject: [PATCH 069/173] chore: update dev server types to v4 compatible (#2849) --- packages/serve/src/types.ts | 52 ++++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/packages/serve/src/types.ts b/packages/serve/src/types.ts index 8eefb21c0ca..b3b9ce7e3b0 100644 --- a/packages/serve/src/types.ts +++ b/packages/serve/src/types.ts @@ -1,21 +1,26 @@ export type devServerOptionsType = { + allowedHosts?: string[] | allowedHostsEnum; // eslint-disable-next-line @typescript-eslint/no-explicit-any bonjour?: boolean | Record; - client?: devServerClientOptions; + client?: false | devServerClientOptions; compress?: boolean; // eslint-disable-next-line @typescript-eslint/no-explicit-any dev?: Record; // drop in dev-server v4 // eslint-disable-next-line @typescript-eslint/no-explicit-any devMiddleware?: Record; firewall?: boolean | string[]; - headers?: Record; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + headers?: + | Record + | ((request: any, response: any, middlewareContext: any) => Record); historyApiFallback?: boolean | Record; - host?: string | null; + host?: string | null | hostEnum; hot?: boolean | hotOptionEnum; http2?: boolean; https?: boolean | Record; injectClient?: boolean | (() => void); injectHot?: boolean | (() => void); + ipc?: string | true; liveReload?: boolean; onAfterSetupMiddleware?: () => void; onBeforeSetupMiddleware?: () => void; @@ -28,27 +33,62 @@ export type devServerOptionsType = { progress?: boolean; proxy?: Record | (Record | (() => void))[]; public?: string; + setupExitSignals?: boolean; static?: boolean | string | Record | (string | Record)[]; transportMode?: Record | string; useLocalIp?: boolean; publicPath?: string | (() => void); stats?: string | boolean; watchFiles?: string | Record; + webSocketServer?: + | false + | string + | transportModeEnum + | (() => any) + | Record + | (Record | (() => void))[]; }; enum hotOptionEnum { only = "only", } +enum hostEnum { + LocalIp = "local-ip", + LocalIpv4 = "local-ipv4", + LocalIpv6 = "local-ipv6", +} + +enum allowedHostsEnum { + Auto = "auto", + All = "all", +} + +enum transportModeEnum { + SockJS = "sockjs", + Ws = "ws", +} + type devServerClientOptions = { host?: string; path?: string; port?: string | number | null; - logging?: devServerClientLogging; - progress?: boolean; - overlay?: boolean | clientOverlay; needClientEntry?: boolean | (() => void); needHotEntry?: boolean | (() => void); + logging?: devServerClientLogging; + overlay?: boolean | clientOverlay; + progress?: boolean; + webSocketTransport?: string | transportModeEnum; + webSocketURL?: string | webSocketURLOptions; +}; + +type webSocketURLOptions = { + hostname?: string; + pathname?: string; + port?: string | number; + password?: string; + protocol?: string | "auto"; + username?: string; }; type openOptionObject = { From 53622dc74b8a8c4289b4f4e273414a401261ae67 Mon Sep 17 00:00:00 2001 From: Anshuman Verma Date: Fri, 23 Jul 2021 17:24:07 +0530 Subject: [PATCH 070/173] docs: add dev server options for v4 (#2847) --- SERVE-OPTIONS.md => SERVE-OPTIONS-v3.md | 0 SERVE-OPTIONS-v4.md | 83 +++++++++++++++++++++++++ scripts/updateDocs.js | 6 +- 3 files changed, 88 insertions(+), 1 deletion(-) rename SERVE-OPTIONS.md => SERVE-OPTIONS-v3.md (100%) create mode 100644 SERVE-OPTIONS-v4.md diff --git a/SERVE-OPTIONS.md b/SERVE-OPTIONS-v3.md similarity index 100% rename from SERVE-OPTIONS.md rename to SERVE-OPTIONS-v3.md diff --git a/SERVE-OPTIONS-v4.md b/SERVE-OPTIONS-v4.md new file mode 100644 index 00000000000..f072b073aca --- /dev/null +++ b/SERVE-OPTIONS-v4.md @@ -0,0 +1,83 @@ +``` +Usage: webpack serve|server|s [entries...] [options] + +Run the webpack dev server. + +Options: + -c, --config Provide path to a webpack configuration file e.g. + ./webpack.config.js. + --config-name Name of the configuration to use. + -m, --merge Merge two or more configurations using + 'webpack-merge'. + --env Environment passed to the configuration when it + is a function. + --node-env Sets process.env.NODE_ENV to the specified value. + --progress [value] Print compilation progress during build. + -j, --json [value] Prints result as JSON or store it in a file. + -d, --devtool Determine source maps to use. + --no-devtool Do not generate source maps. + --entry The entry point(s) of your application e.g. + ./src/main.js. + --mode Defines the mode to pass to webpack. + --name Name of the configuration. Used when loading + multiple configurations. + -o, --output-path Output location of the file generated by webpack + e.g. ./dist/. + --stats [value] It instructs webpack on how to treat the stats + e.g. verbose. + --no-stats Disable stats output. + -t, --target Sets the build target e.g. node. + --no-target Negative 'target' option. + --watch-options-stdin Stop watching when stdin stream has ended. + --no-watch-options-stdin Do not stop watching when stdin stream has ended. + --bonjour Broadcasts the server via ZeroConf networking on + start + --lazy Lazy + --liveReload Enables/Disables live reloading on changing files + --serveIndex Enables/Disables serveIndex middleware + --inline Inline mode (set to false to disable including + client scripts like livereload) + --profile Print compilation profile data for progress steps + --progress Print compilation progress in percentage + --hot-only Do not refresh page if HMR fails + --stdin close when stdin ends + --open [value] Open the default browser, or optionally specify a + browser name + --useLocalIp Open default browser with local IP + --open-page Open default browser with the specified page + --client-log-level Log level in the browser (trace, debug, info, + warn, error or silent) + --https HTTPS + --http2 HTTP/2, must be used with HTTPS + --key Path to a SSL key. + --cert Path to a SSL certificate. + --cacert Path to a SSL CA certificate. + --pfx Path to a SSL pfx file. + --pfx-passphrase Passphrase for pfx file. + --content-base A directory or URL to serve HTML content from. + --watch-content-base Enable live-reloading of the content-base. + --history-api-fallback Fallback to /index.html for Single Page + Applications. + --compress Enable gzip compression + --port The port + --disable-host-check Will not check the host + --socket Socket to listen + --public The public hostname/ip address of the server + --host The hostname/ip address the server will bind to + --allowed-hosts A list of hosts that are allowed to access the + dev server, separated by spaces + +Global options: + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', + 'webpack-cli' and 'webpack-dev-server' and + commands. + -h, --help [verbose] Display help for commands and options. + +To see list of all supported commands and options run 'webpack --help=verbose'. + +Webpack documentation: https://webpack.js.org/. +CLI documentation: https://webpack.js.org/api/cli/. +Made with ♥ by the webpack team. +``` diff --git a/scripts/updateDocs.js b/scripts/updateDocs.js index 6193903a675..84bdcf12f06 100644 --- a/scripts/updateDocs.js +++ b/scripts/updateDocs.js @@ -2,6 +2,10 @@ const { sync } = require("execa"); const { resolve } = require("path"); const { writeFileSync } = require("fs"); +//eslint-disable-next-line node/no-unpublished-require +const { version } = require("webpack-dev-server/package.json"); + +const majorDevServerVersion = version.split(".")[0]; try { const { stdout: cliOptions } = sync( @@ -33,7 +37,7 @@ try { const serveContent = ["```\n", serveOptions, "\n```"].join(""); // create SERVE.md - writeFileSync("SERVE-OPTIONS.md", serveContent); + writeFileSync(`SERVE-OPTIONS-v${majorDevServerVersion}.md`, serveContent); console.log('Successfully updated "OPTIONS.md" and "SERVE-OPTIONS.md"'); } catch (err) { From d9d4c37add457caa7182512d655974ce9c130d66 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Sat, 24 Jul 2021 18:27:02 +0530 Subject: [PATCH 071/173] refactor: update `webpack-dev-server` usage (#2853) --- packages/serve/src/index.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/serve/src/index.ts b/packages/serve/src/index.ts index 23aa5551eca..69f2f62ddec 100644 --- a/packages/serve/src/index.ts +++ b/packages/serve/src/index.ts @@ -324,7 +324,14 @@ class ServeCommand { } try { - const server = new DevServer(compiler, devServerOptions); + let server; + + // TODO: remove after dropping webpack-dev-server@v3 + if (isDevServer4) { + server = new DevServer(devServerOptions, compiler); + } else { + server = new DevServer(compiler, devServerOptions); + } server.listen( devServerOptions.port, From 9b326f6ec91b4b0e740a85fa7c5cc108445edc82 Mon Sep 17 00:00:00 2001 From: Anshuman Verma Date: Sat, 24 Jul 2021 21:35:04 +0530 Subject: [PATCH 072/173] chore: use default node cache (#2852) * chore: use default node cache * fix: lint --- .github/workflows/nodejs.yml | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index a42fed46799..68ccaf37bdd 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -70,17 +70,7 @@ jobs: uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} - - - name: Restore lerna cache - id: cache - uses: actions/cache@v2 - with: - path: | - node_modules - */*/node_modules - key: c-${{ runner.os }}-${{ matrix.webpack-version }}-yarn-${{ hashFiles('**/yarn.lock', './yarn.lock') }} - restore-keys: | - c-${{ runner.os }}-${{ matrix.webpack-version }}-yarn- + cache: "yarn" - name: Install dependencies run: yarn From 3e2bb731c2c7f6a9948800c72e82ede0da4ba4cc Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Sun, 25 Jul 2021 22:09:20 +0530 Subject: [PATCH 073/173] ci: migrate to `actions/setup-node@v2` (#2855) --- .github/workflows/nodejs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 68ccaf37bdd..047a6cf9395 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -103,7 +103,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-node@v1 + - uses: actions/setup-node@v2 with: node-version: "12.x" From c4998e81c75a0c2863f30bab9438d8134c0ab853 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Jul 2021 13:25:56 +0300 Subject: [PATCH 074/173] chore(deps-dev): bump webpack from 5.46.0 to 5.47.0 (#2860) Bumps [webpack](https://github.com/webpack/webpack) from 5.46.0 to 5.47.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.46.0...v5.47.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/yarn.lock b/yarn.lock index e64f3287266..a47484876ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9790,11 +9790,6 @@ sort-keys@^4.0.0: dependencies: is-plain-obj "^2.0.0" -source-list-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -10983,18 +10978,15 @@ webpack-merge@^5.7.3: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" - integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== - dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" +webpack-sources@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.0.1.tgz#518cfabdbde3962f75bbecbacd11d88ab3205252" + integrity sha512-LkBxiXJ3tTuhLaS5gz6D6l77Et8mPWlghAe7bbnmi2PyN1CtkiL/YitR+I0pn9PtBC88Irqgg6F9dBJh8+sJRQ== webpack@^5.45.1: - version "5.46.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.46.0.tgz#105d20d96f79db59b316b0ae54316f0f630314b5" - integrity sha512-qxD0t/KTedJbpcXUmvMxY5PUvXDbF8LsThCzqomeGaDlCA6k998D8yYVwZMvO8sSM3BTEOaD4uzFniwpHaTIJw== + version "5.47.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.47.0.tgz#3c13862b5d7b428792bfe76c5f67a0f43ba685f8" + integrity sha512-soKLGwcUM1R3YEbJhJNiZzy7T43TnI7ENda/ywfDp9G1mDlDTpO+qfc8I5b0AzMr9xM3jyvQ0n7ctJyiXuXW6Q== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" @@ -11018,7 +11010,7 @@ webpack@^5.45.1: tapable "^2.1.1" terser-webpack-plugin "^5.1.3" watchpack "^2.2.0" - webpack-sources "^2.3.1" + webpack-sources "^3.0.1" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" From 24fb0293a624d66875129aed9f7d60cf53379865 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Jul 2021 13:30:12 +0300 Subject: [PATCH 075/173] chore(deps-dev): bump @typescript-eslint/parser from 4.28.4 to 4.28.5 (#2858) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.28.4 to 4.28.5. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.28.5/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index a47484876ed..ae3ba409427 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2065,13 +2065,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.28.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.4.tgz#bc462dc2779afeefdcf49082516afdc3e7b96fab" - integrity sha512-4i0jq3C6n+og7/uCHiE6q5ssw87zVdpUj1k6VlVYMonE3ILdFApEzTWgppSRG4kVNB/5jxnH+gTeKLMNfUelQA== + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.5.tgz#9c971668f86d1b5c552266c47788a87488a47d1c" + integrity sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw== dependencies: - "@typescript-eslint/scope-manager" "4.28.4" - "@typescript-eslint/types" "4.28.4" - "@typescript-eslint/typescript-estree" "4.28.4" + "@typescript-eslint/scope-manager" "4.28.5" + "@typescript-eslint/types" "4.28.5" + "@typescript-eslint/typescript-estree" "4.28.5" debug "^4.3.1" "@typescript-eslint/scope-manager@4.28.4": @@ -2082,11 +2082,24 @@ "@typescript-eslint/types" "4.28.4" "@typescript-eslint/visitor-keys" "4.28.4" +"@typescript-eslint/scope-manager@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz#3a1b70c50c1535ac33322786ea99ebe403d3b923" + integrity sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ== + dependencies: + "@typescript-eslint/types" "4.28.5" + "@typescript-eslint/visitor-keys" "4.28.5" + "@typescript-eslint/types@4.28.4": version "4.28.4" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.4.tgz#41acbd79b5816b7c0dd7530a43d97d020d3aeb42" integrity sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww== +"@typescript-eslint/types@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.5.tgz#d33edf8e429f0c0930a7c3d44e9b010354c422e9" + integrity sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA== + "@typescript-eslint/typescript-estree@4.28.4": version "4.28.4" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.4.tgz#252e6863278dc0727244be9e371eb35241c46d00" @@ -2100,6 +2113,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz#4906d343de693cf3d8dcc301383ed638e0441cd1" + integrity sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw== + dependencies: + "@typescript-eslint/types" "4.28.5" + "@typescript-eslint/visitor-keys" "4.28.5" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.28.4": version "4.28.4" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.4.tgz#92dacfefccd6751cbb0a964f06683bfd72d0c4d3" @@ -2108,6 +2134,14 @@ "@typescript-eslint/types" "4.28.4" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz#ffee2c602762ed6893405ee7c1144d9cc0a29675" + integrity sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg== + dependencies: + "@typescript-eslint/types" "4.28.5" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From 63d8070123463af88ff6fc45bc3e923922b941df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Jul 2021 13:30:31 +0300 Subject: [PATCH 076/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin (#2857) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 4.28.4 to 4.28.5. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.28.5/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index ae3ba409427..144089fa1c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2040,27 +2040,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.28.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.4.tgz#e73c8cabbf3f08dee0e1bda65ed4e622ae8f8921" - integrity sha512-s1oY4RmYDlWMlcV0kKPBaADn46JirZzvvH7c2CtAqxCY96S538JRBAzt83RrfkDheV/+G/vWNK0zek+8TB3Gmw== + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz#8197f1473e7da8218c6a37ff308d695707835684" + integrity sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q== dependencies: - "@typescript-eslint/experimental-utils" "4.28.4" - "@typescript-eslint/scope-manager" "4.28.4" + "@typescript-eslint/experimental-utils" "4.28.5" + "@typescript-eslint/scope-manager" "4.28.5" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.28.4": - version "4.28.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.4.tgz#9c70c35ebed087a5c70fb0ecd90979547b7fec96" - integrity sha512-OglKWOQRWTCoqMSy6pm/kpinEIgdcXYceIcH3EKWUl4S8xhFtN34GQRaAvTIZB9DD94rW7d/U7tUg3SYeDFNHA== +"@typescript-eslint/experimental-utils@4.28.5": + version "4.28.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz#66c28bef115b417cf9d80812a713e0e46bb42a64" + integrity sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.28.4" - "@typescript-eslint/types" "4.28.4" - "@typescript-eslint/typescript-estree" "4.28.4" + "@typescript-eslint/scope-manager" "4.28.5" + "@typescript-eslint/types" "4.28.5" + "@typescript-eslint/typescript-estree" "4.28.5" eslint-scope "^5.1.1" eslint-utils "^3.0.0" From a660ffcbeb2807bce1554f787297e697464abd59 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Jul 2021 13:32:54 +0300 Subject: [PATCH 077/173] chore(deps-dev): bump @types/node from 15.14.2 to 15.14.3 (#2856) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 15.14.2 to 15.14.3. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 144089fa1c3..3d5b2971a70 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1944,9 +1944,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@^15.0.3": - version "15.14.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.2.tgz#7af8ab20156586f076f4760bc1b3c5ddfffd1ff2" - integrity sha512-dvMUE/m2LbXPwlvVuzCyslTEtQ2ZwuuFClDrOQ6mp2CenCg971719PTILZ4I6bTP27xfFFc+o7x2TkLuun/MPw== + version "15.14.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.3.tgz#330763b973d0acacb7fdccc7594e1fb281ed1b1c" + integrity sha512-gliNP92vLGGha1nioYHIIT2WrZ450sxpRgyPCEyog2hMVi6LEbhY/Pkj+EDiGWrCXntZ9lrnE2+lTIlyYtaxCg== "@types/normalize-package-data@^2.4.0": version "2.4.0" From bfb96b9721472150f9ddc6817fbb0b8d357148ca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 31 Jul 2021 14:00:48 +0300 Subject: [PATCH 078/173] chore(deps-dev): bump @types/node from 15.14.3 to 15.14.4 (#2861) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 15.14.3 to 15.14.4. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 40 +++------------------------------------- 1 file changed, 3 insertions(+), 37 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3d5b2971a70..db23f2eb2bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1944,9 +1944,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@^15.0.3": - version "15.14.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.3.tgz#330763b973d0acacb7fdccc7594e1fb281ed1b1c" - integrity sha512-gliNP92vLGGha1nioYHIIT2WrZ450sxpRgyPCEyog2hMVi6LEbhY/Pkj+EDiGWrCXntZ9lrnE2+lTIlyYtaxCg== + version "15.14.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.4.tgz#aaf18436ef67f24676d92b8bbe0f5f41b08db3e8" + integrity sha512-yblJrsfCxdxYDUa2fM5sP93ZLk5xL3/+3MJei+YtsNbIdY75ePy2AiCfpq+onepzax+8/Yv+OD/fLNleWpCzVg== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -2074,14 +2074,6 @@ "@typescript-eslint/typescript-estree" "4.28.5" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.28.4": - version "4.28.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.4.tgz#bdbce9b6a644e34f767bd68bc17bb14353b9fe7f" - integrity sha512-ZJBNs4usViOmlyFMt9X9l+X0WAFcDH7EdSArGqpldXu7aeZxDAuAzHiMAeI+JpSefY2INHrXeqnha39FVqXb8w== - dependencies: - "@typescript-eslint/types" "4.28.4" - "@typescript-eslint/visitor-keys" "4.28.4" - "@typescript-eslint/scope-manager@4.28.5": version "4.28.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz#3a1b70c50c1535ac33322786ea99ebe403d3b923" @@ -2090,29 +2082,11 @@ "@typescript-eslint/types" "4.28.5" "@typescript-eslint/visitor-keys" "4.28.5" -"@typescript-eslint/types@4.28.4": - version "4.28.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.4.tgz#41acbd79b5816b7c0dd7530a43d97d020d3aeb42" - integrity sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww== - "@typescript-eslint/types@4.28.5": version "4.28.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.5.tgz#d33edf8e429f0c0930a7c3d44e9b010354c422e9" integrity sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA== -"@typescript-eslint/typescript-estree@4.28.4": - version "4.28.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.4.tgz#252e6863278dc0727244be9e371eb35241c46d00" - integrity sha512-z7d8HK8XvCRyN2SNp+OXC2iZaF+O2BTquGhEYLKLx5k6p0r05ureUtgEfo5f6anLkhCxdHtCf6rPM1p4efHYDQ== - dependencies: - "@typescript-eslint/types" "4.28.4" - "@typescript-eslint/visitor-keys" "4.28.4" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.28.5": version "4.28.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz#4906d343de693cf3d8dcc301383ed638e0441cd1" @@ -2126,14 +2100,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.28.4": - version "4.28.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.4.tgz#92dacfefccd6751cbb0a964f06683bfd72d0c4d3" - integrity sha512-NIAXAdbz1XdOuzqkJHjNKXKj8QQ4cv5cxR/g0uQhCYf/6//XrmfpaYsM7PnBcNbfvTDLUkqQ5TPNm1sozDdTWg== - dependencies: - "@typescript-eslint/types" "4.28.4" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.28.5": version "4.28.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz#ffee2c602762ed6893405ee7c1144d9cc0a29675" From 2176ebe89718733f1eb9ff41bbf73a517cdf54c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 31 Jul 2021 14:01:09 +0300 Subject: [PATCH 079/173] chore(deps-dev): bump webpack from 5.47.0 to 5.47.1 (#2863) Bumps [webpack](https://github.com/webpack/webpack) from 5.47.0 to 5.47.1. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.47.0...v5.47.1) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index db23f2eb2bb..239e279bacc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10978,15 +10978,15 @@ webpack-merge@^5.7.3: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.0.1.tgz#518cfabdbde3962f75bbecbacd11d88ab3205252" - integrity sha512-LkBxiXJ3tTuhLaS5gz6D6l77Et8mPWlghAe7bbnmi2PyN1CtkiL/YitR+I0pn9PtBC88Irqgg6F9dBJh8+sJRQ== +webpack-sources@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.1.1.tgz#586d15bc9a9723765f6a735f672357d6402f9c57" + integrity sha512-ztUmIWq0LWaw+1YyR3bXtUPjt8vQedtI9WxGn/q1V1ASHsombnaso7MN9S25lzKS/OuC9Q8lEg3GsZexjDbdlQ== webpack@^5.45.1: - version "5.47.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.47.0.tgz#3c13862b5d7b428792bfe76c5f67a0f43ba685f8" - integrity sha512-soKLGwcUM1R3YEbJhJNiZzy7T43TnI7ENda/ywfDp9G1mDlDTpO+qfc8I5b0AzMr9xM3jyvQ0n7ctJyiXuXW6Q== + version "5.47.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.47.1.tgz#20fb7d76f68912a2249a6dd7ff16faa178049ad2" + integrity sha512-cW+Mzy9SCDapFV4OrkHuP6EFV2mAsiQd+gOa3PKtHNoKg6qPqQXZzBlHH+CnQG1osplBCqwsJZ8CfGO6XWah0g== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" @@ -11010,7 +11010,7 @@ webpack@^5.45.1: tapable "^2.1.1" terser-webpack-plugin "^5.1.3" watchpack "^2.2.0" - webpack-sources "^3.0.1" + webpack-sources "^3.1.1" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" From 0d3560aa100d20e041e6ad2bb5de3d218a5763e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Aug 2021 15:49:51 +0300 Subject: [PATCH 080/173] chore(deps-dev): bump @types/node --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 239e279bacc..7636fba6bb2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1944,9 +1944,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@^15.0.3": - version "15.14.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.4.tgz#aaf18436ef67f24676d92b8bbe0f5f41b08db3e8" - integrity sha512-yblJrsfCxdxYDUa2fM5sP93ZLk5xL3/+3MJei+YtsNbIdY75ePy2AiCfpq+onepzax+8/Yv+OD/fLNleWpCzVg== + version "15.14.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.5.tgz#7b5b3532053fd14c771ad6598a4ee2c7a85aceca" + integrity sha512-6ewfMNmkumZieB/EeJ4cdP1bbJyOlOt5MTwbKMr7WKxyCt2j09H8YWRK6zOd/Jh35Vu/gls39ZUmeu4vHu1WKQ== "@types/normalize-package-data@^2.4.0": version "2.4.0" From 11d75a4df1323dfeda0a9fccc6f6b916c6c2e1a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Aug 2021 15:50:08 +0300 Subject: [PATCH 081/173] chore(deps-dev): bump eslint from 7.31.0 to 7.32.0 (#2866) --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7636fba6bb2..b439c46a149 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4338,9 +4338,9 @@ eslint-visitor-keys@^2.0.0: integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint@^7.12.1: - version "7.31.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.31.0.tgz#f972b539424bf2604907a970860732c5d99d3aca" - integrity sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA== + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== dependencies: "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.4.3" From b6c9b3d0532d4aee7bfb7d670e3ba03b95563ed5 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Mon, 2 Aug 2021 18:40:58 +0530 Subject: [PATCH 082/173] docs: update options (#2865) --- OPTIONS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/OPTIONS.md b/OPTIONS.md index c03635a100a..a79015a6c79 100644 --- a/OPTIONS.md +++ b/OPTIONS.md @@ -942,6 +942,8 @@ Options: --no-stats-group-modules-by-path Negative 'stats-group-modules-by-path' option. --stats-group-modules-by-type Group modules by their type. --no-stats-group-modules-by-type Negative 'stats-group-modules-by-type' option. + --stats-group-reasons-by-origin Group reasons by their origin module. + --no-stats-group-reasons-by-origin Negative 'stats-group-reasons-by-origin' option. --stats-hash Add the hash of the compilation. --no-stats-hash Negative 'stats-hash' option. --stats-ids Add ids. @@ -984,6 +986,7 @@ Options: --no-stats-public-path Negative 'stats-public-path' option. --stats-reasons Add information about the reasons why modules are included. --no-stats-reasons Negative 'stats-reasons' option. + --stats-reasons-space Space to display reasons (groups will be collapsed to fit this space). --stats-related-assets Add information about assets that are related to other assets (like SourceMaps for assets). --no-stats-related-assets Negative 'stats-related-assets' option. --stats-runtime Add information about runtime modules (deprecated: use 'runtimeModules' instead). From f44f67a78d117db8cca91649ca85cde61f8cca04 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Aug 2021 15:26:03 +0300 Subject: [PATCH 083/173] chore(deps-dev): bump webpack from 5.47.1 to 5.48.0 (#2871) Bumps [webpack](https://github.com/webpack/webpack) from 5.47.1 to 5.48.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.47.1...v5.48.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index b439c46a149..d31e2904da1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2302,6 +2302,11 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" +acorn-import-assertions@^1.7.6: + version "1.7.6" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz#580e3ffcae6770eebeec76c3b9723201e9d01f78" + integrity sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA== + acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" @@ -10978,15 +10983,15 @@ webpack-merge@^5.7.3: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.1.1.tgz#586d15bc9a9723765f6a735f672357d6402f9c57" - integrity sha512-ztUmIWq0LWaw+1YyR3bXtUPjt8vQedtI9WxGn/q1V1ASHsombnaso7MN9S25lzKS/OuC9Q8lEg3GsZexjDbdlQ== +webpack-sources@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.0.tgz#b16973bcf844ebcdb3afde32eda1c04d0b90f89d" + integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== webpack@^5.45.1: - version "5.47.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.47.1.tgz#20fb7d76f68912a2249a6dd7ff16faa178049ad2" - integrity sha512-cW+Mzy9SCDapFV4OrkHuP6EFV2mAsiQd+gOa3PKtHNoKg6qPqQXZzBlHH+CnQG1osplBCqwsJZ8CfGO6XWah0g== + version "5.48.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.48.0.tgz#06180fef9767a6fd066889559a4c4d49bee19b83" + integrity sha512-CGe+nfbHrYzbk7SKoYITCgN3LRAG0yVddjNUecz9uugo1QtYdiyrVD8nP1PhkNqPfdxC2hknmmKpP355Epyn6A== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" @@ -10994,6 +10999,7 @@ webpack@^5.45.1: "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" acorn "^8.4.1" + acorn-import-assertions "^1.7.6" browserslist "^4.14.5" chrome-trace-event "^1.0.2" enhanced-resolve "^5.8.0" @@ -11010,7 +11016,7 @@ webpack@^5.45.1: tapable "^2.1.1" terser-webpack-plugin "^5.1.3" watchpack "^2.2.0" - webpack-sources "^3.1.1" + webpack-sources "^3.2.0" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" From 5a036ad8bd06b5eaddb82897b8a232b6646a1d8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Aug 2021 15:30:55 +0300 Subject: [PATCH 084/173] chore(deps-dev): bump @typescript-eslint/parser --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index d31e2904da1..c11c8fae544 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2065,13 +2065,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.5.tgz#9c971668f86d1b5c552266c47788a87488a47d1c" - integrity sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw== + version "4.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.29.0.tgz#e5367ca3c63636bb5d8e0748fcbab7a4f4a04289" + integrity sha512-+92YRNHFdXgq+GhWQPT2bmjX09X7EH36JfgN2/4wmhtwV/HPxozpCNst8jrWcngLtEVd/4zAwA6BKojAlf+YqA== dependencies: - "@typescript-eslint/scope-manager" "4.28.5" - "@typescript-eslint/types" "4.28.5" - "@typescript-eslint/typescript-estree" "4.28.5" + "@typescript-eslint/scope-manager" "4.29.0" + "@typescript-eslint/types" "4.29.0" + "@typescript-eslint/typescript-estree" "4.29.0" debug "^4.3.1" "@typescript-eslint/scope-manager@4.28.5": @@ -2082,11 +2082,24 @@ "@typescript-eslint/types" "4.28.5" "@typescript-eslint/visitor-keys" "4.28.5" +"@typescript-eslint/scope-manager@4.29.0": + version "4.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.0.tgz#cf5474f87321bedf416ef65839b693bddd838599" + integrity sha512-HPq7XAaDMM3DpmuijxLV9Io8/6pQnliiXMQUcAdjpJJSR+fdmbD/zHCd7hMkjJn04UQtCQBtshgxClzg6NIS2w== + dependencies: + "@typescript-eslint/types" "4.29.0" + "@typescript-eslint/visitor-keys" "4.29.0" + "@typescript-eslint/types@4.28.5": version "4.28.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.5.tgz#d33edf8e429f0c0930a7c3d44e9b010354c422e9" integrity sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA== +"@typescript-eslint/types@4.29.0": + version "4.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.0.tgz#c8f1a1e4441ea4aca9b3109241adbc145f7f8a4e" + integrity sha512-2YJM6XfWfi8pgU2HRhTp7WgRw78TCRO3dOmSpAvIQ8MOv4B46JD2chnhpNT7Jq8j0APlIbzO1Bach734xxUl4A== + "@typescript-eslint/typescript-estree@4.28.5": version "4.28.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz#4906d343de693cf3d8dcc301383ed638e0441cd1" @@ -2100,6 +2113,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.29.0": + version "4.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.0.tgz#af7ab547757b86c91bfdbc54ff86845410856256" + integrity sha512-8ZpNHDIOyqzzgZrQW9+xQ4k5hM62Xy2R4RPO3DQxMc5Rq5QkCdSpk/drka+DL9w6sXNzV5nrdlBmf8+x495QXQ== + dependencies: + "@typescript-eslint/types" "4.29.0" + "@typescript-eslint/visitor-keys" "4.29.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.28.5": version "4.28.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz#ffee2c602762ed6893405ee7c1144d9cc0a29675" @@ -2108,6 +2134,14 @@ "@typescript-eslint/types" "4.28.5" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.29.0": + version "4.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.0.tgz#1ff60f240def4d85ea68d4fd2e4e9759b7850c04" + integrity sha512-LoaofO1C/jAJYs0uEpYMXfHboGXzOJeV118X4OsZu9f7rG7Pr9B3+4HTU8+err81rADa4xfQmAxnRnPAI2jp+Q== + dependencies: + "@typescript-eslint/types" "4.29.0" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From 26d4ba0907dc091853d0f3910ca3d0d36fa96f80 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Aug 2021 15:32:46 +0300 Subject: [PATCH 085/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin --- yarn.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index c11c8fae544..e916116bbef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2040,27 +2040,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz#8197f1473e7da8218c6a37ff308d695707835684" - integrity sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q== + version "4.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.0.tgz#b866c9cd193bfaba5e89bade0015629ebeb27996" + integrity sha512-eiREtqWRZ8aVJcNru7cT/AMVnYd9a2UHsfZT8MR1dW3UUEg6jDv9EQ9Cq4CUPZesyQ58YUpoAADGv71jY8RwgA== dependencies: - "@typescript-eslint/experimental-utils" "4.28.5" - "@typescript-eslint/scope-manager" "4.28.5" + "@typescript-eslint/experimental-utils" "4.29.0" + "@typescript-eslint/scope-manager" "4.29.0" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.28.5": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz#66c28bef115b417cf9d80812a713e0e46bb42a64" - integrity sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA== +"@typescript-eslint/experimental-utils@4.29.0": + version "4.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.0.tgz#19b1417602d0e1ef325b3312ee95f61220542df5" + integrity sha512-FpNVKykfeaIxlArLUP/yQfv/5/3rhl1ov6RWgud4OgbqWLkEq7lqgQU9iiavZRzpzCRQV4XddyFz3wFXdkiX9w== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.28.5" - "@typescript-eslint/types" "4.28.5" - "@typescript-eslint/typescript-estree" "4.28.5" + "@typescript-eslint/scope-manager" "4.29.0" + "@typescript-eslint/types" "4.29.0" + "@typescript-eslint/typescript-estree" "4.29.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" From 27f1334cef669e0dca6b09365f787bfb9b22933e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Aug 2021 13:49:11 +0300 Subject: [PATCH 086/173] chore(deps): bump tar from 4.4.13 to 4.4.15 (#2875) Bumps [tar](https://github.com/npm/node-tar) from 4.4.13 to 4.4.15. - [Release notes](https://github.com/npm/node-tar/releases) - [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/node-tar/compare/v4.4.13...v4.4.15) --- updated-dependencies: - dependency-name: tar dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 40 +++------------------------------------- 1 file changed, 3 insertions(+), 37 deletions(-) diff --git a/yarn.lock b/yarn.lock index e916116bbef..ae33741563d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2074,14 +2074,6 @@ "@typescript-eslint/typescript-estree" "4.29.0" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.28.5": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz#3a1b70c50c1535ac33322786ea99ebe403d3b923" - integrity sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ== - dependencies: - "@typescript-eslint/types" "4.28.5" - "@typescript-eslint/visitor-keys" "4.28.5" - "@typescript-eslint/scope-manager@4.29.0": version "4.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.0.tgz#cf5474f87321bedf416ef65839b693bddd838599" @@ -2090,29 +2082,11 @@ "@typescript-eslint/types" "4.29.0" "@typescript-eslint/visitor-keys" "4.29.0" -"@typescript-eslint/types@4.28.5": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.5.tgz#d33edf8e429f0c0930a7c3d44e9b010354c422e9" - integrity sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA== - "@typescript-eslint/types@4.29.0": version "4.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.0.tgz#c8f1a1e4441ea4aca9b3109241adbc145f7f8a4e" integrity sha512-2YJM6XfWfi8pgU2HRhTp7WgRw78TCRO3dOmSpAvIQ8MOv4B46JD2chnhpNT7Jq8j0APlIbzO1Bach734xxUl4A== -"@typescript-eslint/typescript-estree@4.28.5": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz#4906d343de693cf3d8dcc301383ed638e0441cd1" - integrity sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw== - dependencies: - "@typescript-eslint/types" "4.28.5" - "@typescript-eslint/visitor-keys" "4.28.5" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.29.0": version "4.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.0.tgz#af7ab547757b86c91bfdbc54ff86845410856256" @@ -2126,14 +2100,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.28.5": - version "4.28.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz#ffee2c602762ed6893405ee7c1144d9cc0a29675" - integrity sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg== - dependencies: - "@typescript-eslint/types" "4.28.5" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.29.0": version "4.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.0.tgz#1ff60f240def4d85ea68d4fd2e4e9759b7850c04" @@ -10266,9 +10232,9 @@ tapable@^2.1.1, tapable@^2.2.0: integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== tar@^4.4.12: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + version "4.4.15" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.15.tgz#3caced4f39ebd46ddda4d6203d48493a919697f8" + integrity sha512-ItbufpujXkry7bHH9NpQyTXPbJ72iTlXgkBAYsAjDXk3Ds8t/3NfO5P4xZGy7u+sYuQUbimgzswX4uQIEeNVOA== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" From 3e1983f86ae39ec25942abd7f8e2d58558020e03 Mon Sep 17 00:00:00 2001 From: Anshuman Verma Date: Wed, 4 Aug 2021 19:46:54 +0530 Subject: [PATCH 087/173] ci: update commitlint action in CI (#2876) --- .github/workflows/nodejs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 047a6cf9395..aeb5dce92cd 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -113,4 +113,4 @@ jobs: # $GITHUB_WORKSPACE is the path to your repository run: echo "NODE_PATH=$GITHUB_WORKSPACE/node_modules" >> $GITHUB_ENV - - uses: wagoid/commitlint-github-action@v2 + - uses: wagoid/commitlint-github-action@v4 From 61726c1e3f257b458476a0a21f6a730334bd1b73 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Aug 2021 15:19:20 +0300 Subject: [PATCH 088/173] chore(deps-dev): bump @types/node --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ae33741563d..a66ca78380b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1944,9 +1944,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@^15.0.3": - version "15.14.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.5.tgz#7b5b3532053fd14c771ad6598a4ee2c7a85aceca" - integrity sha512-6ewfMNmkumZieB/EeJ4cdP1bbJyOlOt5MTwbKMr7WKxyCt2j09H8YWRK6zOd/Jh35Vu/gls39ZUmeu4vHu1WKQ== + version "15.14.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.7.tgz#29fea9a5b14e2b75c19028e1c7a32edd1e89fe92" + integrity sha512-FA45p37/mLhpebgbPWWCKfOisTjxGK9lwcHlJ6XVLfu3NgfcazOJHdYUZCWPMK8QX4LhNZdmfo6iMz9FqpUbaw== "@types/normalize-package-data@^2.4.0": version "2.4.0" From 82b1fb7441f04595ac90626235d506f29e5bb107 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Thu, 5 Aug 2021 19:57:37 +0300 Subject: [PATCH 089/173] fix: support top multi compiler options (#2874) --- packages/webpack-cli/lib/webpack-cli.js | 227 ++++++++++-------- .../top-multi-compilers-options/index.js | 6 + .../top-multi-compilers-options.test.js | 35 +++ .../webpack.config.js | 43 ++++ 4 files changed, 207 insertions(+), 104 deletions(-) create mode 100644 test/build/config/top-multi-compilers-options/index.js create mode 100644 test/build/config/top-multi-compilers-options/top-multi-compilers-options.test.js create mode 100644 test/build/config/top-multi-compilers-options/webpack.config.js diff --git a/packages/webpack-cli/lib/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index 14d2294638e..168d75d45da 100644 --- a/packages/webpack-cli/lib/webpack-cli.js +++ b/packages/webpack-cli/lib/webpack-cli.js @@ -847,7 +847,7 @@ class WebpackCLI { options.entry = [...entries, ...(options.entry || [])]; } - await this.buildCommand(options, isWatchCommandUsed); + await this.runWebpack(options, isWatchCommandUsed); }, ); } else if (isCommand(commandName, helpCommandOptions)) { @@ -1521,107 +1521,124 @@ class WebpackCLI { await this.program.parseAsync(args, parseOptions); } - async resolveConfig(options) { - const loadConfig = async (configPath) => { - const { interpret } = this.utils; - const ext = path.extname(configPath); - const interpreted = Object.keys(interpret.jsVariants).find( - (variant) => variant === ext, - ); + async loadConfig(configPath, argv = {}) { + const { interpret } = this.utils; + const ext = path.extname(configPath); + const interpreted = Object.keys(interpret.jsVariants).find((variant) => variant === ext); - if (interpreted) { - const { rechoir } = this.utils; - - try { - rechoir.prepare(interpret.extensions, configPath); - } catch (error) { - if (error.failures) { - this.logger.error(`Unable load '${configPath}'`); - this.logger.error(error.message); - - error.failures.forEach((failure) => { - this.logger.error(failure.error.message); - }); - this.logger.error("Please install one of them"); - process.exit(2); - } - - this.logger.error(error); - process.exit(2); - } - } - - let options; + if (interpreted) { + const { rechoir } = this.utils; try { - options = await this.tryRequireThenImport(configPath, false); + rechoir.prepare(interpret.extensions, configPath); } catch (error) { - this.logger.error(`Failed to load '${configPath}' config`); - - if (this.isValidationError(error)) { + if (error.failures) { + this.logger.error(`Unable load '${configPath}'`); this.logger.error(error.message); - } else { - this.logger.error(error); + + error.failures.forEach((failure) => { + this.logger.error(failure.error.message); + }); + this.logger.error("Please install one of them"); + process.exit(2); } + this.logger.error(error); process.exit(2); } + } - return { options, path: configPath }; - }; + let options; - const evaluateConfig = async (loadedConfig, argv) => { - const isMultiCompiler = Array.isArray(loadedConfig.options); - const config = isMultiCompiler ? loadedConfig.options : [loadedConfig.options]; + try { + options = await this.tryRequireThenImport(configPath, false); + } catch (error) { + this.logger.error(`Failed to load '${configPath}' config`); + + if (this.isValidationError(error)) { + this.logger.error(error.message); + } else { + this.logger.error(error); + } - const evaluatedConfig = await Promise.all( - config.map(async (rawConfig) => { - if (typeof rawConfig.then === "function") { - rawConfig = await rawConfig; + process.exit(2); + } + + if (Array.isArray(options)) { + await Promise.all( + options.map(async (_, i) => { + if (typeof options[i].then === "function") { + options[i] = await options[i]; } // `Promise` may return `Function` - if (typeof rawConfig === "function") { + if (typeof options[i] === "function") { // when config is a function, pass the env from args to the config function - rawConfig = await rawConfig(argv.env, argv); + options[i] = await options[i](argv.env, argv); } - - return rawConfig; }), ); + } else { + if (typeof options.then === "function") { + options = await options; + } - loadedConfig.options = isMultiCompiler ? evaluatedConfig : evaluatedConfig[0]; + // `Promise` may return `Function` + if (typeof options === "function") { + // when config is a function, pass the env from args to the config function + options = await options(argv.env, argv); + } + } - const isObject = (value) => typeof value === "object" && value !== null; + const isObject = (value) => typeof value === "object" && value !== null; - if (!isObject(loadedConfig.options) && !Array.isArray(loadedConfig.options)) { - this.logger.error(`Invalid configuration in '${loadedConfig.path}'`); - process.exit(2); - } + if (!isObject(options) && !Array.isArray(options)) { + this.logger.error(`Invalid configuration in '${configPath}'`); - return loadedConfig; - }; + process.exit(2); + } + return { options, path: configPath }; + } + + async resolveConfig(options) { const config = { options: {}, path: new WeakMap() }; if (options.config && options.config.length > 0) { - const evaluatedConfigs = await Promise.all( - options.config.map(async (value) => - evaluateConfig(await loadConfig(path.resolve(value)), options.argv || {}), + const loadedConfigs = await Promise.all( + options.config.map((configPath) => + this.loadConfig(path.resolve(configPath), options.argv), ), ); config.options = []; - evaluatedConfigs.forEach((evaluatedConfig) => { - if (Array.isArray(evaluatedConfig.options)) { - evaluatedConfig.options.forEach((options) => { - config.options.push(options); - config.path.set(options, evaluatedConfig.path); + loadedConfigs.forEach((loadedConfig) => { + const isArray = Array.isArray(loadedConfig.options); + + // TODO we should run webpack multiple times when the `--config` options have multiple values with `--merge`, need to solve for the next major release + if (config.options.length === 0) { + config.options = loadedConfig.options; + } else { + if (!Array.isArray(config.options)) { + config.options = [config.options]; + } + + if (isArray) { + loadedConfig.options.forEach((item) => { + config.options.push(item); + }); + } else { + config.options.push(loadedConfig.options); + } + } + + if (isArray) { + loadedConfig.options.forEach((options) => { + config.path.set(options, loadedConfig.path); }); } else { - config.options.push(evaluatedConfig.options); - config.path.set(evaluatedConfig.options, evaluatedConfig.path); + config.path.set(loadedConfig.options, loadedConfig.path); } }); @@ -1657,23 +1674,25 @@ class WebpackCLI { } if (foundDefaultConfigFile) { - const loadedConfig = await loadConfig(foundDefaultConfigFile.path); - const evaluatedConfig = await evaluateConfig(loadedConfig, options.argv || {}); + const loadedConfig = await this.loadConfig( + foundDefaultConfigFile.path, + options.argv, + ); - config.options = evaluatedConfig.options; + config.options = loadedConfig.options; if (Array.isArray(config.options)) { - config.options.forEach((options) => { - config.path.set(options, evaluatedConfig.path); + config.options.forEach((item) => { + config.path.set(item, loadedConfig.path); }); } else { - config.path.set(evaluatedConfig.options, evaluatedConfig.path); + config.path.set(loadedConfig.options, loadedConfig.path); } } } if (options.configName) { - const notfoundConfigNames = []; + const notFoundConfigNames = []; config.options = options.configName.map((configName) => { let found; @@ -1685,15 +1704,15 @@ class WebpackCLI { } if (!found) { - notfoundConfigNames.push(configName); + notFoundConfigNames.push(configName); } return found; }); - if (notfoundConfigNames.length > 0) { + if (notFoundConfigNames.length > 0) { this.logger.error( - notfoundConfigNames + notFoundConfigNames .map( (configName) => `Configuration with the name "${configName}" was not found.`, @@ -1731,6 +1750,18 @@ class WebpackCLI { return config; } + runFunctionOnOptions(options, fn) { + if (Array.isArray(options)) { + for (let item of options) { + item = fn(item); + } + } else { + options = fn(options); + } + + return options; + } + // TODO refactor async applyOptions(config, options) { if (options.analyze) { @@ -1786,9 +1817,7 @@ class WebpackCLI { return configOptions; }; - config.options = Array.isArray(config.options) - ? config.options.map((options) => outputHints(options)) - : outputHints(config.options); + this.runFunctionOnOptions(config.options, outputHints); if (this.webpack.cli) { const processArguments = (configOptions) => { @@ -1850,9 +1879,7 @@ class WebpackCLI { return configOptions; }; - config.options = Array.isArray(config.options) - ? config.options.map((options) => processArguments(options)) - : processArguments(config.options); + this.runFunctionOnOptions(config.options, processArguments); const setupDefaultOptions = (configOptions) => { // No need to run for webpack@4 @@ -1881,9 +1908,7 @@ class WebpackCLI { return configOptions; }; - config.options = Array.isArray(config.options) - ? config.options.map((options) => setupDefaultOptions(options)) - : setupDefaultOptions(config.options); + this.runFunctionOnOptions(config.options, setupDefaultOptions); } // Logic for webpack@4 @@ -1943,12 +1968,10 @@ class WebpackCLI { return configOptions; }; - config.options = Array.isArray(config.options) - ? config.options.map((options) => processLegacyArguments(options)) - : processLegacyArguments(config.options); + this.runFunctionOnOptions(config.options, processLegacyArguments); // Apply `stats` and `stats.colors` options - const applyStatsColors = (configOptions) => { + const applyStatsOption = (configOptions) => { // TODO remove after drop webpack@4 const statsForWebpack4 = this.webpack.Stats && this.webpack.Stats.presetToOptions; @@ -2005,9 +2028,7 @@ class WebpackCLI { return configOptions; }; - config.options = Array.isArray(config.options) - ? config.options.map((options) => applyStatsColors(options)) - : applyStatsColors(config.options); + this.runFunctionOnOptions(config.options, applyStatsOption); return config; } @@ -2015,14 +2036,14 @@ class WebpackCLI { async applyCLIPlugin(config, cliOptions) { const CLIPlugin = await this.tryRequireThenImport("./plugins/CLIPlugin"); - const addCLIPlugin = (configOptions) => { - if (!configOptions.plugins) { - configOptions.plugins = []; + const addCLIPlugin = (options) => { + if (!options.plugins) { + options.plugins = []; } - configOptions.plugins.unshift( + options.plugins.unshift( new CLIPlugin({ - configPath: config.path.get(configOptions), + configPath: config.path.get(options), helpfulOutput: !cliOptions.json, hot: cliOptions.hot, progress: cliOptions.progress, @@ -2031,12 +2052,10 @@ class WebpackCLI { }), ); - return configOptions; + return options; }; - config.options = Array.isArray(config.options) - ? config.options.map((options) => addCLIPlugin(options)) - : addCLIPlugin(config.options); + this.runFunctionOnOptions(config.options, addCLIPlugin); return config; } @@ -2102,7 +2121,7 @@ class WebpackCLI { return compiler; } - async buildCommand(options, isWatchCommand) { + async runWebpack(options, isWatchCommand) { // eslint-disable-next-line prefer-const let compiler; let createJsonStringifyStream; diff --git a/test/build/config/top-multi-compilers-options/index.js b/test/build/config/top-multi-compilers-options/index.js new file mode 100644 index 00000000000..97f0cb45e3a --- /dev/null +++ b/test/build/config/top-multi-compilers-options/index.js @@ -0,0 +1,6 @@ +console.log(`test ${Math.random()}`); +console.log(`test ${Math.random()}`); +console.log(`test ${Math.random()}`); +console.log(`test ${Math.random()}`); +console.log(`test ${Math.random()}`); +console.log(`test ${Math.random()}`); diff --git a/test/build/config/top-multi-compilers-options/top-multi-compilers-options.test.js b/test/build/config/top-multi-compilers-options/top-multi-compilers-options.test.js new file mode 100644 index 00000000000..607a82e3e3c --- /dev/null +++ b/test/build/config/top-multi-compilers-options/top-multi-compilers-options.test.js @@ -0,0 +1,35 @@ +"use strict"; + +const { resolve } = require("path"); +const { run, isWebpack5 } = require("../../../utils/test-utils"); + +describe("top multi compiler options", () => { + it("should work without provided configuration", async () => { + const { exitCode, stderr, stdout } = await run(__dirname); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + + if (isWebpack5) { + expect(stdout).toContain("Done build0\nDone build1\nDone build2\nDone build3"); + } else { + expect(stdout).toBeTruthy(); + } + }); + + it("should work with provided configuration", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + + if (isWebpack5) { + expect(stdout).toContain("Done build0\nDone build1\nDone build2\nDone build3"); + } else { + expect(stdout).toBeTruthy(); + } + }); +}); diff --git a/test/build/config/top-multi-compilers-options/webpack.config.js b/test/build/config/top-multi-compilers-options/webpack.config.js new file mode 100644 index 00000000000..42189f57083 --- /dev/null +++ b/test/build/config/top-multi-compilers-options/webpack.config.js @@ -0,0 +1,43 @@ +class SimpleProgressWebpackPlugin { + constructor(options) { + this.options = options; + } + + apply(compiler) { + compiler.hooks.done.tap("test", () => { + console.log("Done", this.options.name); + }); + } +} + +const configs = []; + +for (let i = 0; i < 3; i++) { + configs.push({ + mode: "development", + name: `build${i}`, + entry: "./index.js", + plugins: [ + new SimpleProgressWebpackPlugin({ + name: `build${i}`, + }), + ], + }); +} + +configs.push(async () => { + return { + mode: "development", + name: `build${3}`, + entry: "./index.js", + plugins: [ + new SimpleProgressWebpackPlugin({ + name: `build${3}`, + format: "simple", + }), + ], + }; +}); + +module.exports = configs; +module.exports.parallelism = 1; From 6501da66bae3d6b5cb22b96f48ba1c1980bc9930 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Thu, 5 Aug 2021 21:50:06 +0300 Subject: [PATCH 090/173] test: more (#2878) --- test/build/core-flags/core-flags.test.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/build/core-flags/core-flags.test.js b/test/build/core-flags/core-flags.test.js index 4ce5c0d9cbf..4e71ba4bd0d 100644 --- a/test/build/core-flags/core-flags.test.js +++ b/test/build/core-flags/core-flags.test.js @@ -93,6 +93,14 @@ describe("core flags", () => { expect(stderr).toBeFalsy(); expect(stdout).toContain("parallelism: 10"); }); + + it("should set parallelism option correctly using `=`", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--parallelism=10"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("parallelism: 10"); + }); }); describe("enum type flags", () => { @@ -231,6 +239,22 @@ describe("core flags", () => { expect(stdout).toContain(`devtool: 'source-map'`); }); + it("should allow string value devtool option using alias", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-d", "source-map"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`devtool: 'source-map'`); + }); + + it("should allow string value devtool option using alias #1", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-dsource-map"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`devtool: 'source-map'`); + }); + it("should allow --no-devtool", async () => { const { exitCode, stderr, stdout } = await run(__dirname, ["--no-devtool"]); From ce2c68d455e2a38d09c33bdb0ee84bb8609d288c Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Fri, 6 Aug 2021 15:11:21 +0530 Subject: [PATCH 091/173] ci: update `codecov-action` (#2880) --- .github/workflows/nodejs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index aeb5dce92cd..9babe882e1e 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -93,7 +93,7 @@ jobs: yarn test:coverage - name: Upload coverage to Codecov - uses: codecov/codecov-action@v1 + uses: codecov/codecov-action@v2 commitlint: name: Lint Commit Messages From f0da0431a4173a2a24261db542dbfa3277717daf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Aug 2021 14:41:02 +0300 Subject: [PATCH 092/173] chore(deps-dev): bump webpack from 5.48.0 to 5.49.0 (#2883) Bumps [webpack](https://github.com/webpack/webpack) from 5.48.0 to 5.49.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.48.0...v5.49.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index a66ca78380b..3c00e7d73cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10989,9 +10989,9 @@ webpack-sources@^3.2.0: integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== webpack@^5.45.1: - version "5.48.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.48.0.tgz#06180fef9767a6fd066889559a4c4d49bee19b83" - integrity sha512-CGe+nfbHrYzbk7SKoYITCgN3LRAG0yVddjNUecz9uugo1QtYdiyrVD8nP1PhkNqPfdxC2hknmmKpP355Epyn6A== + version "5.49.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.49.0.tgz#e250362b781a9fb614ba0a97ed67c66b9c5310cd" + integrity sha512-XarsANVf28A7Q3KPxSnX80EkCcuOer5hTOEJWJNvbskOZ+EK3pobHarGHceyUZMxpsTHBHhlV7hiQyLZzGosYw== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" From e91be2412e35947db44992664740b2d0e77e6364 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Mon, 9 Aug 2021 17:14:40 +0530 Subject: [PATCH 093/173] docs: update serve options link (#2882) --- packages/serve/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/serve/README.md b/packages/serve/README.md index 5566baf0710..44757464e4e 100644 --- a/packages/serve/README.md +++ b/packages/serve/README.md @@ -24,7 +24,7 @@ npx webpack-cli serve ### Options -Checkout [`SERVE-OPTIONS.md`](https://github.com/webpack/webpack-cli/blob/master/SERVE-OPTIONS.md) to see list of all available options for `serve` command. +Checkout [`SERVE-OPTIONS-v3.md`](https://github.com/webpack/webpack-cli/blob/master/SERVE-OPTIONS-v3.md) or [`SERVE-OPTIONS-v4.md`](https://github.com/webpack/webpack-cli/blob/master/SERVE-OPTIONS-v4.md) to see list of all available options for `serve` command for respective [`webpack-dev-server`](https://github.com/webpack/webpack-dev-server) version. [downloads]: https://img.shields.io/npm/dm/@webpack-cli/serve.svg [downloads-url]: https://www.npmjs.com/package/@webpack-cli/serve From dfd36abe55980570e829f9c252b1549004423a03 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Aug 2021 12:05:30 +0300 Subject: [PATCH 094/173] chore(deps-dev): bump @typescript-eslint/parser --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3c00e7d73cc..c7f5920a043 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2065,13 +2065,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.29.0.tgz#e5367ca3c63636bb5d8e0748fcbab7a4f4a04289" - integrity sha512-+92YRNHFdXgq+GhWQPT2bmjX09X7EH36JfgN2/4wmhtwV/HPxozpCNst8jrWcngLtEVd/4zAwA6BKojAlf+YqA== + version "4.29.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.29.1.tgz#17dfbb45c9032ffa0fe15881d20fbc2a4bdeb02d" + integrity sha512-3fL5iN20hzX3Q4OkG7QEPFjZV2qsVGiDhEwwh+EkmE/w7oteiOvUNzmpu5eSwGJX/anCryONltJ3WDmAzAoCMg== dependencies: - "@typescript-eslint/scope-manager" "4.29.0" - "@typescript-eslint/types" "4.29.0" - "@typescript-eslint/typescript-estree" "4.29.0" + "@typescript-eslint/scope-manager" "4.29.1" + "@typescript-eslint/types" "4.29.1" + "@typescript-eslint/typescript-estree" "4.29.1" debug "^4.3.1" "@typescript-eslint/scope-manager@4.29.0": @@ -2082,11 +2082,24 @@ "@typescript-eslint/types" "4.29.0" "@typescript-eslint/visitor-keys" "4.29.0" +"@typescript-eslint/scope-manager@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.1.tgz#f25da25bc6512812efa2ce5ebd36619d68e61358" + integrity sha512-Hzv/uZOa9zrD/W5mftZa54Jd5Fed3tL6b4HeaOpwVSabJK8CJ+2MkDasnX/XK4rqP5ZTWngK1ZDeCi6EnxPQ7A== + dependencies: + "@typescript-eslint/types" "4.29.1" + "@typescript-eslint/visitor-keys" "4.29.1" + "@typescript-eslint/types@4.29.0": version "4.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.0.tgz#c8f1a1e4441ea4aca9b3109241adbc145f7f8a4e" integrity sha512-2YJM6XfWfi8pgU2HRhTp7WgRw78TCRO3dOmSpAvIQ8MOv4B46JD2chnhpNT7Jq8j0APlIbzO1Bach734xxUl4A== +"@typescript-eslint/types@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.1.tgz#94cce6cf7cc83451df03339cda99d326be2feaf5" + integrity sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA== + "@typescript-eslint/typescript-estree@4.29.0": version "4.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.0.tgz#af7ab547757b86c91bfdbc54ff86845410856256" @@ -2100,6 +2113,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.1.tgz#7b32a25ff8e51f2671ccc6b26cdbee3b1e6c5e7f" + integrity sha512-lIkkrR9E4lwZkzPiRDNq0xdC3f2iVCUjw/7WPJ4S2Sl6C3nRWkeE1YXCQ0+KsiaQRbpY16jNaokdWnm9aUIsfw== + dependencies: + "@typescript-eslint/types" "4.29.1" + "@typescript-eslint/visitor-keys" "4.29.1" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.29.0": version "4.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.0.tgz#1ff60f240def4d85ea68d4fd2e4e9759b7850c04" @@ -2108,6 +2134,14 @@ "@typescript-eslint/types" "4.29.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz#0615be8b55721f5e854f3ee99f1a714f2d093e5d" + integrity sha512-zLqtjMoXvgdZY/PG6gqA73V8BjqPs4af1v2kiiETBObp+uC6gRYnJLmJHxC0QyUrrHDLJPIWNYxoBV3wbcRlag== + dependencies: + "@typescript-eslint/types" "4.29.1" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From 1a337aab3fa4709e3c1cab2b4f8a49f8c1915ea7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Aug 2021 12:05:41 +0300 Subject: [PATCH 095/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin (#2884) --- yarn.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index c7f5920a043..a65b11fe7d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2040,27 +2040,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.0.tgz#b866c9cd193bfaba5e89bade0015629ebeb27996" - integrity sha512-eiREtqWRZ8aVJcNru7cT/AMVnYd9a2UHsfZT8MR1dW3UUEg6jDv9EQ9Cq4CUPZesyQ58YUpoAADGv71jY8RwgA== + version "4.29.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.1.tgz#808d206e2278e809292b5de752a91105da85860b" + integrity sha512-AHqIU+SqZZgBEiWOrtN94ldR3ZUABV5dUG94j8Nms9rQnHFc8fvDOue/58K4CFz6r8OtDDc35Pw9NQPWo0Ayrw== dependencies: - "@typescript-eslint/experimental-utils" "4.29.0" - "@typescript-eslint/scope-manager" "4.29.0" + "@typescript-eslint/experimental-utils" "4.29.1" + "@typescript-eslint/scope-manager" "4.29.1" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.29.0": - version "4.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.0.tgz#19b1417602d0e1ef325b3312ee95f61220542df5" - integrity sha512-FpNVKykfeaIxlArLUP/yQfv/5/3rhl1ov6RWgud4OgbqWLkEq7lqgQU9iiavZRzpzCRQV4XddyFz3wFXdkiX9w== +"@typescript-eslint/experimental-utils@4.29.1": + version "4.29.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.1.tgz#0af2b17b0296b60c6b207f11062119fa9c5a8994" + integrity sha512-kl6QG6qpzZthfd2bzPNSJB2YcZpNOrP6r9jueXupcZHnL74WiuSjaft7WSu17J9+ae9zTlk0KJMXPUj0daBxMw== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.29.0" - "@typescript-eslint/types" "4.29.0" - "@typescript-eslint/typescript-estree" "4.29.0" + "@typescript-eslint/scope-manager" "4.29.1" + "@typescript-eslint/types" "4.29.1" + "@typescript-eslint/typescript-estree" "4.29.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" From 0b115a6caf2078577a0e43b06fa7adeee605aa12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 14:01:40 +0300 Subject: [PATCH 096/173] chore(deps-dev): bump webpack from 5.49.0 to 5.50.0 (#2889) --- yarn.lock | 40 +++------------------------------------- 1 file changed, 3 insertions(+), 37 deletions(-) diff --git a/yarn.lock b/yarn.lock index a65b11fe7d9..d48c326a4d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2074,14 +2074,6 @@ "@typescript-eslint/typescript-estree" "4.29.1" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.29.0": - version "4.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.0.tgz#cf5474f87321bedf416ef65839b693bddd838599" - integrity sha512-HPq7XAaDMM3DpmuijxLV9Io8/6pQnliiXMQUcAdjpJJSR+fdmbD/zHCd7hMkjJn04UQtCQBtshgxClzg6NIS2w== - dependencies: - "@typescript-eslint/types" "4.29.0" - "@typescript-eslint/visitor-keys" "4.29.0" - "@typescript-eslint/scope-manager@4.29.1": version "4.29.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.1.tgz#f25da25bc6512812efa2ce5ebd36619d68e61358" @@ -2090,29 +2082,11 @@ "@typescript-eslint/types" "4.29.1" "@typescript-eslint/visitor-keys" "4.29.1" -"@typescript-eslint/types@4.29.0": - version "4.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.0.tgz#c8f1a1e4441ea4aca9b3109241adbc145f7f8a4e" - integrity sha512-2YJM6XfWfi8pgU2HRhTp7WgRw78TCRO3dOmSpAvIQ8MOv4B46JD2chnhpNT7Jq8j0APlIbzO1Bach734xxUl4A== - "@typescript-eslint/types@4.29.1": version "4.29.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.1.tgz#94cce6cf7cc83451df03339cda99d326be2feaf5" integrity sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA== -"@typescript-eslint/typescript-estree@4.29.0": - version "4.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.0.tgz#af7ab547757b86c91bfdbc54ff86845410856256" - integrity sha512-8ZpNHDIOyqzzgZrQW9+xQ4k5hM62Xy2R4RPO3DQxMc5Rq5QkCdSpk/drka+DL9w6sXNzV5nrdlBmf8+x495QXQ== - dependencies: - "@typescript-eslint/types" "4.29.0" - "@typescript-eslint/visitor-keys" "4.29.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.29.1": version "4.29.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.1.tgz#7b32a25ff8e51f2671ccc6b26cdbee3b1e6c5e7f" @@ -2126,14 +2100,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.29.0": - version "4.29.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.0.tgz#1ff60f240def4d85ea68d4fd2e4e9759b7850c04" - integrity sha512-LoaofO1C/jAJYs0uEpYMXfHboGXzOJeV118X4OsZu9f7rG7Pr9B3+4HTU8+err81rADa4xfQmAxnRnPAI2jp+Q== - dependencies: - "@typescript-eslint/types" "4.29.0" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.29.1": version "4.29.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz#0615be8b55721f5e854f3ee99f1a714f2d093e5d" @@ -11023,9 +10989,9 @@ webpack-sources@^3.2.0: integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== webpack@^5.45.1: - version "5.49.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.49.0.tgz#e250362b781a9fb614ba0a97ed67c66b9c5310cd" - integrity sha512-XarsANVf28A7Q3KPxSnX80EkCcuOer5hTOEJWJNvbskOZ+EK3pobHarGHceyUZMxpsTHBHhlV7hiQyLZzGosYw== + version "5.50.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.50.0.tgz#5562d75902a749eb4d75131f5627eac3a3192527" + integrity sha512-hqxI7t/KVygs0WRv/kTgUW8Kl3YC81uyWQSo/7WUs5LsuRw0htH/fCwbVBGCuiX/t4s7qzjXFcf41O8Reiypag== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" From 846ab5798b5e61b800ca29d48535ce68821027ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 14:01:50 +0300 Subject: [PATCH 097/173] chore(deps): bump colorette from 1.2.2 to 1.3.0 (#2888) --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d48c326a4d8..789850ac49b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3346,9 +3346,9 @@ color-name@~1.1.4: integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" + integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== colors@1.0.3: version "1.0.3" From f8bd91d6e19d2171ee61c82f935491deb38486b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 15:34:06 +0300 Subject: [PATCH 098/173] chore(deps): bump url-parse from 1.5.1 to 1.5.3 (#2891) Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.1 to 1.5.3. - [Release notes](https://github.com/unshiftio/url-parse/releases) - [Commits](https://github.com/unshiftio/url-parse/compare/1.5.1...1.5.3) --- updated-dependencies: - dependency-name: url-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 789850ac49b..015a0b0c8a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10734,9 +10734,9 @@ url-parse-lax@^1.0.0: prepend-http "^1.0.1" url-parse@^1.4.3, url-parse@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" - integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== + version "1.5.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" + integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" From a4c83e9f33c84ebc8f3dc723306c16c98a7d31a5 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Fri, 13 Aug 2021 18:13:34 +0530 Subject: [PATCH 099/173] docs: update cli options (#2892) --- OPTIONS.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/OPTIONS.md b/OPTIONS.md index a79015a6c79..0ec8e17409a 100644 --- a/OPTIONS.md +++ b/OPTIONS.md @@ -64,6 +64,17 @@ Options: --no-experiments-asset Negative 'experiments-asset' option. --experiments-async-web-assembly Support WebAssembly as asynchronous EcmaScript Module. --no-experiments-async-web-assembly Negative 'experiments-async-web-assembly' option. + --experiments-build-http Build http(s): urls using a lockfile and resource content cache. + --no-experiments-build-http Negative 'experiments-build-http' option. + --experiments-build-http-cache-location Location where resource content is stored for lockfile entries. It's also possible to disable storing by passing + false. + --no-experiments-build-http-cache-location Negative 'experiments-build-http-cache-location' option. + --experiments-build-http-frozen When set, anything that would lead to a modification of the lockfile or any resource content, will result in an error. + --no-experiments-build-http-frozen Negative 'experiments-build-http-frozen' option. + --experiments-build-http-lockfile-location Location of the lockfile. + --experiments-build-http-upgrade When set, resources of existing lockfile entries will be fetched and entries will be upgraded when resource content + has changed. + --no-experiments-build-http-upgrade Negative 'experiments-build-http-upgrade' option. --experiments-execute-module Enable build-time execution of modules from the module graph for plugins and loaders. --no-experiments-execute-module Negative 'experiments-execute-module' option. --experiments-layers Enable module and chunk layers. From f66d01f0e382b0b3ffc753ac7549eb252e19e26c Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Fri, 13 Aug 2021 16:05:13 +0300 Subject: [PATCH 100/173] fix: using new dev server API for v4 (#2886) --- packages/serve/src/index.ts | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/packages/serve/src/index.ts b/packages/serve/src/index.ts index 69f2f62ddec..99aa17473c2 100644 --- a/packages/serve/src/index.ts +++ b/packages/serve/src/index.ts @@ -145,6 +145,11 @@ class ServeCommand { process.stdin.on("end", () => { Promise.all( servers.map((server) => { + if (typeof server.stop === "function") { + return server.stop(); + } + + // TODO remove in the next major release return new Promise((resolve) => { server.close(() => { resolve(); @@ -333,15 +338,20 @@ class ServeCommand { server = new DevServer(compiler, devServerOptions); } - server.listen( - devServerOptions.port, - devServerOptions.host, - (error): void => { - if (error) { - throw error; - } - }, - ); + if (typeof server.start === "function") { + await server.start(); + } else { + // TODO remove in the next major release + server.listen( + devServerOptions.port, + devServerOptions.host, + (error): void => { + if (error) { + throw error; + } + }, + ); + } servers.push(server); } catch (error) { From e16b244d4db646307d02ef75a2264ee963a4d4d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Aug 2021 16:05:28 +0300 Subject: [PATCH 101/173] chore(deps): bump path-parse from 1.0.6 to 1.0.7 (#2890) Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 015a0b0c8a1..b1545e6b1d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8649,9 +8649,9 @@ path-key@^3.0.0, path-key@^3.1.0: integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.7: version "0.1.7" From c6ace9071b2c2a494c778224ad82f9e40248771b Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Sun, 15 Aug 2021 22:24:30 +0530 Subject: [PATCH 102/173] docs: update `SERVE-OPTIONS-v4` (#2893) --- OPTIONS.md | 392 ++++++++++++++------------------------------ SERVE-OPTIONS-v4.md | 157 ++++++++++-------- 2 files changed, 213 insertions(+), 336 deletions(-) diff --git a/OPTIONS.md b/OPTIONS.md index 0ec8e17409a..01e7f8baa56 100644 --- a/OPTIONS.md +++ b/OPTIONS.md @@ -21,11 +21,9 @@ Options: --no-bail Negative 'bail' option. --cache Enable in memory caching. Disable caching. --no-cache Negative 'cache' option. - --cache-max-generations Number of generations unused cache entries stay in memory cache at minimum (1 = may be removed after unused for a - single compilation, ..., Infinity: kept forever). + --cache-max-generations Number of generations unused cache entries stay in memory cache at minimum (1 = may be removed after unused for a single compilation, ..., Infinity: kept forever). --cache-type In memory caching. Filesystem caching. - --cache-allow-collecting-memory Allows to collect unused memory allocated during deserialization. This requires copying data into smaller buffers and - has a performance cost. + --cache-allow-collecting-memory Allows to collect unused memory allocated during deserialization. This requires copying data into smaller buffers and has a performance cost. --no-cache-allow-collecting-memory Negative 'cache-allow-collecting-memory' option. --cache-cache-directory Base directory for the cache (defaults to node_modules/.cache/webpack). --cache-cache-location Locations for the cache (defaults to cacheDirectory / name). @@ -33,27 +31,20 @@ Options: --no-cache-compression Negative 'cache-compression' option. --cache-hash-algorithm Algorithm used for generation the hash (see node.js crypto package). --cache-idle-timeout Time in ms after which idle period the cache storing should happen. - --cache-idle-timeout-after-large-changes Time in ms after which idle period the cache storing should happen when larger changes has been detected (cumulative - build time > 2 x avg cache store time). + --cache-idle-timeout-after-large-changes Time in ms after which idle period the cache storing should happen when larger changes has been detected (cumulative build time > 2 x avg cache store time). --cache-idle-timeout-for-initial-store Time in ms after which idle period the initial cache storing should happen. --cache-immutable-paths A path to a immutable directory (usually a package manager cache directory). - --cache-immutable-paths-reset Clear all items provided in 'cache.immutablePaths' configuration. List of paths that are managed by a package manager - and contain a version or hash in its path so all files are immutable. + --cache-immutable-paths-reset Clear all items provided in 'cache.immutablePaths' configuration. List of paths that are managed by a package manager and contain a version or hash in its path so all files are immutable. --cache-managed-paths A path to a managed directory (usually a node_modules directory). - --cache-managed-paths-reset Clear all items provided in 'cache.managedPaths' configuration. List of paths that are managed by a package manager - and can be trusted to not be modified otherwise. + --cache-managed-paths-reset Clear all items provided in 'cache.managedPaths' configuration. List of paths that are managed by a package manager and can be trusted to not be modified otherwise. --cache-max-age Time for which unused cache entries stay in the filesystem cache at minimum (in milliseconds). - --cache-max-memory-generations Number of generations unused cache entries stay in memory cache at minimum (0 = no memory cache used, 1 = may be - removed after unused for a single compilation, ..., Infinity: kept forever). Cache entries will be deserialized from - disk when removed from memory cache. + --cache-max-memory-generations Number of generations unused cache entries stay in memory cache at minimum (0 = no memory cache used, 1 = may be removed after unused for a single compilation, ..., Infinity: kept forever). Cache entries will be deserialized from disk when removed from memory cache. --cache-name Name for the cache. Different names will lead to different coexisting caches. --cache-profile Track and log detailed timing information for individual cache items. --no-cache-profile Negative 'cache-profile' option. --cache-store When to store data to the filesystem. (pack: Store data when compiler is idle in a single file). - --cache-version Version of the cache data. Different versions won't allow to reuse the cache and override existing content. Update the - version when config changed in a way which doesn't allow to reuse cache. This will invalidate the cache. - --context The base directory (absolute path!) for resolving the `entry` option. If `output.pathinfo` is set, the included - pathinfo is shortened to this directory. + --cache-version Version of the cache data. Different versions won't allow to reuse the cache and override existing content. Update the version when config changed in a way which doesn't allow to reuse cache. This will invalidate the cache. + --context The base directory (absolute path!) for resolving the `entry` option. If `output.pathinfo` is set, the included pathinfo is shortened to this directory. --dependencies References to another configuration to depend on. --dependencies-reset Clear all items provided in 'dependencies' configuration. References to other configurations to depend on. -d, --devtool Determine source maps to use. @@ -66,14 +57,12 @@ Options: --no-experiments-async-web-assembly Negative 'experiments-async-web-assembly' option. --experiments-build-http Build http(s): urls using a lockfile and resource content cache. --no-experiments-build-http Negative 'experiments-build-http' option. - --experiments-build-http-cache-location Location where resource content is stored for lockfile entries. It's also possible to disable storing by passing - false. + --experiments-build-http-cache-location Location where resource content is stored for lockfile entries. It's also possible to disable storing by passing false. --no-experiments-build-http-cache-location Negative 'experiments-build-http-cache-location' option. --experiments-build-http-frozen When set, anything that would lead to a modification of the lockfile or any resource content, will result in an error. --no-experiments-build-http-frozen Negative 'experiments-build-http-frozen' option. --experiments-build-http-lockfile-location Location of the lockfile. - --experiments-build-http-upgrade When set, resources of existing lockfile entries will be fetched and entries will be upgraded when resource content - has changed. + --experiments-build-http-upgrade When set, resources of existing lockfile entries will be fetched and entries will be upgraded when resource content has changed. --no-experiments-build-http-upgrade Negative 'experiments-build-http-upgrade' option. --experiments-execute-module Enable build-time execution of modules from the module graph for plugins and loaders. --no-experiments-execute-module Negative 'experiments-execute-module' option. @@ -86,49 +75,38 @@ Options: --no-experiments-lazy-compilation-entries Negative 'experiments-lazy-compilation-entries' option. --experiments-lazy-compilation-imports Enable/disable lazy compilation for import() modules. --no-experiments-lazy-compilation-imports Negative 'experiments-lazy-compilation-imports' option. - --experiments-lazy-compilation-test Specify which entrypoints or import()ed modules should be lazily compiled. This is matched with the imported module - and not the entrypoint name. + --experiments-lazy-compilation-test Specify which entrypoints or import()ed modules should be lazily compiled. This is matched with the imported module and not the entrypoint name. --experiments-output-module Allow output javascript files as module source type. --no-experiments-output-module Negative 'experiments-output-module' option. --experiments-sync-web-assembly Support WebAssembly as synchronous EcmaScript Module (outdated). --no-experiments-sync-web-assembly Negative 'experiments-sync-web-assembly' option. --experiments-top-level-await Allow using top-level-await in EcmaScript Modules. --no-experiments-top-level-await Negative 'experiments-top-level-await' option. - --externals Every matched dependency becomes external. An exact matched dependency becomes external. The same string is used as - external dependency. - --externals-reset Clear all items provided in 'externals' configuration. Specify dependencies that shouldn't be resolved by webpack, but - should become dependencies of the resulting bundle. The kind of the dependency depends on `output.libraryTarget`. - --externals-presets-electron Treat common electron built-in modules in main and preload context like 'electron', 'ipc' or 'shell' as external and - load them via require() when used. + --externals Every matched dependency becomes external. An exact matched dependency becomes external. The same string is used as external dependency. + --externals-reset Clear all items provided in 'externals' configuration. Specify dependencies that shouldn't be resolved by webpack, but should become dependencies of the resulting bundle. The kind of the dependency depends on `output.libraryTarget`. + --externals-presets-electron Treat common electron built-in modules in main and preload context like 'electron', 'ipc' or 'shell' as external and load them via require() when used. --no-externals-presets-electron Negative 'externals-presets-electron' option. - --externals-presets-electron-main Treat electron built-in modules in the main context like 'app', 'ipc-main' or 'shell' as external and load them via - require() when used. + --externals-presets-electron-main Treat electron built-in modules in the main context like 'app', 'ipc-main' or 'shell' as external and load them via require() when used. --no-externals-presets-electron-main Negative 'externals-presets-electron-main' option. - --externals-presets-electron-preload Treat electron built-in modules in the preload context like 'web-frame', 'ipc-renderer' or 'shell' as external and - load them via require() when used. + --externals-presets-electron-preload Treat electron built-in modules in the preload context like 'web-frame', 'ipc-renderer' or 'shell' as external and load them via require() when used. --no-externals-presets-electron-preload Negative 'externals-presets-electron-preload' option. - --externals-presets-electron-renderer Treat electron built-in modules in the renderer context like 'web-frame', 'ipc-renderer' or 'shell' as external and - load them via require() when used. + --externals-presets-electron-renderer Treat electron built-in modules in the renderer context like 'web-frame', 'ipc-renderer' or 'shell' as external and load them via require() when used. --no-externals-presets-electron-renderer Negative 'externals-presets-electron-renderer' option. --externals-presets-node Treat node.js built-in modules like fs, path or vm as external and load them via require() when used. --no-externals-presets-node Negative 'externals-presets-node' option. --externals-presets-nwjs Treat NW.js legacy nw.gui module as external and load it via require() when used. --no-externals-presets-nwjs Negative 'externals-presets-nwjs' option. - --externals-presets-web Treat references to 'http(s)://...' and 'std:...' as external and load them via import when used (Note that this - changes execution order as externals are executed before any other code in the chunk). + --externals-presets-web Treat references to 'http(s)://...' and 'std:...' as external and load them via import when used (Note that this changes execution order as externals are executed before any other code in the chunk). --no-externals-presets-web Negative 'externals-presets-web' option. - --externals-presets-web-async Treat references to 'http(s)://...' and 'std:...' as external and load them via async import() when used (Note that - this external type is an async module, which has various effects on the execution). + --externals-presets-web-async Treat references to 'http(s)://...' and 'std:...' as external and load them via async import() when used (Note that this external type is an async module, which has various effects on the execution). --no-externals-presets-web-async Negative 'externals-presets-web-async' option. - --externals-type Specifies the default type of externals ('amd*', 'umd*', 'system' and 'jsonp' depend on output.libraryTarget set to - the same value). + --externals-type Specifies the default type of externals ('amd*', 'umd*', 'system' and 'jsonp' depend on output.libraryTarget set to the same value). --ignore-warnings A RegExp to select the warning message. --ignore-warnings-file A RegExp to select the origin file for the warning. --ignore-warnings-message A RegExp to select the warning message. --ignore-warnings-module A RegExp to select the origin module for the warning. --ignore-warnings-reset Clear all items provided in 'ignoreWarnings' configuration. Ignore specific warnings. - --infrastructure-logging-append-only Only appends lines to the output. Avoids updating existing output e. g. for status messages. This option is only used - when no custom console is provided. + --infrastructure-logging-append-only Only appends lines to the output. Avoids updating existing output e. g. for status messages. This option is only used when no custom console is provided. --no-infrastructure-logging-append-only Negative 'infrastructure-logging-append-only' option. --infrastructure-logging-colors Enables/Disables colorful output. This option is only used when no custom console is provided. --no-infrastructure-logging-colors Negative 'infrastructure-logging-colors' option. @@ -139,36 +117,27 @@ Options: --mode Defines the mode to pass to webpack. --module-expr-context-critical Enable warnings for full dynamic dependencies. --no-module-expr-context-critical Negative 'module-expr-context-critical' option. - --module-expr-context-recursive Enable recursive directory lookup for full dynamic dependencies. Deprecated: This option has moved to - 'module.parser.javascript.exprContextRecursive'. + --module-expr-context-recursive Enable recursive directory lookup for full dynamic dependencies. Deprecated: This option has moved to 'module.parser.javascript.exprContextRecursive'. --no-module-expr-context-recursive Negative 'module-expr-context-recursive' option. - --module-expr-context-reg-exp [value] Sets the default regular expression for full dynamic dependencies. Deprecated: This option has moved to - 'module.parser.javascript.exprContextRegExp'. + --module-expr-context-reg-exp [value] Sets the default regular expression for full dynamic dependencies. Deprecated: This option has moved to 'module.parser.javascript.exprContextRegExp'. --no-module-expr-context-reg-exp Negative 'module-expr-context-reg-exp' option. - --module-expr-context-request Set the default request for full dynamic dependencies. Deprecated: This option has moved to - 'module.parser.javascript.exprContextRequest'. + --module-expr-context-request Set the default request for full dynamic dependencies. Deprecated: This option has moved to 'module.parser.javascript.exprContextRequest'. --module-generator-asset-data-url-encoding Asset encoding (defaults to base64). --no-module-generator-asset-data-url-encoding Negative 'module-generator-asset-data-url-encoding' option. --module-generator-asset-data-url-mimetype Asset mimetype (getting from file extension by default). --module-generator-asset-emit Emit an output asset from this asset module. This can be set to 'false' to omit emitting e. g. for SSR. --no-module-generator-asset-emit Negative 'module-generator-asset-emit' option. - --module-generator-asset-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path - may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to - determine the location on disk. + --module-generator-asset-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to determine the location on disk. --module-generator-asset-public-path The 'publicPath' specifies the public URL address of the output files when referenced in a browser. --module-generator-asset-inline-data-url-encoding Asset encoding (defaults to base64). --no-module-generator-asset-inline-data-url-encoding Negative 'module-generator-asset-inline-data-url-encoding' option. --module-generator-asset-inline-data-url-mimetype Asset mimetype (getting from file extension by default). --module-generator-asset-resource-emit Emit an output asset from this asset module. This can be set to 'false' to omit emitting e. g. for SSR. --no-module-generator-asset-resource-emit Negative 'module-generator-asset-resource-emit' option. - --module-generator-asset-resource-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path - may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to - determine the location on disk. + --module-generator-asset-resource-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to determine the location on disk. --module-generator-asset-resource-public-path The 'publicPath' specifies the public URL address of the output files when referenced in a browser. - --module-no-parse A regular expression, when matched the module is not parsed. An absolute path, when the module starts with this path - it is not parsed. - --module-no-parse-reset Clear all items provided in 'module.noParse' configuration. Don't parse files matching. It's matched against the full - resolved request. + --module-no-parse A regular expression, when matched the module is not parsed. An absolute path, when the module starts with this path it is not parsed. + --module-no-parse-reset Clear all items provided in 'module.noParse' configuration. Don't parse files matching. It's matched against the full resolved request. --module-parser-asset-data-url-condition-max-size Maximum size of asset that should be inline as modules. Default: 8kb. --no-module-parser-javascript-amd Negative 'module-parser-javascript-amd' option. --module-parser-javascript-browserify Enable/disable special handling for browserify bundles. @@ -201,8 +170,7 @@ Options: --no-module-parser-javascript-require-ensure Negative 'module-parser-javascript-require-ensure' option. --module-parser-javascript-require-include Enable/disable parsing of require.include syntax. --no-module-parser-javascript-require-include Negative 'module-parser-javascript-require-include' option. - --module-parser-javascript-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and - requirejs.onError. + --module-parser-javascript-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and requirejs.onError. --no-module-parser-javascript-require-js Negative 'module-parser-javascript-require-js' option. --module-parser-javascript-strict-export-presence Emit errors instead of warnings when imported names don't exist in imported module. --no-module-parser-javascript-strict-export-presence Negative 'module-parser-javascript-strict-export-presence' option. @@ -219,12 +187,9 @@ Options: --module-parser-javascript-unknown-context-request Sets the request when using the require function in a not statically analyse-able way. --module-parser-javascript-url [value] Enable/disable parsing of new URL() syntax. --no-module-parser-javascript-url Negative 'module-parser-javascript-url' option. - --module-parser-javascript-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles - 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or - configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --no-module-parser-javascript-worker Negative 'module-parser-javascript-worker' option. - --module-parser-javascript-worker-reset Clear all items provided in 'module.parser.javascript.worker' configuration. Disable or configure parsing of WebWorker - syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-worker-reset Clear all items provided in 'module.parser.javascript.worker' configuration. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --module-parser-javascript-wrapped-context-critical Enable warnings for partial dynamic dependencies. --no-module-parser-javascript-wrapped-context-critical Negative 'module-parser-javascript-wrapped-context-critical' option. --module-parser-javascript-wrapped-context-recursive Enable recursive directory lookup for partial dynamic dependencies. @@ -261,8 +226,7 @@ Options: --no-module-parser-javascript-auto-require-ensure Negative 'module-parser-javascript-auto-require-ensure' option. --module-parser-javascript-auto-require-include Enable/disable parsing of require.include syntax. --no-module-parser-javascript-auto-require-include Negative 'module-parser-javascript-auto-require-include' option. - --module-parser-javascript-auto-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and - requirejs.onError. + --module-parser-javascript-auto-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and requirejs.onError. --no-module-parser-javascript-auto-require-js Negative 'module-parser-javascript-auto-require-js' option. --module-parser-javascript-auto-strict-export-presence Emit errors instead of warnings when imported names don't exist in imported module. --no-module-parser-javascript-auto-strict-export-presence Negative 'module-parser-javascript-auto-strict-export-presence' option. @@ -279,12 +243,9 @@ Options: --module-parser-javascript-auto-unknown-context-request Sets the request when using the require function in a not statically analyse-able way. --module-parser-javascript-auto-url [value] Enable/disable parsing of new URL() syntax. --no-module-parser-javascript-auto-url Negative 'module-parser-javascript-auto-url' option. - --module-parser-javascript-auto-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles - 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or - configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-auto-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --no-module-parser-javascript-auto-worker Negative 'module-parser-javascript-auto-worker' option. - --module-parser-javascript-auto-worker-reset Clear all items provided in 'module.parser.javascript/auto.worker' configuration. Disable or configure parsing of - WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-auto-worker-reset Clear all items provided in 'module.parser.javascript/auto.worker' configuration. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --module-parser-javascript-auto-wrapped-context-critical Enable warnings for partial dynamic dependencies. --no-module-parser-javascript-auto-wrapped-context-critical Negative 'module-parser-javascript-auto-wrapped-context-critical' option. --module-parser-javascript-auto-wrapped-context-recursive Enable recursive directory lookup for partial dynamic dependencies. @@ -321,8 +282,7 @@ Options: --no-module-parser-javascript-dynamic-require-ensure Negative 'module-parser-javascript-dynamic-require-ensure' option. --module-parser-javascript-dynamic-require-include Enable/disable parsing of require.include syntax. --no-module-parser-javascript-dynamic-require-include Negative 'module-parser-javascript-dynamic-require-include' option. - --module-parser-javascript-dynamic-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and - requirejs.onError. + --module-parser-javascript-dynamic-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and requirejs.onError. --no-module-parser-javascript-dynamic-require-js Negative 'module-parser-javascript-dynamic-require-js' option. --module-parser-javascript-dynamic-strict-export-presence Emit errors instead of warnings when imported names don't exist in imported module. --no-module-parser-javascript-dynamic-strict-export-presence Negative 'module-parser-javascript-dynamic-strict-export-presence' option. @@ -339,12 +299,9 @@ Options: --module-parser-javascript-dynamic-unknown-context-request Sets the request when using the require function in a not statically analyse-able way. --module-parser-javascript-dynamic-url [value] Enable/disable parsing of new URL() syntax. --no-module-parser-javascript-dynamic-url Negative 'module-parser-javascript-dynamic-url' option. - --module-parser-javascript-dynamic-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles - 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or - configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-dynamic-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --no-module-parser-javascript-dynamic-worker Negative 'module-parser-javascript-dynamic-worker' option. - --module-parser-javascript-dynamic-worker-reset Clear all items provided in 'module.parser.javascript/dynamic.worker' configuration. Disable or configure parsing of - WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-dynamic-worker-reset Clear all items provided in 'module.parser.javascript/dynamic.worker' configuration. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --module-parser-javascript-dynamic-wrapped-context-critical Enable warnings for partial dynamic dependencies. --no-module-parser-javascript-dynamic-wrapped-context-critical Negative 'module-parser-javascript-dynamic-wrapped-context-critical' option. --module-parser-javascript-dynamic-wrapped-context-recursive Enable recursive directory lookup for partial dynamic dependencies. @@ -381,8 +338,7 @@ Options: --no-module-parser-javascript-esm-require-ensure Negative 'module-parser-javascript-esm-require-ensure' option. --module-parser-javascript-esm-require-include Enable/disable parsing of require.include syntax. --no-module-parser-javascript-esm-require-include Negative 'module-parser-javascript-esm-require-include' option. - --module-parser-javascript-esm-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and - requirejs.onError. + --module-parser-javascript-esm-require-js Enable/disable parsing of require.js special syntax like require.config, requirejs.config, require.version and requirejs.onError. --no-module-parser-javascript-esm-require-js Negative 'module-parser-javascript-esm-require-js' option. --module-parser-javascript-esm-strict-export-presence Emit errors instead of warnings when imported names don't exist in imported module. --no-module-parser-javascript-esm-strict-export-presence Negative 'module-parser-javascript-esm-strict-export-presence' option. @@ -399,12 +355,9 @@ Options: --module-parser-javascript-esm-unknown-context-request Sets the request when using the require function in a not statically analyse-able way. --module-parser-javascript-esm-url [value] Enable/disable parsing of new URL() syntax. --no-module-parser-javascript-esm-url Negative 'module-parser-javascript-esm-url' option. - --module-parser-javascript-esm-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles - 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or - configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-esm-worker [value...] Specify a syntax that should be parsed as WebWorker reference. 'Abc' handles 'new Abc()', 'Abc from xyz' handles 'import { Abc } from "xyz"; new Abc()', 'abc()' handles 'abc()', and combinations are also possible. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --no-module-parser-javascript-esm-worker Negative 'module-parser-javascript-esm-worker' option. - --module-parser-javascript-esm-worker-reset Clear all items provided in 'module.parser.javascript/esm.worker' configuration. Disable or configure parsing of - WebWorker syntax like new Worker() or navigator.serviceWorker.register(). + --module-parser-javascript-esm-worker-reset Clear all items provided in 'module.parser.javascript/esm.worker' configuration. Disable or configure parsing of WebWorker syntax like new Worker() or navigator.serviceWorker.register(). --module-parser-javascript-esm-wrapped-context-critical Enable warnings for partial dynamic dependencies. --no-module-parser-javascript-esm-wrapped-context-critical Negative 'module-parser-javascript-esm-wrapped-context-critical' option. --module-parser-javascript-esm-wrapped-context-recursive Enable recursive directory lookup for partial dynamic dependencies. @@ -447,33 +400,24 @@ Options: --module-rules-use-options Options passed to a loader. --module-rules-use A loader request. --module-rules-reset Clear all items provided in 'module.rules' configuration. A list of rules. - --module-strict-export-presence Emit errors instead of warnings when imported names don't exist in imported module. Deprecated: This option has moved - to 'module.parser.javascript.strictExportPresence'. + --module-strict-export-presence Emit errors instead of warnings when imported names don't exist in imported module. Deprecated: This option has moved to 'module.parser.javascript.strictExportPresence'. --no-module-strict-export-presence Negative 'module-strict-export-presence' option. - --module-strict-this-context-on-imports Handle the this context correctly according to the spec for namespace objects. Deprecated: This option has moved to - 'module.parser.javascript.strictThisContextOnImports'. + --module-strict-this-context-on-imports Handle the this context correctly according to the spec for namespace objects. Deprecated: This option has moved to 'module.parser.javascript.strictThisContextOnImports'. --no-module-strict-this-context-on-imports Negative 'module-strict-this-context-on-imports' option. - --module-unknown-context-critical Enable warnings when using the require function in a not statically analyse-able way. Deprecated: This option has - moved to 'module.parser.javascript.unknownContextCritical'. + --module-unknown-context-critical Enable warnings when using the require function in a not statically analyse-able way. Deprecated: This option has moved to 'module.parser.javascript.unknownContextCritical'. --no-module-unknown-context-critical Negative 'module-unknown-context-critical' option. - --module-unknown-context-recursive Enable recursive directory lookup when using the require function in a not statically analyse-able way. Deprecated: - This option has moved to 'module.parser.javascript.unknownContextRecursive'. + --module-unknown-context-recursive Enable recursive directory lookup when using the require function in a not statically analyse-able way. Deprecated: This option has moved to 'module.parser.javascript.unknownContextRecursive'. --no-module-unknown-context-recursive Negative 'module-unknown-context-recursive' option. - --module-unknown-context-reg-exp [value] Sets the regular expression when using the require function in a not statically analyse-able way. Deprecated: This - option has moved to 'module.parser.javascript.unknownContextRegExp'. + --module-unknown-context-reg-exp [value] Sets the regular expression when using the require function in a not statically analyse-able way. Deprecated: This option has moved to 'module.parser.javascript.unknownContextRegExp'. --no-module-unknown-context-reg-exp Negative 'module-unknown-context-reg-exp' option. - --module-unknown-context-request Sets the request when using the require function in a not statically analyse-able way. Deprecated: This option has - moved to 'module.parser.javascript.unknownContextRequest'. + --module-unknown-context-request Sets the request when using the require function in a not statically analyse-able way. Deprecated: This option has moved to 'module.parser.javascript.unknownContextRequest'. --module-unsafe-cache Cache the resolving of module requests. --no-module-unsafe-cache Negative 'module-unsafe-cache' option. - --module-wrapped-context-critical Enable warnings for partial dynamic dependencies. Deprecated: This option has moved to - 'module.parser.javascript.wrappedContextCritical'. + --module-wrapped-context-critical Enable warnings for partial dynamic dependencies. Deprecated: This option has moved to 'module.parser.javascript.wrappedContextCritical'. --no-module-wrapped-context-critical Negative 'module-wrapped-context-critical' option. - --module-wrapped-context-recursive Enable recursive directory lookup for partial dynamic dependencies. Deprecated: This option has moved to - 'module.parser.javascript.wrappedContextRecursive'. + --module-wrapped-context-recursive Enable recursive directory lookup for partial dynamic dependencies. Deprecated: This option has moved to 'module.parser.javascript.wrappedContextRecursive'. --no-module-wrapped-context-recursive Negative 'module-wrapped-context-recursive' option. - --module-wrapped-context-reg-exp Set the inner regular expression for partial dynamic dependencies. Deprecated: This option has moved to - 'module.parser.javascript.wrappedContextRegExp'. + --module-wrapped-context-reg-exp Set the inner regular expression for partial dynamic dependencies. Deprecated: This option has moved to 'module.parser.javascript.wrappedContextRegExp'. --name Name of the configuration. Used when loading multiple configurations. --no-node Negative 'node' option. --node-dirname [value] Include a polyfill for the '__dirname' variable. @@ -484,24 +428,17 @@ Options: --no-node-global Negative 'node-global' option. --optimization-check-wasm-types Check for incompatible wasm types when importing/exporting from/to ESM. --no-optimization-check-wasm-types Negative 'optimization-check-wasm-types' option. - --optimization-chunk-ids Define the algorithm to choose chunk ids (named: readable ids for better debugging, deterministic: numeric hash ids - for better long term caching, size: numeric ids focused on minimal initial download size, total-size: numeric ids - focused on minimal total download size, false: no algorithm used, as custom one can be provided via plugin). + --optimization-chunk-ids Define the algorithm to choose chunk ids (named: readable ids for better debugging, deterministic: numeric hash ids for better long term caching, size: numeric ids focused on minimal initial download size, total-size: numeric ids focused on minimal total download size, false: no algorithm used, as custom one can be provided via plugin). --no-optimization-chunk-ids Negative 'optimization-chunk-ids' option. - --optimization-concatenate-modules Concatenate modules when possible to generate less modules, more efficient code and enable more optimizations by the - minimizer. + --optimization-concatenate-modules Concatenate modules when possible to generate less modules, more efficient code and enable more optimizations by the minimizer. --no-optimization-concatenate-modules Negative 'optimization-concatenate-modules' option. - --optimization-emit-on-errors Emit assets even when errors occur. Critical errors are emitted into the generated code and will cause errors at - runtime. + --optimization-emit-on-errors Emit assets even when errors occur. Critical errors are emitted into the generated code and will cause errors at runtime. --no-optimization-emit-on-errors Negative 'optimization-emit-on-errors' option. --optimization-flag-included-chunks Also flag chunks as loaded which contain a subset of the modules. --no-optimization-flag-included-chunks Negative 'optimization-flag-included-chunks' option. - --optimization-inner-graph Creates a module-internal dependency graph for top level symbols, exports and imports, to improve unused exports - detection. + --optimization-inner-graph Creates a module-internal dependency graph for top level symbols, exports and imports, to improve unused exports detection. --no-optimization-inner-graph Negative 'optimization-inner-graph' option. - --optimization-mangle-exports [value] Rename exports when possible to generate shorter code (depends on optimization.usedExports and - optimization.providedExports, true/"deterministic": generate short deterministic names optimized for caching, "size": - generate the shortest possible names). + --optimization-mangle-exports [value] Rename exports when possible to generate shorter code (depends on optimization.usedExports and optimization.providedExports, true/"deterministic": generate short deterministic names optimized for caching, "size": generate the shortest possible names). --no-optimization-mangle-exports Negative 'optimization-mangle-exports' option. --optimization-mangle-wasm-imports Reduce size of WASM by changing imports to shorter strings. --no-optimization-mangle-wasm-imports Negative 'optimization-mangle-wasm-imports' option. @@ -509,10 +446,7 @@ Options: --no-optimization-merge-duplicate-chunks Negative 'optimization-merge-duplicate-chunks' option. --optimization-minimize Enable minimizing the output. Uses optimization.minimizer. --no-optimization-minimize Negative 'optimization-minimize' option. - --optimization-module-ids Define the algorithm to choose module ids (natural: numeric ids in order of usage, named: readable ids for better - debugging, hashed: (deprecated) short hashes as ids for better long term caching, deterministic: numeric hash ids for - better long term caching, size: numeric ids focused on minimal initial download size, false: no algorithm used, as - custom one can be provided via plugin). + --optimization-module-ids Define the algorithm to choose module ids (natural: numeric ids in order of usage, named: readable ids for better debugging, hashed: (deprecated) short hashes as ids for better long term caching, deterministic: numeric hash ids for better long term caching, size: numeric ids focused on minimal initial download size, false: no algorithm used, as custom one can be provided via plugin). --no-optimization-module-ids Negative 'optimization-module-ids' option. --optimization-node-env Set process.env.NODE_ENV to a specific value. --no-optimization-node-env Negative 'optimization-node-env' option. @@ -529,16 +463,13 @@ Options: --optimization-runtime-chunk [value] Create an additional chunk which contains only the webpack runtime and chunk hash maps. --no-optimization-runtime-chunk Negative 'optimization-runtime-chunk' option. --optimization-runtime-chunk-name The name or name factory for the runtime chunks. - --optimization-side-effects [value] Skip over modules which contain no side effects when exports are not used (false: disabled, 'flag': only use manually - placed side effects flag, true: also analyse source code for side effects). + --optimization-side-effects [value] Skip over modules which contain no side effects when exports are not used (false: disabled, 'flag': only use manually placed side effects flag, true: also analyse source code for side effects). --no-optimization-side-effects Negative 'optimization-side-effects' option. --no-optimization-split-chunks Negative 'optimization-split-chunks' option. --optimization-split-chunks-automatic-name-delimiter Sets the name delimiter for created chunks. - --optimization-split-chunks-chunks Select chunks for determining shared modules (defaults to "async", "initial" and "all" requires adding these chunks to - the HTML). + --optimization-split-chunks-chunks Select chunks for determining shared modules (defaults to "async", "initial" and "all" requires adding these chunks to the HTML). --optimization-split-chunks-default-size-types Size type, like 'javascript', 'webassembly'. - --optimization-split-chunks-default-size-types-reset Clear all items provided in 'optimization.splitChunks.defaultSizeTypes' configuration. Sets the size types which are - used when a number is used for sizes. + --optimization-split-chunks-default-size-types-reset Clear all items provided in 'optimization.splitChunks.defaultSizeTypes' configuration. Sets the size types which are used when a number is used for sizes. --optimization-split-chunks-enforce-size-threshold Size of the javascript part of the chunk. --optimization-split-chunks-fallback-cache-group-automatic-name-delimiter Sets the name delimiter for created chunks. --optimization-split-chunks-fallback-cache-group-max-async-size Size of the javascript part of the chunk. @@ -560,21 +491,16 @@ Options: --no-optimization-split-chunks-name Negative 'optimization-split-chunks-name' option. --optimization-split-chunks-used-exports Compare used exports when checking common modules. Modules will only be put in the same chunk when exports are equal. --no-optimization-split-chunks-used-exports Negative 'optimization-split-chunks-used-exports' option. - --optimization-used-exports [value] Figure out which exports are used by modules to mangle export names, omit unused exports and generate more efficient - code (true: analyse used exports for each runtime, "global": analyse exports globally for all runtimes combined). + --optimization-used-exports [value] Figure out which exports are used by modules to mangle export names, omit unused exports and generate more efficient code (true: analyse used exports for each runtime, "global": analyse exports globally for all runtimes combined). --no-optimization-used-exports Negative 'optimization-used-exports' option. --output-asset-module-filename The filename of asset modules as relative path inside the 'output.path' directory. --output-charset Add charset attribute for script tag. --no-output-charset Negative 'output-charset' option. - --output-chunk-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path - may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to - determine the location on disk. - --output-chunk-format The format of chunks (formats included by default are 'array-push' (web/WebWorker), 'commonjs' (node.js), 'module' - (ESM), but others might be added by plugins). + --output-chunk-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to determine the location on disk. + --output-chunk-format The format of chunks (formats included by default are 'array-push' (web/WebWorker), 'commonjs' (node.js), 'module' (ESM), but others might be added by plugins). --no-output-chunk-format Negative 'output-chunk-format' option. --output-chunk-load-timeout Number of milliseconds before chunk request expires. - --output-chunk-loading The method of loading chunks (methods included by default are 'jsonp' (web), 'import' (ESM), 'importScripts' - (WebWorker), 'require' (sync node.js), 'async-node' (async node.js), but others might be added by plugins). + --output-chunk-loading The method of loading chunks (methods included by default are 'jsonp' (web), 'import' (ESM), 'importScripts' (WebWorker), 'require' (sync node.js), 'async-node' (async node.js), but others might be added by plugins). --no-output-chunk-loading Negative 'output-chunk-loading' option. --output-chunk-loading-global The global variable used by webpack for loading of chunks. --output-clean Clean the output directory before emit. @@ -588,22 +514,13 @@ Options: --no-output-cross-origin-loading Negative 'output-cross-origin-loading' option. --output-devtool-fallback-module-filename-template Similar to `output.devtoolModuleFilenameTemplate`, but used in the case of duplicate module identifiers. --output-devtool-module-filename-template Filename template string of function for the sources array in a generated SourceMap. - --output-devtool-namespace Module namespace to use when interpolating filename template string for the sources array in a generated SourceMap. - Defaults to `output.library` if not set. It's useful for avoiding runtime collisions in sourcemaps from multiple - webpack projects built as libraries. - --output-enabled-chunk-loading-types The method of loading chunks (methods included by default are 'jsonp' (web), 'import' (ESM), 'importScripts' - (WebWorker), 'require' (sync node.js), 'async-node' (async node.js), but others might be added by plugins). - --output-enabled-chunk-loading-types-reset Clear all items provided in 'output.enabledChunkLoadingTypes' configuration. List of chunk loading types enabled for - use by entry points. - --output-enabled-library-types Type of library (types included by default are 'var', 'module', 'assign', 'assign-properties', 'this', 'window', - 'self', 'global', 'commonjs', 'commonjs2', 'commonjs-module', 'amd', 'amd-require', 'umd', 'umd2', 'jsonp', 'system', - but others might be added by plugins). - --output-enabled-library-types-reset Clear all items provided in 'output.enabledLibraryTypes' configuration. List of library types enabled for use by entry - points. - --output-enabled-wasm-loading-types The method of loading WebAssembly Modules (methods included by default are 'fetch' (web/WebWorker), 'async-node' - (node.js), but others might be added by plugins). - --output-enabled-wasm-loading-types-reset Clear all items provided in 'output.enabledWasmLoadingTypes' configuration. List of wasm loading types enabled for use - by entry points. + --output-devtool-namespace Module namespace to use when interpolating filename template string for the sources array in a generated SourceMap. Defaults to `output.library` if not set. It's useful for avoiding runtime collisions in sourcemaps from multiple webpack projects built as libraries. + --output-enabled-chunk-loading-types The method of loading chunks (methods included by default are 'jsonp' (web), 'import' (ESM), 'importScripts' (WebWorker), 'require' (sync node.js), 'async-node' (async node.js), but others might be added by plugins). + --output-enabled-chunk-loading-types-reset Clear all items provided in 'output.enabledChunkLoadingTypes' configuration. List of chunk loading types enabled for use by entry points. + --output-enabled-library-types Type of library (types included by default are 'var', 'module', 'assign', 'assign-properties', 'this', 'window', 'self', 'global', 'commonjs', 'commonjs2', 'commonjs-module', 'amd', 'amd-require', 'umd', 'umd2', 'jsonp', 'system', but others might be added by plugins). + --output-enabled-library-types-reset Clear all items provided in 'output.enabledLibraryTypes' configuration. List of library types enabled for use by entry points. + --output-enabled-wasm-loading-types The method of loading WebAssembly Modules (methods included by default are 'fetch' (web/WebWorker), 'async-node' (node.js), but others might be added by plugins). + --output-enabled-wasm-loading-types-reset Clear all items provided in 'output.enabledWasmLoadingTypes' configuration. List of wasm loading types enabled for use by entry points. --output-environment-arrow-function The environment supports arrow functions ('() => { ... }'). --no-output-environment-arrow-function Negative 'output-environment-arrow-function' option. --output-environment-big-int-literal The environment supports BigInt as literal (123n). @@ -618,9 +535,7 @@ Options: --no-output-environment-for-of Negative 'output-environment-for-of' option. --output-environment-module The environment supports EcmaScript Module syntax to import EcmaScript modules (import ... from '...'). --no-output-environment-module Negative 'output-environment-module' option. - --output-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path - may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to - determine the location on disk. + --output-filename Specifies the filename template of output files on disk. You must **not** specify an absolute path here, but the path may contain folders separated by '/'! The specified path is joined with the value of the 'output.path' option to determine the location on disk. --output-global-object An expression which is used to address the global object/scope in runtime code. --output-hash-digest Digest type used for the hash. --output-hash-digest-length Number of chars which are used for the hash. @@ -634,13 +549,11 @@ Options: --output-import-function-name The name of the native import() function (can be exchanged for a polyfill). --output-import-meta-name The name of the native import.meta object (can be exchanged for a polyfill). --output-library A part of the library name. - --output-library-reset Clear all items provided in 'output.library' configuration. The name of the library (some types allow unnamed - libraries too). + --output-library-reset Clear all items provided in 'output.library' configuration. The name of the library (some types allow unnamed libraries too). --output-library-amd Name of the exposed AMD library in the UMD. --output-library-commonjs Name of the exposed commonjs export in the UMD. --output-library-root Part of the name of the property exposed globally by a UMD library. - --output-library-root-reset Clear all items provided in 'output.library.root' configuration. Name of the property exposed globally by a UMD - library. + --output-library-root-reset Clear all items provided in 'output.library.root' configuration. Name of the property exposed globally by a UMD library. --output-library-auxiliary-comment Append the same comment above each import style. --output-library-auxiliary-comment-amd Set comment for `amd` section in UMD. --output-library-auxiliary-comment-commonjs Set comment for `commonjs` (exports) section in UMD. @@ -649,16 +562,12 @@ Options: --output-library-export Part of the export that should be exposed as library. --output-library-export-reset Clear all items provided in 'output.library.export' configuration. Specify which export should be exposed as library. --output-library-name A part of the library name. - --output-library-name-reset Clear all items provided in 'output.library.name' configuration. The name of the library (some types allow unnamed - libraries too). + --output-library-name-reset Clear all items provided in 'output.library.name' configuration. The name of the library (some types allow unnamed libraries too). --output-library-name-amd Name of the exposed AMD library in the UMD. --output-library-name-commonjs Name of the exposed commonjs export in the UMD. --output-library-name-root Part of the name of the property exposed globally by a UMD library. - --output-library-name-root-reset Clear all items provided in 'output.library.name.root' configuration. Name of the property exposed globally by a UMD - library. - --output-library-type Type of library (types included by default are 'var', 'module', 'assign', 'assign-properties', 'this', 'window', - 'self', 'global', 'commonjs', 'commonjs2', 'commonjs-module', 'amd', 'amd-require', 'umd', 'umd2', 'jsonp', 'system', - but others might be added by plugins). + --output-library-name-root-reset Clear all items provided in 'output.library.name.root' configuration. Name of the property exposed globally by a UMD library. + --output-library-type Type of library (types included by default are 'var', 'module', 'assign', 'assign-properties', 'this', 'window', 'self', 'global', 'commonjs', 'commonjs2', 'commonjs-module', 'amd', 'amd-require', 'umd', 'umd2', 'jsonp', 'system', but others might be added by plugins). --output-library-umd-named-define If `output.libraryTarget` is set to umd and `output.library` is set, setting this to true will name the AMD module. --no-output-library-umd-named-define Negative 'output-library-umd-named-define' option. --output-module Output javascript files as module source type. @@ -671,25 +580,19 @@ Options: --no-output-script-type Negative 'output-script-type' option. --output-source-map-filename The filename of the SourceMaps for the JavaScript files. They are inside the 'output.path' directory. --output-source-prefix Prefixes every line of the source in the bundle with this string. - --output-strict-module-error-handling Handles error in module loading correctly at a performance cost. This will handle module error compatible with the - EcmaScript Modules spec. + --output-strict-module-error-handling Handles error in module loading correctly at a performance cost. This will handle module error compatible with the EcmaScript Modules spec. --no-output-strict-module-error-handling Negative 'output-strict-module-error-handling' option. - --output-strict-module-exception-handling Handles exceptions in module loading correctly at a performance cost (Deprecated). This will handle module error - compatible with the Node.js CommonJS way. + --output-strict-module-exception-handling Handles exceptions in module loading correctly at a performance cost (Deprecated). This will handle module error compatible with the Node.js CommonJS way. --no-output-strict-module-exception-handling Negative 'output-strict-module-exception-handling' option. - --output-trusted-types [value] Use a Trusted Types policy to create urls for chunks. 'output.uniqueName' is used a default policy name. Passing a - string sets a custom policy name. The name of the Trusted Types policy created by webpack to serve bundle chunks. + --output-trusted-types [value] Use a Trusted Types policy to create urls for chunks. 'output.uniqueName' is used a default policy name. Passing a string sets a custom policy name. The name of the Trusted Types policy created by webpack to serve bundle chunks. --output-trusted-types-policy-name The name of the Trusted Types policy created by webpack to serve bundle chunks. --output-unique-name A unique name of the webpack build to avoid multiple webpack runtimes to conflict when using globals. - --output-wasm-loading The method of loading WebAssembly Modules (methods included by default are 'fetch' (web/WebWorker), 'async-node' - (node.js), but others might be added by plugins). + --output-wasm-loading The method of loading WebAssembly Modules (methods included by default are 'fetch' (web/WebWorker), 'async-node' (node.js), but others might be added by plugins). --no-output-wasm-loading Negative 'output-wasm-loading' option. --output-webassembly-module-filename The filename of WebAssembly modules as relative path inside the 'output.path' directory. - --output-worker-chunk-loading The method of loading chunks (methods included by default are 'jsonp' (web), 'import' (ESM), 'importScripts' - (WebWorker), 'require' (sync node.js), 'async-node' (async node.js), but others might be added by plugins). + --output-worker-chunk-loading The method of loading chunks (methods included by default are 'jsonp' (web), 'import' (ESM), 'importScripts' (WebWorker), 'require' (sync node.js), 'async-node' (async node.js), but others might be added by plugins). --no-output-worker-chunk-loading Negative 'output-worker-chunk-loading' option. - --output-worker-wasm-loading The method of loading WebAssembly Modules (methods included by default are 'fetch' (web/WebWorker), 'async-node' - (node.js), but others might be added by plugins). + --output-worker-wasm-loading The method of loading WebAssembly Modules (methods included by default are 'fetch' (web/WebWorker), 'async-node' (node.js), but others might be added by plugins). --no-output-worker-wasm-loading Negative 'output-worker-wasm-loading' option. --parallelism The number of parallel processed modules in the compilation. --no-performance Negative 'performance' option. @@ -703,8 +606,7 @@ Options: --no-records-input-path Negative 'records-input-path' option. --records-output-path Load compiler state from a json file. --no-records-output-path Negative 'records-output-path' option. - --records-path Store/Load compiler state from/to a json file. This will result in persistent ids of modules and chunks. An absolute - path is expected. `recordsPath` is used for `recordsInputPath` and `recordsOutputPath` if they left undefined. + --records-path Store/Load compiler state from/to a json file. This will result in persistent ids of modules and chunks. An absolute path is expected. `recordsPath` is used for `recordsInputPath` and `recordsOutputPath` if they left undefined. --no-records-path Negative 'records-path' option. --resolve-alias-alias Ignore request (replace with empty module). New request. --no-resolve-alias-alias Negative 'resolve-alias-alias' option. @@ -713,8 +615,7 @@ Options: --no-resolve-alias-only-module Negative 'resolve-alias-only-module' option. --resolve-alias-reset Clear all items provided in 'resolve.alias' configuration. Redirect module requests. --resolve-alias-fields Field in the description file (usually package.json) which are used to redirect requests inside the module. - --resolve-alias-fields-reset Clear all items provided in 'resolve.aliasFields' configuration. Fields in the description file (usually package.json) - which are used to redirect requests inside the module. + --resolve-alias-fields-reset Clear all items provided in 'resolve.aliasFields' configuration. Fields in the description file (usually package.json) which are used to redirect requests inside the module. --resolve-cache Enable caching of successfully resolved requests (cache entries are revalidated). --no-resolve-cache Negative 'resolve-cache' option. --resolve-cache-with-context Include the context information in the cache identifier when caching. @@ -722,51 +623,37 @@ Options: --resolve-condition-names Condition names for exports field entry point. --resolve-condition-names-reset Clear all items provided in 'resolve.conditionNames' configuration. Condition names for exports field entry point. --resolve-description-files Filename used to find a description file (like a package.json). - --resolve-description-files-reset Clear all items provided in 'resolve.descriptionFiles' configuration. Filenames used to find a description file (like - a package.json). - --resolve-enforce-extension Enforce the resolver to use one of the extensions from the extensions option (User must specify requests without - extension). + --resolve-description-files-reset Clear all items provided in 'resolve.descriptionFiles' configuration. Filenames used to find a description file (like a package.json). + --resolve-enforce-extension Enforce the resolver to use one of the extensions from the extensions option (User must specify requests without extension). --no-resolve-enforce-extension Negative 'resolve-enforce-extension' option. --resolve-exports-fields Field name from the description file (usually package.json) which is used to provide entry points of a package. - --resolve-exports-fields-reset Clear all items provided in 'resolve.exportsFields' configuration. Field names from the description file (usually - package.json) which are used to provide entry points of a package. + --resolve-exports-fields-reset Clear all items provided in 'resolve.exportsFields' configuration. Field names from the description file (usually package.json) which are used to provide entry points of a package. --resolve-extensions Extension added to the request when trying to find the file. - --resolve-extensions-reset Clear all items provided in 'resolve.extensions' configuration. Extensions added to the request when trying to find - the file. + --resolve-extensions-reset Clear all items provided in 'resolve.extensions' configuration. Extensions added to the request when trying to find the file. --resolve-fallback-alias Ignore request (replace with empty module). New request. --no-resolve-fallback-alias Negative 'resolve-fallback-alias' option. --resolve-fallback-name Request to be redirected. --resolve-fallback-only-module Redirect only exact matching request. --no-resolve-fallback-only-module Negative 'resolve-fallback-only-module' option. --resolve-fallback-reset Clear all items provided in 'resolve.fallback' configuration. Redirect module requests. - --resolve-fully-specified Treats the request specified by the user as fully specified, meaning no extensions are added and the mainFiles in - directories are not resolved (This doesn't affect requests from mainFields, aliasFields or aliases). + --resolve-fully-specified Treats the request specified by the user as fully specified, meaning no extensions are added and the mainFiles in directories are not resolved (This doesn't affect requests from mainFields, aliasFields or aliases). --no-resolve-fully-specified Negative 'resolve-fully-specified' option. - --resolve-imports-fields Field name from the description file (usually package.json) which is used to provide internal request of a package - (requests starting with # are considered as internal). - --resolve-imports-fields-reset Clear all items provided in 'resolve.importsFields' configuration. Field names from the description file (usually - package.json) which are used to provide internal request of a package (requests starting with # are considered as - internal). + --resolve-imports-fields Field name from the description file (usually package.json) which is used to provide internal request of a package (requests starting with # are considered as internal). + --resolve-imports-fields-reset Clear all items provided in 'resolve.importsFields' configuration. Field names from the description file (usually package.json) which are used to provide internal request of a package (requests starting with # are considered as internal). --resolve-main-fields Field name from the description file (package.json) which are used to find the default entry point. - --resolve-main-fields-reset Clear all items provided in 'resolve.mainFields' configuration. Field names from the description file (package.json) - which are used to find the default entry point. + --resolve-main-fields-reset Clear all items provided in 'resolve.mainFields' configuration. Field names from the description file (package.json) which are used to find the default entry point. --resolve-main-files Filename used to find the default entry point if there is no description file or main field. - --resolve-main-files-reset Clear all items provided in 'resolve.mainFiles' configuration. Filenames used to find the default entry point if there - is no description file or main field. + --resolve-main-files-reset Clear all items provided in 'resolve.mainFiles' configuration. Filenames used to find the default entry point if there is no description file or main field. --resolve-modules Folder name or directory path where to find modules. --resolve-modules-reset Clear all items provided in 'resolve.modules' configuration. Folder names or directory paths where to find modules. - --resolve-prefer-absolute Prefer to resolve server-relative URLs (starting with '/') as absolute paths before falling back to resolve in - 'resolve.roots'. + --resolve-prefer-absolute Prefer to resolve server-relative URLs (starting with '/') as absolute paths before falling back to resolve in 'resolve.roots'. --no-resolve-prefer-absolute Negative 'resolve-prefer-absolute' option. --resolve-prefer-relative Prefer to resolve module requests as relative request and fallback to resolving as module. --no-resolve-prefer-relative Negative 'resolve-prefer-relative' option. --resolve-restrictions Resolve restriction. Resolve result must fulfill this restriction. - --resolve-restrictions-reset Clear all items provided in 'resolve.restrictions' configuration. A list of resolve restrictions. Resolve results must - fulfill all of these restrictions to resolve successfully. Other resolve paths are taken when restrictions are not - met. + --resolve-restrictions-reset Clear all items provided in 'resolve.restrictions' configuration. A list of resolve restrictions. Resolve results must fulfill all of these restrictions to resolve successfully. Other resolve paths are taken when restrictions are not met. --resolve-roots Directory in which requests that are server-relative URLs (starting with '/') are resolved. - --resolve-roots-reset Clear all items provided in 'resolve.roots' configuration. A list of directories in which requests that are - server-relative URLs (starting with '/') are resolved. + --resolve-roots-reset Clear all items provided in 'resolve.roots' configuration. A list of directories in which requests that are server-relative URLs (starting with '/') are resolved. --resolve-symlinks Enable resolving symlinks to the original location. --no-resolve-symlinks Negative 'resolve-symlinks' option. --resolve-unsafe-cache Enable caching of successfully resolved requests (cache entries are not revalidated). @@ -780,62 +667,45 @@ Options: --no-resolve-loader-alias-only-module Negative 'resolve-loader-alias-only-module' option. --resolve-loader-alias-reset Clear all items provided in 'resolveLoader.alias' configuration. Redirect module requests. --resolve-loader-alias-fields Field in the description file (usually package.json) which are used to redirect requests inside the module. - --resolve-loader-alias-fields-reset Clear all items provided in 'resolveLoader.aliasFields' configuration. Fields in the description file (usually - package.json) which are used to redirect requests inside the module. + --resolve-loader-alias-fields-reset Clear all items provided in 'resolveLoader.aliasFields' configuration. Fields in the description file (usually package.json) which are used to redirect requests inside the module. --resolve-loader-cache Enable caching of successfully resolved requests (cache entries are revalidated). --no-resolve-loader-cache Negative 'resolve-loader-cache' option. --resolve-loader-cache-with-context Include the context information in the cache identifier when caching. --no-resolve-loader-cache-with-context Negative 'resolve-loader-cache-with-context' option. --resolve-loader-condition-names Condition names for exports field entry point. - --resolve-loader-condition-names-reset Clear all items provided in 'resolveLoader.conditionNames' configuration. Condition names for exports field entry - point. + --resolve-loader-condition-names-reset Clear all items provided in 'resolveLoader.conditionNames' configuration. Condition names for exports field entry point. --resolve-loader-description-files Filename used to find a description file (like a package.json). - --resolve-loader-description-files-reset Clear all items provided in 'resolveLoader.descriptionFiles' configuration. Filenames used to find a description file - (like a package.json). - --resolve-loader-enforce-extension Enforce the resolver to use one of the extensions from the extensions option (User must specify requests without - extension). + --resolve-loader-description-files-reset Clear all items provided in 'resolveLoader.descriptionFiles' configuration. Filenames used to find a description file (like a package.json). + --resolve-loader-enforce-extension Enforce the resolver to use one of the extensions from the extensions option (User must specify requests without extension). --no-resolve-loader-enforce-extension Negative 'resolve-loader-enforce-extension' option. --resolve-loader-exports-fields Field name from the description file (usually package.json) which is used to provide entry points of a package. - --resolve-loader-exports-fields-reset Clear all items provided in 'resolveLoader.exportsFields' configuration. Field names from the description file - (usually package.json) which are used to provide entry points of a package. + --resolve-loader-exports-fields-reset Clear all items provided in 'resolveLoader.exportsFields' configuration. Field names from the description file (usually package.json) which are used to provide entry points of a package. --resolve-loader-extensions Extension added to the request when trying to find the file. - --resolve-loader-extensions-reset Clear all items provided in 'resolveLoader.extensions' configuration. Extensions added to the request when trying to - find the file. + --resolve-loader-extensions-reset Clear all items provided in 'resolveLoader.extensions' configuration. Extensions added to the request when trying to find the file. --resolve-loader-fallback-alias Ignore request (replace with empty module). New request. --no-resolve-loader-fallback-alias Negative 'resolve-loader-fallback-alias' option. --resolve-loader-fallback-name Request to be redirected. --resolve-loader-fallback-only-module Redirect only exact matching request. --no-resolve-loader-fallback-only-module Negative 'resolve-loader-fallback-only-module' option. --resolve-loader-fallback-reset Clear all items provided in 'resolveLoader.fallback' configuration. Redirect module requests. - --resolve-loader-fully-specified Treats the request specified by the user as fully specified, meaning no extensions are added and the mainFiles in - directories are not resolved (This doesn't affect requests from mainFields, aliasFields or aliases). + --resolve-loader-fully-specified Treats the request specified by the user as fully specified, meaning no extensions are added and the mainFiles in directories are not resolved (This doesn't affect requests from mainFields, aliasFields or aliases). --no-resolve-loader-fully-specified Negative 'resolve-loader-fully-specified' option. - --resolve-loader-imports-fields Field name from the description file (usually package.json) which is used to provide internal request of a package - (requests starting with # are considered as internal). - --resolve-loader-imports-fields-reset Clear all items provided in 'resolveLoader.importsFields' configuration. Field names from the description file - (usually package.json) which are used to provide internal request of a package (requests starting with # are - considered as internal). + --resolve-loader-imports-fields Field name from the description file (usually package.json) which is used to provide internal request of a package (requests starting with # are considered as internal). + --resolve-loader-imports-fields-reset Clear all items provided in 'resolveLoader.importsFields' configuration. Field names from the description file (usually package.json) which are used to provide internal request of a package (requests starting with # are considered as internal). --resolve-loader-main-fields Field name from the description file (package.json) which are used to find the default entry point. - --resolve-loader-main-fields-reset Clear all items provided in 'resolveLoader.mainFields' configuration. Field names from the description file - (package.json) which are used to find the default entry point. + --resolve-loader-main-fields-reset Clear all items provided in 'resolveLoader.mainFields' configuration. Field names from the description file (package.json) which are used to find the default entry point. --resolve-loader-main-files Filename used to find the default entry point if there is no description file or main field. - --resolve-loader-main-files-reset Clear all items provided in 'resolveLoader.mainFiles' configuration. Filenames used to find the default entry point if - there is no description file or main field. + --resolve-loader-main-files-reset Clear all items provided in 'resolveLoader.mainFiles' configuration. Filenames used to find the default entry point if there is no description file or main field. --resolve-loader-modules Folder name or directory path where to find modules. - --resolve-loader-modules-reset Clear all items provided in 'resolveLoader.modules' configuration. Folder names or directory paths where to find - modules. - --resolve-loader-prefer-absolute Prefer to resolve server-relative URLs (starting with '/') as absolute paths before falling back to resolve in - 'resolve.roots'. + --resolve-loader-modules-reset Clear all items provided in 'resolveLoader.modules' configuration. Folder names or directory paths where to find modules. + --resolve-loader-prefer-absolute Prefer to resolve server-relative URLs (starting with '/') as absolute paths before falling back to resolve in 'resolve.roots'. --no-resolve-loader-prefer-absolute Negative 'resolve-loader-prefer-absolute' option. --resolve-loader-prefer-relative Prefer to resolve module requests as relative request and fallback to resolving as module. --no-resolve-loader-prefer-relative Negative 'resolve-loader-prefer-relative' option. --resolve-loader-restrictions Resolve restriction. Resolve result must fulfill this restriction. - --resolve-loader-restrictions-reset Clear all items provided in 'resolveLoader.restrictions' configuration. A list of resolve restrictions. Resolve - results must fulfill all of these restrictions to resolve successfully. Other resolve paths are taken when - restrictions are not met. + --resolve-loader-restrictions-reset Clear all items provided in 'resolveLoader.restrictions' configuration. A list of resolve restrictions. Resolve results must fulfill all of these restrictions to resolve successfully. Other resolve paths are taken when restrictions are not met. --resolve-loader-roots Directory in which requests that are server-relative URLs (starting with '/') are resolved. - --resolve-loader-roots-reset Clear all items provided in 'resolveLoader.roots' configuration. A list of directories in which requests that are - server-relative URLs (starting with '/') are resolved. + --resolve-loader-roots-reset Clear all items provided in 'resolveLoader.roots' configuration. A list of directories in which requests that are server-relative URLs (starting with '/') are resolved. --resolve-loader-symlinks Enable resolving symlinks to the original location. --no-resolve-loader-symlinks Negative 'resolve-loader-symlinks' option. --resolve-loader-unsafe-cache Enable caching of successfully resolved requests (cache entries are not revalidated). @@ -847,11 +717,9 @@ Options: --snapshot-build-dependencies-timestamp Use timestamps of the files/directories to determine invalidation. --no-snapshot-build-dependencies-timestamp Negative 'snapshot-build-dependencies-timestamp' option. --snapshot-immutable-paths A path to a immutable directory (usually a package manager cache directory). - --snapshot-immutable-paths-reset Clear all items provided in 'snapshot.immutablePaths' configuration. List of paths that are managed by a package - manager and contain a version or hash in its path so all files are immutable. + --snapshot-immutable-paths-reset Clear all items provided in 'snapshot.immutablePaths' configuration. List of paths that are managed by a package manager and contain a version or hash in its path so all files are immutable. --snapshot-managed-paths A path to a managed directory (usually a node_modules directory). - --snapshot-managed-paths-reset Clear all items provided in 'snapshot.managedPaths' configuration. List of paths that are managed by a package manager - and can be trusted to not be modified otherwise. + --snapshot-managed-paths-reset Clear all items provided in 'snapshot.managedPaths' configuration. List of paths that are managed by a package manager and can be trusted to not be modified otherwise. --snapshot-module-hash Use hashes of the content of the files/directories to determine invalidation. --no-snapshot-module-hash Negative 'snapshot-module-hash' option. --snapshot-module-timestamp Use timestamps of the files/directories to determine invalidation. @@ -925,12 +793,10 @@ Options: --stats-errors-count Add errors count. --no-stats-errors-count Negative 'stats-errors-count' option. --stats-exclude-assets Suppress assets that match the specified filters. Filters can be Strings, RegExps or Functions. - --stats-exclude-assets-reset Clear all items provided in 'stats.excludeAssets' configuration. Suppress assets that match the specified filters. - Filters can be Strings, RegExps or Functions. + --stats-exclude-assets-reset Clear all items provided in 'stats.excludeAssets' configuration. Suppress assets that match the specified filters. Filters can be Strings, RegExps or Functions. --stats-exclude-modules [value...] Suppress modules that match the specified filters. Filters can be Strings, RegExps, Booleans or Functions. --no-stats-exclude-modules Negative 'stats-exclude-modules' option. - --stats-exclude-modules-reset Clear all items provided in 'stats.excludeModules' configuration. Suppress modules that match the specified filters. - Filters can be Strings, RegExps, Booleans or Functions. + --stats-exclude-modules-reset Clear all items provided in 'stats.excludeModules' configuration. Suppress modules that match the specified filters. Filters can be Strings, RegExps, Booleans or Functions. --stats-group-assets-by-chunk Group assets by how their are related to chunks. --no-stats-group-assets-by-chunk Negative 'stats-group-assets-by-chunk' option. --stats-group-assets-by-emit-status Group assets by their status (emitted, compared for emit or cached). @@ -959,14 +825,11 @@ Options: --no-stats-hash Negative 'stats-hash' option. --stats-ids Add ids. --no-stats-ids Negative 'stats-ids' option. - --stats-logging [value] Specify log level of logging output. Enable/disable logging output (`true`: shows normal logging output, loglevel: - log). + --stats-logging [value] Specify log level of logging output. Enable/disable logging output (`true`: shows normal logging output, loglevel: log). --no-stats-logging Negative 'stats-logging' option. - --stats-logging-debug [value...] Enable/Disable debug logging for all loggers. Include debug logging of specified loggers (i. e. for plugins or - loaders). Filters can be Strings, RegExps or Functions. + --stats-logging-debug [value...] Enable/Disable debug logging for all loggers. Include debug logging of specified loggers (i. e. for plugins or loaders). Filters can be Strings, RegExps or Functions. --no-stats-logging-debug Negative 'stats-logging-debug' option. - --stats-logging-debug-reset Clear all items provided in 'stats.loggingDebug' configuration. Include debug logging of specified loggers (i. e. for - plugins or loaders). Filters can be Strings, RegExps or Functions. + --stats-logging-debug-reset Clear all items provided in 'stats.loggingDebug' configuration. Include debug logging of specified loggers (i. e. for plugins or loaders). Filters can be Strings, RegExps or Functions. --stats-logging-trace Add stack traces to logging output. --no-stats-logging-trace Negative 'stats-logging-trace' option. --stats-module-assets Add information about assets inside modules. @@ -979,8 +842,7 @@ Options: --stats-modules-space Space to display modules (groups will be collapsed to fit this space, value is in number of modules/groups). --stats-nested-modules Add information about modules nested in other modules (like with module concatenation). --no-stats-nested-modules Negative 'stats-nested-modules' option. - --stats-nested-modules-space Space to display modules nested within other modules (groups will be collapsed to fit this space, value is in number - of modules/group). + --stats-nested-modules-space Space to display modules nested within other modules (groups will be collapsed to fit this space, value is in number of modules/group). --stats-optimization-bailout Show reasons why optimization bailed out for modules. --no-stats-optimization-bailout Negative 'stats-optimization-bailout' option. --stats-orphan-modules Add information about orphan modules. @@ -1016,24 +878,18 @@ Options: --no-stats-warnings Negative 'stats-warnings' option. --stats-warnings-count Add warnings count. --no-stats-warnings-count Negative 'stats-warnings-count' option. - --stats-warnings-filter Suppress listing warnings that match the specified filters (they will still be counted). Filters can be Strings, - RegExps or Functions. - --stats-warnings-filter-reset Clear all items provided in 'stats.warningsFilter' configuration. Suppress listing warnings that match the specified - filters (they will still be counted). Filters can be Strings, RegExps or Functions. + --stats-warnings-filter Suppress listing warnings that match the specified filters (they will still be counted). Filters can be Strings, RegExps or Functions. + --stats-warnings-filter-reset Clear all items provided in 'stats.warningsFilter' configuration. Suppress listing warnings that match the specified filters (they will still be counted). Filters can be Strings, RegExps or Functions. -t, --target Sets the build target e.g. node. --no-target Negative 'target' option. - --target-reset Clear all items provided in 'target' configuration. Environment to build for. An array of environments to build for - all of them when possible. + --target-reset Clear all items provided in 'target' configuration. Environment to build for. An array of environments to build for all of them when possible. -w, --watch Watch for files changes. --no-watch Do not watch for file changes. --watch-options-aggregate-timeout Delay the rebuilt after the first change. Value is a time in ms. - --watch-options-follow-symlinks Resolve symlinks and watch symlink and real file. This is usually not needed as webpack already resolves symlinks - ('resolve.symlinks'). + --watch-options-follow-symlinks Resolve symlinks and watch symlink and real file. This is usually not needed as webpack already resolves symlinks ('resolve.symlinks'). --no-watch-options-follow-symlinks Negative 'watch-options-follow-symlinks' option. - --watch-options-ignored A glob pattern for files that should be ignored from watching. Ignore some files from watching (glob pattern or - regexp). - --watch-options-ignored-reset Clear all items provided in 'watchOptions.ignored' configuration. Ignore some files from watching (glob pattern or - regexp). + --watch-options-ignored A glob pattern for files that should be ignored from watching. Ignore some files from watching (glob pattern or regexp). + --watch-options-ignored-reset Clear all items provided in 'watchOptions.ignored' configuration. Ignore some files from watching (glob pattern or regexp). --watch-options-poll [value] `number`: use polling with specified interval. `true`: use polling. --no-watch-options-poll Negative 'watch-options-poll' option. --watch-options-stdin Stop watching when stdin stream has ended. diff --git a/SERVE-OPTIONS-v4.md b/SERVE-OPTIONS-v4.md index f072b073aca..25a04630988 100644 --- a/SERVE-OPTIONS-v4.md +++ b/SERVE-OPTIONS-v4.md @@ -4,76 +4,97 @@ Usage: webpack serve|server|s [entries...] [options] Run the webpack dev server. Options: - -c, --config Provide path to a webpack configuration file e.g. - ./webpack.config.js. - --config-name Name of the configuration to use. - -m, --merge Merge two or more configurations using - 'webpack-merge'. - --env Environment passed to the configuration when it - is a function. - --node-env Sets process.env.NODE_ENV to the specified value. - --progress [value] Print compilation progress during build. - -j, --json [value] Prints result as JSON or store it in a file. - -d, --devtool Determine source maps to use. - --no-devtool Do not generate source maps. - --entry The entry point(s) of your application e.g. - ./src/main.js. - --mode Defines the mode to pass to webpack. - --name Name of the configuration. Used when loading - multiple configurations. - -o, --output-path Output location of the file generated by webpack - e.g. ./dist/. - --stats [value] It instructs webpack on how to treat the stats - e.g. verbose. - --no-stats Disable stats output. - -t, --target Sets the build target e.g. node. - --no-target Negative 'target' option. - --watch-options-stdin Stop watching when stdin stream has ended. - --no-watch-options-stdin Do not stop watching when stdin stream has ended. - --bonjour Broadcasts the server via ZeroConf networking on - start - --lazy Lazy - --liveReload Enables/Disables live reloading on changing files - --serveIndex Enables/Disables serveIndex middleware - --inline Inline mode (set to false to disable including - client scripts like livereload) - --profile Print compilation profile data for progress steps - --progress Print compilation progress in percentage - --hot-only Do not refresh page if HMR fails - --stdin close when stdin ends - --open [value] Open the default browser, or optionally specify a - browser name - --useLocalIp Open default browser with local IP - --open-page Open default browser with the specified page - --client-log-level Log level in the browser (trace, debug, info, - warn, error or silent) - --https HTTPS - --http2 HTTP/2, must be used with HTTPS - --key Path to a SSL key. - --cert Path to a SSL certificate. - --cacert Path to a SSL CA certificate. - --pfx Path to a SSL pfx file. - --pfx-passphrase Passphrase for pfx file. - --content-base A directory or URL to serve HTML content from. - --watch-content-base Enable live-reloading of the content-base. - --history-api-fallback Fallback to /index.html for Single Page - Applications. - --compress Enable gzip compression - --port The port - --disable-host-check Will not check the host - --socket Socket to listen - --public The public hostname/ip address of the server - --host The hostname/ip address the server will bind to - --allowed-hosts A list of hosts that are allowed to access the - dev server, separated by spaces + -c, --config Provide path to a webpack configuration file e.g. ./webpack.config.js. + --config-name Name of the configuration to use. + -m, --merge Merge two or more configurations using 'webpack-merge'. + --env Environment passed to the configuration when it is a function. + --node-env Sets process.env.NODE_ENV to the specified value. + --progress [value] Print compilation progress during build. + -j, --json [value] Prints result as JSON or store it in a file. + -d, --devtool Determine source maps to use. + --no-devtool Do not generate source maps. + --entry The entry point(s) of your application e.g. ./src/main.js. + --mode Defines the mode to pass to webpack. + --name Name of the configuration. Used when loading multiple configurations. + -o, --output-path Output location of the file generated by webpack e.g. ./dist/. + --stats [value] It instructs webpack on how to treat the stats e.g. verbose. + --no-stats Disable stats output. + -t, --target Sets the build target e.g. node. + --no-target Negative 'target' option. + --watch-options-stdin Stop watching when stdin stream has ended. + --no-watch-options-stdin Do not stop watching when stdin stream has ended. + --allowed-hosts Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto'). + --allowed-hosts-reset Clear all items provided in 'allowedHosts' configuration. Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto'). + --bonjour Allows to broadcasts dev server via ZeroConf networking on start. + --no-bonjour Negative 'bonjour' option. + --no-client Negative 'client' option. + --client-logging Allows to specify options for client script in the browser or disable client script. + --client-overlay Enables a full-screen overlay in the browser when there are compiler errors or warnings. + --no-client-overlay Negative 'client-overlay' option. + --client-overlay-errors Enables a full-screen overlay in the browser when there are compiler errors. + --no-client-overlay-errors Negative 'client-overlay-errors' option. + --client-overlay-warnings Enables a full-screen overlay in the browser when there are compiler warnings. + --no-client-overlay-warnings Negative 'client-overlay-warnings' option. + --client-progress Prints compilation progress in percentage in the browser. + --no-client-progress Negative 'client-progress' option. + --client-web-socket-transport Allows to set custom web socket transport to communicate with dev server. + --client-web-socket-url Allows to specify URL to web socket server (useful when you're proxying dev server and client script does not always know where to connect to). + --client-web-socket-url-hostname Tells clients connected to devServer to use the provided hostname. + --client-web-socket-url-pathname Tells clients connected to devServer to use the provided path to connect. + --client-web-socket-url-password Tells clients connected to devServer to use the provided password to authenticate. + --client-web-socket-url-port Tells clients connected to devServer to use the provided port. + --client-web-socket-url-protocol Tells clients connected to devServer to use the provided protocol. + --client-web-socket-url-username Tells clients connected to devServer to use the provided username to authenticate. + --compress Enables gzip compression for everything served. + --no-compress Negative 'compress' option. + --history-api-fallback Allows to proxy requests through a specified index page (by default 'index.html'), useful for Single Page Applications that utilise the HTML5 History API. + --no-history-api-fallback Negative 'history-api-fallback' option. + --host Allows to specify a hostname to use. + --hot [value] Enables Hot Module Replacement. + --no-hot Negative 'hot' option. + --http2 Allows to serve over HTTP/2 using SPDY. + --no-http2 Negative 'http2' option. + --https Allows to configure the server's listening socket for TLS (by default, dev server will be served over HTTP). + --no-https Negative 'https' option. + --https-passphrase Passphrase for a pfx file. + --https-request-cert Request for an SSL certificate. + --no-https-request-cert Negative 'https-request-cert' option. + --https-cacert Path to an SSL CA certificate. + --https-key Path to an SSL key. + --https-pfx Path to an SSL pfx file. + --https-cert Path to an SSL certificate. + --ipc [value] Listen to a unix socket. + --live-reload Enables reload/refresh the page(s) when file changes are detected (enabled by default). + --no-live-reload Negative 'live-reload' option. + --open [value...] Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser). + --no-open Negative 'open' option. + --open-target Opens specified page in browser. + --open-app-name Open specified browser. + --open-app Open specified browser. + --open-reset Clear all items provided in 'open' configuration. Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser). + --open-target-reset Clear all items provided in 'open.target' configuration. Opens specified page in browser. + --open-app-name-reset Clear all items provided in 'open.app.name' configuration. Open specified browser. + --port Allows to specify a port to use. + --static [value...] Allows to configure options for serving static files from directory (by default 'public' directory). + --no-static Negative 'static' option. + --static-directory Directory for static contents. + --static-public-path The static files will be available in the browser under this public path. + --static-serve-index Tells dev server to use serveIndex middleware when enabled. + --no-static-serve-index Negative 'static-serve-index' option. + --static-watch Watches for files in static content directory. + --no-static-watch Negative 'static-watch' option. + --static-reset Clear all items provided in 'static' configuration. Allows to configure options for serving static files from directory (by default 'public' directory). + --static-public-path-reset Clear all items provided in 'static.publicPath' configuration. The static files will be available in the browser under this public path. + --watch-files Allows to configure list of globs/directories/files to watch for file changes. + --watch-files-reset Clear all items provided in 'watchFiles' configuration. Allows to configure list of globs/directories/files to watch for file changes. + --web-socket-server Allows to set web socket server and options (by default 'ws'). + --no-web-socket-server Negative 'web-socket-server' option. Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', - 'webpack-cli' and 'webpack-dev-server' and - commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. From b66fdc010f029f0079c7511557f5460fd555b9c1 Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Sun, 15 Aug 2021 23:05:06 +0300 Subject: [PATCH 103/173] chore(release): publish new version - @webpack-cli/generators@2.3.0 - @webpack-cli/serve@1.5.2 - webpack-cli@4.8.0 --- packages/generators/CHANGELOG.md | 7 +++++++ packages/generators/package.json | 2 +- packages/serve/CHANGELOG.md | 8 ++++++++ packages/serve/package.json | 2 +- packages/webpack-cli/CHANGELOG.md | 12 ++++++++++++ packages/webpack-cli/package.json | 4 ++-- 6 files changed, 31 insertions(+), 4 deletions(-) diff --git a/packages/generators/CHANGELOG.md b/packages/generators/CHANGELOG.md index f18f03f3850..7cd22479c6f 100644 --- a/packages/generators/CHANGELOG.md +++ b/packages/generators/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.3.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@2.2.0...@webpack-cli/generators@2.3.0) (2021-08-15) + +### Features + +- add prompt to select a package manager of choice ([#2779](https://github.com/webpack/webpack-cli/issues/2779)) ([5bd0df4](https://github.com/webpack/webpack-cli/commit/5bd0df42dea72203f3042405d6ff35b4422df763)) +- **init-generator:** add ability to specify a package manager of choice ([#2769](https://github.com/webpack/webpack-cli/issues/2769)) ([e53f164](https://github.com/webpack/webpack-cli/commit/e53f1645c729c3bbcb27ffd41c999ed321f86f9d)) + # [2.2.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@2.1.0...@webpack-cli/generators@2.2.0) (2021-06-07) ### Bug Fixes diff --git a/packages/generators/package.json b/packages/generators/package.json index 0059d899379..4e0c6876b82 100644 --- a/packages/generators/package.json +++ b/packages/generators/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/generators", - "version": "2.2.0", + "version": "2.3.0", "description": "Webpack-CLI generators", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/serve/CHANGELOG.md b/packages/serve/CHANGELOG.md index ef8bdab199a..5090464e3d4 100644 --- a/packages/serve/CHANGELOG.md +++ b/packages/serve/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.2](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.5.1...@webpack-cli/serve@1.5.2) (2021-08-15) + +### Bug Fixes + +- ci for dev server next ([#2841](https://github.com/webpack/webpack-cli/issues/2841)) ([54d34b7](https://github.com/webpack/webpack-cli/commit/54d34b723cbeaf8cc13cff45398530be1db911e4)) +- respect dev server CLI options for multi compiler mode ([de48278](https://github.com/webpack/webpack-cli/commit/de482784a4f8cbb9eacbbe1c6b6f3c62ef60567a)) +- using new dev server API for v4 ([#2886](https://github.com/webpack/webpack-cli/issues/2886)) ([f66d01f](https://github.com/webpack/webpack-cli/commit/f66d01f0e382b0b3ffc753ac7549eb252e19e26c)) + ## [1.5.1](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.5.0...@webpack-cli/serve@1.5.1) (2021-06-07) ### Bug Fixes diff --git a/packages/serve/package.json b/packages/serve/package.json index 46186e5067e..db9e4b4e33a 100644 --- a/packages/serve/package.json +++ b/packages/serve/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/serve", - "version": "1.5.1", + "version": "1.5.2", "description": "", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/webpack-cli/CHANGELOG.md b/packages/webpack-cli/CHANGELOG.md index 26ce028de7e..d241162ff7a 100644 --- a/packages/webpack-cli/CHANGELOG.md +++ b/packages/webpack-cli/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.8.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.7.2...webpack-cli@4.8.0) (2021-08-15) + +### Bug Fixes + +- show default value in help output if available ([#2814](https://github.com/webpack/webpack-cli/issues/2814)) ([7f50948](https://github.com/webpack/webpack-cli/commit/7f50948bb984821449277d6b5632b98a695eb029)) +- support top multi compiler options ([#2874](https://github.com/webpack/webpack-cli/issues/2874)) ([82b1fb7](https://github.com/webpack/webpack-cli/commit/82b1fb7441f04595ac90626235d506f29e5bb107)) + +### Features + +- show possible values for option in help output ([#2819](https://github.com/webpack/webpack-cli/issues/2819)) ([828e5c9](https://github.com/webpack/webpack-cli/commit/828e5c923719982dfc828f9935f65384d6ede2d1)) +- **init-generator:** add ability to specify a package manager of choice ([#2769](https://github.com/webpack/webpack-cli/issues/2769)) ([e53f164](https://github.com/webpack/webpack-cli/commit/e53f1645c729c3bbcb27ffd41c999ed321f86f9d)) + ## [4.7.2](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.7.1...webpack-cli@4.7.2) (2021-06-07) **Note:** Version bump only for package webpack-cli diff --git a/packages/webpack-cli/package.json b/packages/webpack-cli/package.json index 10aca903e59..c49836bed2a 100644 --- a/packages/webpack-cli/package.json +++ b/packages/webpack-cli/package.json @@ -1,6 +1,6 @@ { "name": "webpack-cli", - "version": "4.7.2", + "version": "4.8.0", "description": "CLI for webpack & friends", "license": "MIT", "repository": { @@ -32,7 +32,7 @@ "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^1.0.4", "@webpack-cli/info": "^1.3.0", - "@webpack-cli/serve": "^1.5.1", + "@webpack-cli/serve": "^1.5.2", "colorette": "^1.2.1", "commander": "^7.0.0", "execa": "^5.0.0", From 3aa2b9ce3fb9fb8e3b92de977db95755df3e6e9b Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Sun, 15 Aug 2021 23:06:20 +0300 Subject: [PATCH 104/173] docs: update changelog --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b97bc7e1135..4b38cf05ba8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +# [4.8.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.7.2...webpack-cli@4.8.0) (2021-08-15) + +### Bug Fixes + +- show default value in help output if available ([#2814](https://github.com/webpack/webpack-cli/issues/2814)) ([7f50948](https://github.com/webpack/webpack-cli/commit/7f50948bb984821449277d6b5632b98a695eb029)) +- support top multi compiler options ([#2874](https://github.com/webpack/webpack-cli/issues/2874)) ([82b1fb7](https://github.com/webpack/webpack-cli/commit/82b1fb7441f04595ac90626235d506f29e5bb107)) + +### Features + +- show possible values for option in help output ([#2819](https://github.com/webpack/webpack-cli/issues/2819)) ([828e5c9](https://github.com/webpack/webpack-cli/commit/828e5c923719982dfc828f9935f65384d6ede2d1)) +- **init-generator:** add ability to specify a package manager of choice ([#2769](https://github.com/webpack/webpack-cli/issues/2769)) ([e53f164](https://github.com/webpack/webpack-cli/commit/e53f1645c729c3bbcb27ffd41c999ed321f86f9d)) + ## [4.7.2](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.7.1...webpack-cli@4.7.2) (2021-06-07) **Note:** Version bump only for package webpack-cli (due `@webpack-cli/serve`) From 7fa1da64e23ce0dc5f15f8ee59fa4e63ed9aad73 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Tue, 17 Aug 2021 15:27:38 +0530 Subject: [PATCH 105/173] chore: update `postCreateCommand` script for dev containers (#2898) --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 264b218cf9b..9145ee57d0e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -5,6 +5,6 @@ "settings": { "terminal.integrated.shell.linux": "/bin/bash" }, - "postCreateCommand": "yarn install && yarn bootstrap && yarn build", + "postCreateCommand": "yarn install && yarn lerna bootstrap && yarn build", "extensions": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"] } From f9fa5b9e2c023936ad285e1290aa12ee4b1ea26d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Aug 2021 12:58:26 +0300 Subject: [PATCH 106/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin (#2896) --- yarn.lock | 58 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index b1545e6b1d0..7427e44871a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2040,27 +2040,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.1.tgz#808d206e2278e809292b5de752a91105da85860b" - integrity sha512-AHqIU+SqZZgBEiWOrtN94ldR3ZUABV5dUG94j8Nms9rQnHFc8fvDOue/58K4CFz6r8OtDDc35Pw9NQPWo0Ayrw== + version "4.29.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.2.tgz#f54dc0a32b8f61c6024ab8755da05363b733838d" + integrity sha512-x4EMgn4BTfVd9+Z+r+6rmWxoAzBaapt4QFqE+d8L8sUtYZYLDTK6VG/y/SMMWA5t1/BVU5Kf+20rX4PtWzUYZg== dependencies: - "@typescript-eslint/experimental-utils" "4.29.1" - "@typescript-eslint/scope-manager" "4.29.1" + "@typescript-eslint/experimental-utils" "4.29.2" + "@typescript-eslint/scope-manager" "4.29.2" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.1.tgz#0af2b17b0296b60c6b207f11062119fa9c5a8994" - integrity sha512-kl6QG6qpzZthfd2bzPNSJB2YcZpNOrP6r9jueXupcZHnL74WiuSjaft7WSu17J9+ae9zTlk0KJMXPUj0daBxMw== +"@typescript-eslint/experimental-utils@4.29.2": + version "4.29.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.2.tgz#5f67fb5c5757ef2cb3be64817468ba35c9d4e3b7" + integrity sha512-P6mn4pqObhftBBPAv4GQtEK7Yos1fz/MlpT7+YjH9fTxZcALbiiPKuSIfYP/j13CeOjfq8/fr9Thr2glM9ub7A== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.29.1" - "@typescript-eslint/types" "4.29.1" - "@typescript-eslint/typescript-estree" "4.29.1" + "@typescript-eslint/scope-manager" "4.29.2" + "@typescript-eslint/types" "4.29.2" + "@typescript-eslint/typescript-estree" "4.29.2" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -2082,11 +2082,24 @@ "@typescript-eslint/types" "4.29.1" "@typescript-eslint/visitor-keys" "4.29.1" +"@typescript-eslint/scope-manager@4.29.2": + version "4.29.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.2.tgz#442b0f029d981fa402942715b1718ac7fcd5aa1b" + integrity sha512-mfHmvlQxmfkU8D55CkZO2sQOueTxLqGvzV+mG6S/6fIunDiD2ouwsAoiYCZYDDK73QCibYjIZmGhpvKwAB5BOA== + dependencies: + "@typescript-eslint/types" "4.29.2" + "@typescript-eslint/visitor-keys" "4.29.2" + "@typescript-eslint/types@4.29.1": version "4.29.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.1.tgz#94cce6cf7cc83451df03339cda99d326be2feaf5" integrity sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA== +"@typescript-eslint/types@4.29.2": + version "4.29.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.2.tgz#fc0489c6b89773f99109fb0aa0aaddff21f52fcd" + integrity sha512-K6ApnEXId+WTGxqnda8z4LhNMa/pZmbTFkDxEBLQAbhLZL50DjeY0VIDCml/0Y3FlcbqXZrABqrcKxq+n0LwzQ== + "@typescript-eslint/typescript-estree@4.29.1": version "4.29.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.1.tgz#7b32a25ff8e51f2671ccc6b26cdbee3b1e6c5e7f" @@ -2100,6 +2113,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.29.2": + version "4.29.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.2.tgz#a0ea8b98b274adbb2577100ba545ddf8bf7dc219" + integrity sha512-TJ0/hEnYxapYn9SGn3dCnETO0r+MjaxtlWZ2xU+EvytF0g4CqTpZL48SqSNn2hXsPolnewF30pdzR9a5Lj3DNg== + dependencies: + "@typescript-eslint/types" "4.29.2" + "@typescript-eslint/visitor-keys" "4.29.2" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.29.1": version "4.29.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz#0615be8b55721f5e854f3ee99f1a714f2d093e5d" @@ -2108,6 +2134,14 @@ "@typescript-eslint/types" "4.29.1" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.29.2": + version "4.29.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.2.tgz#d2da7341f3519486f50655159f4e5ecdcb2cd1df" + integrity sha512-bDgJLQ86oWHJoZ1ai4TZdgXzJxsea3Ee9u9wsTAvjChdj2WLcVsgWYAPeY7RQMn16tKrlQaBnpKv7KBfs4EQag== + dependencies: + "@typescript-eslint/types" "4.29.2" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From 17525f316e192364ce6be18b434ca028a4370af9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Aug 2021 13:00:46 +0300 Subject: [PATCH 107/173] chore(deps-dev): bump @typescript-eslint/parser --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7427e44871a..8283af4f8bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2065,13 +2065,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.29.1.tgz#17dfbb45c9032ffa0fe15881d20fbc2a4bdeb02d" - integrity sha512-3fL5iN20hzX3Q4OkG7QEPFjZV2qsVGiDhEwwh+EkmE/w7oteiOvUNzmpu5eSwGJX/anCryONltJ3WDmAzAoCMg== + version "4.29.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.29.2.tgz#1c7744f4c27aeb74610c955d3dce9250e95c370a" + integrity sha512-WQ6BPf+lNuwteUuyk1jD/aHKqMQ9jrdCn7Gxt9vvBnzbpj7aWEf+aZsJ1zvTjx5zFxGCt000lsbD9tQPEL8u6g== dependencies: - "@typescript-eslint/scope-manager" "4.29.1" - "@typescript-eslint/types" "4.29.1" - "@typescript-eslint/typescript-estree" "4.29.1" + "@typescript-eslint/scope-manager" "4.29.2" + "@typescript-eslint/types" "4.29.2" + "@typescript-eslint/typescript-estree" "4.29.2" debug "^4.3.1" "@typescript-eslint/scope-manager@4.29.1": From 473779e73155337ad656dfca92823c42db7765b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Aug 2021 14:05:55 +0300 Subject: [PATCH 108/173] chore(deps-dev): bump ts-jest from 27.0.4 to 27.0.5 (#2900) --- yarn.lock | 54 +++++++++--------------------------------------------- 1 file changed, 9 insertions(+), 45 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8283af4f8bf..d70e4e575b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2074,14 +2074,6 @@ "@typescript-eslint/typescript-estree" "4.29.2" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.1.tgz#f25da25bc6512812efa2ce5ebd36619d68e61358" - integrity sha512-Hzv/uZOa9zrD/W5mftZa54Jd5Fed3tL6b4HeaOpwVSabJK8CJ+2MkDasnX/XK4rqP5ZTWngK1ZDeCi6EnxPQ7A== - dependencies: - "@typescript-eslint/types" "4.29.1" - "@typescript-eslint/visitor-keys" "4.29.1" - "@typescript-eslint/scope-manager@4.29.2": version "4.29.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.2.tgz#442b0f029d981fa402942715b1718ac7fcd5aa1b" @@ -2090,29 +2082,11 @@ "@typescript-eslint/types" "4.29.2" "@typescript-eslint/visitor-keys" "4.29.2" -"@typescript-eslint/types@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.1.tgz#94cce6cf7cc83451df03339cda99d326be2feaf5" - integrity sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA== - "@typescript-eslint/types@4.29.2": version "4.29.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.2.tgz#fc0489c6b89773f99109fb0aa0aaddff21f52fcd" integrity sha512-K6ApnEXId+WTGxqnda8z4LhNMa/pZmbTFkDxEBLQAbhLZL50DjeY0VIDCml/0Y3FlcbqXZrABqrcKxq+n0LwzQ== -"@typescript-eslint/typescript-estree@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.1.tgz#7b32a25ff8e51f2671ccc6b26cdbee3b1e6c5e7f" - integrity sha512-lIkkrR9E4lwZkzPiRDNq0xdC3f2iVCUjw/7WPJ4S2Sl6C3nRWkeE1YXCQ0+KsiaQRbpY16jNaokdWnm9aUIsfw== - dependencies: - "@typescript-eslint/types" "4.29.1" - "@typescript-eslint/visitor-keys" "4.29.1" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.29.2": version "4.29.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.2.tgz#a0ea8b98b274adbb2577100ba545ddf8bf7dc219" @@ -2126,14 +2100,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz#0615be8b55721f5e854f3ee99f1a714f2d093e5d" - integrity sha512-zLqtjMoXvgdZY/PG6gqA73V8BjqPs4af1v2kiiETBObp+uC6gRYnJLmJHxC0QyUrrHDLJPIWNYxoBV3wbcRlag== - dependencies: - "@typescript-eslint/types" "4.29.1" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.29.2": version "4.29.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.2.tgz#d2da7341f3519486f50655159f4e5ecdcb2cd1df" @@ -2933,7 +2899,7 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -buffer-from@1.x, buffer-from@^1.0.0: +buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== @@ -7777,11 +7743,6 @@ mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" -mkdirp@1.x, mkdirp@^1.0.0, mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - 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" @@ -7789,6 +7750,11 @@ mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5: dependencies: minimist "^1.2.5" +mkdirp@^1.0.0, mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -10516,18 +10482,16 @@ trim-off-newlines@^1.0.0: integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= ts-jest@^27.0.2: - version "27.0.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.0.4.tgz#df49683535831560ccb58f94c023d831b1b80df0" - integrity sha512-c4E1ECy9Xz2WGfTMyHbSaArlIva7Wi2p43QOMmCqjSSjHP06KXv+aT+eSY+yZMuqsMi3k7pyGsGj2q5oSl5WfQ== + version "27.0.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.0.5.tgz#0b0604e2271167ec43c12a69770f0bb65ad1b750" + integrity sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w== dependencies: bs-logger "0.x" - buffer-from "1.x" fast-json-stable-stringify "2.x" jest-util "^27.0.0" json5 "2.x" lodash "4.x" make-error "1.x" - mkdirp "1.x" semver "7.x" yargs-parser "20.x" From e43410feeef7d3160e4c3ddb30082bbf35646489 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Aug 2021 14:06:35 +0300 Subject: [PATCH 109/173] chore(deps-dev): bump @types/node --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d70e4e575b9..5323d04fe30 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1944,9 +1944,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@^15.0.3": - version "15.14.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.7.tgz#29fea9a5b14e2b75c19028e1c7a32edd1e89fe92" - integrity sha512-FA45p37/mLhpebgbPWWCKfOisTjxGK9lwcHlJ6XVLfu3NgfcazOJHdYUZCWPMK8QX4LhNZdmfo6iMz9FqpUbaw== + version "15.14.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.8.tgz#b304a7b447d94d473755b92e760b75731c6049b8" + integrity sha512-+ZjmmoGV7WBwhzNh/GkwehB7uyXn9HFwzQUfj9pbyR8eFAq20Qguoh93sPbWzzhsbhTme6YE92/iJ54Z0WRH7A== "@types/normalize-package-data@^2.4.0": version "2.4.0" From 4d097642e19b66e239d328901ea972bfe14efb8b Mon Sep 17 00:00:00 2001 From: Anshuman Verma Date: Thu, 19 Aug 2021 16:37:38 +0530 Subject: [PATCH 110/173] docs: update server v4 options (#2905) --- SERVE-OPTIONS-v4.md | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/SERVE-OPTIONS-v4.md b/SERVE-OPTIONS-v4.md index 25a04630988..78b10f27992 100644 --- a/SERVE-OPTIONS-v4.md +++ b/SERVE-OPTIONS-v4.md @@ -11,63 +11,64 @@ Options: --node-env Sets process.env.NODE_ENV to the specified value. --progress [value] Print compilation progress during build. -j, --json [value] Prints result as JSON or store it in a file. + --entry The entry point(s) of your application e.g. ./src/main.js. + -o, --output-path Output location of the file generated by webpack e.g. ./dist/. + -t, --target Sets the build target e.g. node. -d, --devtool Determine source maps to use. --no-devtool Do not generate source maps. - --entry The entry point(s) of your application e.g. ./src/main.js. --mode Defines the mode to pass to webpack. --name Name of the configuration. Used when loading multiple configurations. - -o, --output-path Output location of the file generated by webpack e.g. ./dist/. --stats [value] It instructs webpack on how to treat the stats e.g. verbose. --no-stats Disable stats output. - -t, --target Sets the build target e.g. node. - --no-target Negative 'target' option. --watch-options-stdin Stop watching when stdin stream has ended. --no-watch-options-stdin Do not stop watching when stdin stream has ended. --allowed-hosts Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto'). --allowed-hosts-reset Clear all items provided in 'allowedHosts' configuration. Allows to enumerate the hosts from which access to the dev server are allowed (useful when you are proxying dev server, by default is 'auto'). --bonjour Allows to broadcasts dev server via ZeroConf networking on start. - --no-bonjour Negative 'bonjour' option. + --no-bonjour Disallows to broadcasts dev server via ZeroConf networking on start. + --client-web-socket-transport Allows to set custom web socket transport to communicate with dev server. --no-client Negative 'client' option. --client-logging Allows to specify options for client script in the browser or disable client script. + --client-progress Prints compilation progress in percentage in the browser. + --no-client-progress Does not print compilation progress in percentage in the browser. --client-overlay Enables a full-screen overlay in the browser when there are compiler errors or warnings. - --no-client-overlay Negative 'client-overlay' option. + --no-client-overlay Disables a full-screen overlay in the browser when there are compiler errors or warnings. --client-overlay-errors Enables a full-screen overlay in the browser when there are compiler errors. --no-client-overlay-errors Negative 'client-overlay-errors' option. --client-overlay-warnings Enables a full-screen overlay in the browser when there are compiler warnings. --no-client-overlay-warnings Negative 'client-overlay-warnings' option. - --client-progress Prints compilation progress in percentage in the browser. - --no-client-progress Negative 'client-progress' option. - --client-web-socket-transport Allows to set custom web socket transport to communicate with dev server. --client-web-socket-url Allows to specify URL to web socket server (useful when you're proxying dev server and client script does not always know where to connect to). --client-web-socket-url-hostname Tells clients connected to devServer to use the provided hostname. - --client-web-socket-url-pathname Tells clients connected to devServer to use the provided path to connect. - --client-web-socket-url-password Tells clients connected to devServer to use the provided password to authenticate. --client-web-socket-url-port Tells clients connected to devServer to use the provided port. + --client-web-socket-url-pathname Tells clients connected to devServer to use the provided path to connect. --client-web-socket-url-protocol Tells clients connected to devServer to use the provided protocol. --client-web-socket-url-username Tells clients connected to devServer to use the provided username to authenticate. + --client-web-socket-url-password Tells clients connected to devServer to use the provided password to authenticate. + --web-socket-server Allows to set web socket server and options (by default 'ws'). + --no-web-socket-server Negative 'web-socket-server' option. --compress Enables gzip compression for everything served. - --no-compress Negative 'compress' option. + --no-compress Disables gzip compression for everything served. --history-api-fallback Allows to proxy requests through a specified index page (by default 'index.html'), useful for Single Page Applications that utilise the HTML5 History API. --no-history-api-fallback Negative 'history-api-fallback' option. --host Allows to specify a hostname to use. --hot [value] Enables Hot Module Replacement. - --no-hot Negative 'hot' option. + --no-hot Disables Hot Module Replacement. --http2 Allows to serve over HTTP/2 using SPDY. - --no-http2 Negative 'http2' option. + --no-http2 Does not serve over HTTP/2 using SPDY. --https Allows to configure the server's listening socket for TLS (by default, dev server will be served over HTTP). - --no-https Negative 'https' option. + --no-https Disallows to configure the server's listening socket for TLS (by default, dev server will be served over HTTP). --https-passphrase Passphrase for a pfx file. --https-request-cert Request for an SSL certificate. - --no-https-request-cert Negative 'https-request-cert' option. + --no-https-request-cert Does not request for an SSL certificate. --https-cacert Path to an SSL CA certificate. --https-key Path to an SSL key. --https-pfx Path to an SSL pfx file. --https-cert Path to an SSL certificate. --ipc [value] Listen to a unix socket. --live-reload Enables reload/refresh the page(s) when file changes are detected (enabled by default). - --no-live-reload Negative 'live-reload' option. + --no-live-reload Disables reload/refresh the page(s) when file changes are detected (enabled by default) --open [value...] Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser). - --no-open Negative 'open' option. + --no-open Does not open the default browser. --open-target Opens specified page in browser. --open-app-name Open specified browser. --open-app Open specified browser. @@ -80,15 +81,13 @@ Options: --static-directory Directory for static contents. --static-public-path The static files will be available in the browser under this public path. --static-serve-index Tells dev server to use serveIndex middleware when enabled. - --no-static-serve-index Negative 'static-serve-index' option. + --no-static-serve-index Does not tell dev server to use serveIndex middleware. --static-watch Watches for files in static content directory. - --no-static-watch Negative 'static-watch' option. + --no-static-watch Does not watch for files in static content directory. --static-reset Clear all items provided in 'static' configuration. Allows to configure options for serving static files from directory (by default 'public' directory). --static-public-path-reset Clear all items provided in 'static.publicPath' configuration. The static files will be available in the browser under this public path. --watch-files Allows to configure list of globs/directories/files to watch for file changes. --watch-files-reset Clear all items provided in 'watchFiles' configuration. Allows to configure list of globs/directories/files to watch for file changes. - --web-socket-server Allows to set web socket server and options (by default 'ws'). - --no-web-socket-server Negative 'web-socket-server' option. Global options: --color Enable colors on console. From 8e8551f14726c97dff6bc2c54930f28297875aa8 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Thu, 19 Aug 2021 17:52:56 +0530 Subject: [PATCH 111/173] test: update snapshot for `webpack-dev-server@4.0.0` (#2903) --- .github/workflows/nodejs.yml | 4 ++-- .../serve-basic.test.js.snap.devServer4.webpack4 | 7 ++++++- .../serve-basic.test.js.snap.devServer4.webpack5 | 7 ++++++- test/serve/basic/serve-basic.test.js | 10 +++++++--- yarn.lock | 6 +++--- 5 files changed, 24 insertions(+), 10 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 9babe882e1e..1d6e35c2a49 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -56,10 +56,10 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest] node-version: [10.x, 12.x, 14.x, 16.x] webpack-version: [4, latest] - dev-server-version: [latest, next] + dev-server-version: [version-3, latest] exclude: - node-version: 10.x - dev-server-version: next + dev-server-version: latest steps: - uses: actions/checkout@v2 diff --git a/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack4 b/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack4 index 17bee54b7b5..6f536dc1374 100644 --- a/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack4 +++ b/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack4 @@ -67,7 +67,12 @@ exports[`basic serve usage should respect the "publicPath" option from configura `; exports[`basic serve usage should throw error when same ports in multicompiler: stderr 1`] = ` -"[webpack-cli] Error: Unique ports must be specified for each devServer option in your webpack configuration. Alternatively, run only 1 devServer config using the --config-name flag to specify your desired config. +" [webpack-dev-server] Project is running at: + [webpack-dev-server] Loopback: http://localhost:/ + [webpack-dev-server] On Your Network (IPv4): http://:/ + [webpack-dev-server] On Your Network (IPv6): http://[]:/ + [webpack-dev-server] Content not from webpack is served from '/test/serve/basic/public' directory +[webpack-cli] Error: Unique ports must be specified for each devServer option in your webpack configuration. Alternatively, run only 1 devServer config using the --config-name flag to specify your desired config. at stack" `; diff --git a/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack5 b/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack5 index 628436d4780..8bbe23f7b21 100644 --- a/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack5 +++ b/test/serve/basic/__snapshots__/serve-basic.test.js.snap.devServer4.webpack5 @@ -67,7 +67,12 @@ exports[`basic serve usage should respect the "publicPath" option from configura `; exports[`basic serve usage should throw error when same ports in multicompiler: stderr 1`] = ` -"[webpack-cli] Error: Unique ports must be specified for each devServer option in your webpack configuration. Alternatively, run only 1 devServer config using the --config-name flag to specify your desired config. +" [webpack-dev-server] Project is running at: + [webpack-dev-server] Loopback: http://localhost:/ + [webpack-dev-server] On Your Network (IPv4): http://:/ + [webpack-dev-server] On Your Network (IPv6): http://[]:/ + [webpack-dev-server] Content not from webpack is served from '/test/serve/basic/public' directory +[webpack-cli] Error: Unique ports must be specified for each devServer option in your webpack configuration. Alternatively, run only 1 devServer config using the --config-name flag to specify your desired config. at stack" `; diff --git a/test/serve/basic/serve-basic.test.js b/test/serve/basic/serve-basic.test.js index b2fba51819b..17176322e59 100644 --- a/test/serve/basic/serve-basic.test.js +++ b/test/serve/basic/serve-basic.test.js @@ -189,9 +189,13 @@ describe("basic serve usage", () => { expect(stdout).not.toContain("HotModuleReplacementPlugin"); } - expect(stdout).toContain( - isWebpack5 ? "from webpack.Compiler" : "webpack.buildChunkGraph.visitModules", - ); + const isMacOS = process.platform === "darwin"; + + if (!isMacOS) { + expect(stdout).toContain( + isWebpack5 ? "from webpack.Compiler" : "webpack.buildChunkGraph.visitModules", + ); + } expect(stdout).toContain("main.js"); }); diff --git a/yarn.lock b/yarn.lock index 5323d04fe30..12daad29e8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7831,9 +7831,9 @@ mute-stream@0.0.8, mute-stream@~0.0.4: integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== nanomatch@^1.2.9: version "1.2.13" From 77668d7adc02bda63223a77a1164bd52f7ca0bce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Aug 2021 13:46:05 +0300 Subject: [PATCH 112/173] chore(deps-dev): bump webpack from 5.50.0 to 5.51.1 (#2906) Bumps [webpack](https://github.com/webpack/webpack) from 5.50.0 to 5.51.1. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.50.0...v5.51.1) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 12daad29e8a..f7f243e7869 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10987,9 +10987,9 @@ webpack-sources@^3.2.0: integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== webpack@^5.45.1: - version "5.50.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.50.0.tgz#5562d75902a749eb4d75131f5627eac3a3192527" - integrity sha512-hqxI7t/KVygs0WRv/kTgUW8Kl3YC81uyWQSo/7WUs5LsuRw0htH/fCwbVBGCuiX/t4s7qzjXFcf41O8Reiypag== + version "5.51.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.51.1.tgz#41bebf38dccab9a89487b16dbe95c22e147aac57" + integrity sha512-xsn3lwqEKoFvqn4JQggPSRxE4dhsRcysWTqYABAZlmavcoTmwlOb9b1N36Inbt/eIispSkuHa80/FJkDTPos1A== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" From 458c0a951601ce13992ab8b8a93af26da4436655 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Aug 2021 15:33:10 +0300 Subject: [PATCH 113/173] chore(deps-dev): bump @types/node --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index f7f243e7869..566e12af446 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1944,9 +1944,9 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@^15.0.3": - version "15.14.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.8.tgz#b304a7b447d94d473755b92e760b75731c6049b8" - integrity sha512-+ZjmmoGV7WBwhzNh/GkwehB7uyXn9HFwzQUfj9pbyR8eFAq20Qguoh93sPbWzzhsbhTme6YE92/iJ54Z0WRH7A== + version "15.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" + integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== "@types/normalize-package-data@^2.4.0": version "2.4.0" From 8378740f6368ea252758b10ee1dd7e696a763a99 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Mon, 23 Aug 2021 15:33:36 +0300 Subject: [PATCH 114/173] chore: setup prettier as standalone (#2908) --- .editorconfig | 21 +- .eslintrc.js | 87 +- .github/CONTRIBUTING.md | 170 +- .prettierignore | 2 +- CHANGELOG.md | 1412 +++--- README.md | 44 +- commitlint.config.js | 2 +- jest.config.js | 46 +- lint-staged.config.js | 4 +- package.json | 3 +- packages/README.md | 6 +- packages/configtest/CHANGELOG.md | 10 +- packages/configtest/src/index.ts | 116 +- packages/generators/CHANGELOG.md | 100 +- packages/generators/INIT.md | 18 +- packages/generators/README.md | 16 +- .../generators/addon-template/package.json.js | 10 +- .../generators/init-template/default/.babelrc | 16 +- .../init-template/default/package.json.js | 30 +- .../init-template/default/postcss.config.js | 6 +- packages/generators/src/addon-generator.ts | 200 +- packages/generators/src/handlers.ts | 2 +- packages/generators/src/handlers/default.ts | 388 +- packages/generators/src/index.ts | 206 +- packages/generators/src/init-generator.ts | 182 +- packages/generators/src/loader-generator.ts | 34 +- packages/generators/src/plugin-generator.ts | 28 +- packages/generators/src/types/index.ts | 8 +- packages/generators/src/utils/helpers.ts | 70 +- .../generators/src/utils/scaffold-utils.ts | 94 +- packages/info/CHANGELOG.md | 18 +- packages/info/src/index.ts | 139 +- packages/serve/CHANGELOG.md | 68 +- packages/serve/src/index.ts | 671 ++- packages/serve/src/types.ts | 164 +- packages/webpack-cli/CHANGELOG.md | 794 ++-- packages/webpack-cli/bin/cli.js | 42 +- packages/webpack-cli/lib/bootstrap.js | 18 +- packages/webpack-cli/lib/plugins/CLIPlugin.js | 222 +- .../lib/utils/capitalize-first-letter.js | 8 +- .../lib/utils/dynamic-import-loader.js | 14 +- .../lib/utils/get-available-installers.js | 26 +- .../lib/utils/get-package-manager.js | 74 +- packages/webpack-cli/lib/utils/index.js | 78 +- packages/webpack-cli/lib/utils/logger.js | 12 +- .../webpack-cli/lib/utils/package-exists.js | 28 +- .../lib/utils/prompt-installation.js | 74 +- packages/webpack-cli/lib/utils/prompt.js | 34 +- packages/webpack-cli/lib/utils/run-command.js | 12 +- .../webpack-cli/lib/utils/to-kebab-case.js | 2 +- packages/webpack-cli/lib/webpack-cli.js | 3859 ++++++++--------- prettier.config.js | 4 +- scripts/cleanupTest.js | 28 +- scripts/prepareSuite.js | 28 +- scripts/snapshotResolver.js | 34 +- scripts/updateDocs.js | 66 +- scripts/utils.js | 44 +- setupTest.js | 2 +- smoketests/helpers.js | 402 +- smoketests/index.js | 50 +- .../configtest.test.js | 16 +- .../generator.test.js | 16 +- .../missing-command-packages/info.test.js | 12 +- .../missing-command-packages/serve.test.js | 12 +- smoketests/missing-packages/prettier.test.js | 46 +- .../webpack-bundle-analyzer.test.js | 8 +- .../webpack-dev-server.test.js | 17 +- smoketests/missing-packages/webpack.test.js | 8 +- test/.eslintrc | 16 +- test/api/CLI.test.js | 3449 ++++++++------- test/api/capitalizeFirstLetter.test.js | 12 +- test/api/generators/helpers.test.js | 84 +- test/api/generators/scaffold-utils.test.js | 149 +- test/api/get-package-manager.test.js | 160 +- test/api/prompt-installation.test.js | 148 +- test/api/prompt.test.js | 94 +- test/api/resolveConfig/env.webpack.config.cjs | 10 +- test/api/resolveConfig/resolveConfig.test.js | 112 +- test/api/resolveConfig/webpack.config.cjs | 34 +- test/api/resolveConfig/webpack.config1.cjs | 10 +- test/api/resolveConfig/webpack.config2.cjs | 12 +- .../resolveConfig/webpack.promise.config.cjs | 22 +- test/build/analyze/analyze-flag.test.js | 26 +- test/build/analyze/analyze.config.js | 14 +- test/build/analyze/webpack.config.js | 4 +- .../bail/bail-and-watch-webpack.config.js | 10 +- test/build/bail/bail-multi-webpack.config.js | 34 +- test/build/bail/bail-webpack.config.js | 8 +- test/build/bail/bail.test.js | 27 +- test/build/bail/multi-webpack.config.js | 36 +- test/build/bail/no-bail-webpack.config.js | 6 +- test/build/bail/watch-webpack.config.js | 8 +- test/build/basic/basic.test.js | 371 +- test/build/basic/entry.config.js | 4 +- test/build/basic/log.config.js | 8 +- test/build/build-errors/errors.test.js | 104 +- .../build-variable/build-variable.test.js | 12 +- test/build/build-variable/webpack.config.js | 34 +- test/build/build-warnings/warnings.test.js | 82 +- .../bundle-variable/bundle-variable.test.js | 12 +- test/build/bundle-variable/webpack.config.js | 34 +- test/build/cache/cache.test.js | 487 +-- test/build/cache/multi.config.js | 86 +- test/build/cache/webpack.config.js | 38 +- .../colors/colors-false.webpack.config.js | 8 +- .../colors/colors-true.webpack.config.js | 8 +- test/build/colors/colors.test.js | 427 +- .../multi-stats-colors.webpack.config.js | 36 +- test/build/colors/multiple-configs.js | 24 +- test/build/colors/no-stats.webpack.config.js | 4 +- .../colors/stats-boolean.webpack.config.js | 4 +- .../colors/stats-colors.webpack.config.js | 10 +- .../colors/stats-string.webpack.config.js | 4 +- test/build/colors/webpack.config.js | 2 +- .../build/config-format/coffee/coffee.test.js | 24 +- .../commonjs-default/commonjs-default.test.js | 12 +- .../commonjs-default/webpack.config.cjs | 12 +- .../config-format/commonjs/commonjs.test.js | 12 +- .../config-format/commonjs/webpack.config.cjs | 12 +- .../config-format/failure/failure.test.js | 22 +- test/build/config-format/mjs/mjs.test.js | 26 +- .../config-format/mjs/webpack.config.mjs | 12 +- .../typescript-esnext/typescript.test.js | 36 +- .../typescript-esnext/webpack.config.ts | 12 +- .../typescript/typescript.test.js | 14 +- .../typescript/webpack.config.ts | 12 +- .../custom-name/config.webpack.js | 10 +- .../custom-name/config.webpack.mjs | 10 +- .../custom-name/custom-name.test.js | 52 +- .../.webpack/webpack.config.js | 36 +- .../dotfolder-array/dotfolder-array.test.js | 16 +- .../.webpack/webpack.config.js | 2 +- .../dotfolder-single/dotfolder-single.test.js | 16 +- .../relative/basic-config.test.js | 44 +- .../config-lookup/relative/webpack.config.js | 10 +- test/build/config-name/config-name.test.js | 272 +- test/build/config-name/function-config.js | 42 +- test/build/config-name/single-config.js | 12 +- test/build/config-name/single-other-config.js | 12 +- test/build/config-name/webpack.config.js | 44 +- .../build/config/absent/config-absent.test.js | 26 +- .../config/absent/webpack.config-absent.js | 10 +- test/build/config/basic/basic-config.test.js | 22 +- test/build/config/basic/webpack.config.js | 10 +- .../basic-config/default-js-config.test.js | 34 +- .../defaults/basic-config/webpack.config.js | 8 +- .../cjs-config/default-cjs-config.test.js | 34 +- .../defaults/cjs-config/webpack.config.cjs | 8 +- .../.webpack/webpackfile.js | 12 +- .../multiple-location-config.test.js | 14 +- .../.webpack/webpack.config.js | 12 +- .../dev-none-config.test.js | 14 +- .../mjs-config/default-mjs-config.test.js | 48 +- .../defaults/mjs-config/webpack.config.mjs | 8 +- .../with-mode/multiple-config.test.js | 14 +- .../defaults/with-mode/webpack.config.js | 10 +- .../config/empty-array/empty-array.test.js | 18 +- .../empty-function/empty-function.test.js | 18 +- .../config/empty-function/webpack.config.js | 2 +- .../empty-promise/empty-promise.test.js | 18 +- .../config/empty-promise/webpack.config.js | 2 +- test/build/config/empty/empty.test.js | 18 +- .../error-array/config-array-error.test.js | 12 +- .../error-commonjs/config-error.test.js | 38 +- .../config/error-commonjs/webpack.config.js | 6 +- .../config/error-mjs/config-error.test.js | 72 +- .../build/config/error-mjs/webpack.config.mjs | 6 +- .../config/function/functional-config.test.js | 44 +- .../config/function/multi-webpack.config.js | 32 +- .../config/function/single-webpack.config.js | 14 +- .../invalid-export/invalid-export.test.js | 22 +- .../config/invalid-path/invalid-path.test.js | 22 +- .../config/invalid-path/webpack.config.js | 10 +- .../multiple-with-one-compilation.test.js | 22 +- .../webpack.config.js | 12 +- .../config/multiple/multiple-config.test.js | 28 +- test/build/config/multiple/webpack1.config.js | 16 +- test/build/config/multiple/webpack2.config.js | 16 +- .../no-config-array/no-config-array.test.js | 18 +- .../no-config-object/no-config-object.test.js | 22 +- .../top-multi-compilers-options.test.js | 46 +- .../webpack.config.js | 54 +- .../function-with-argv.test.js | 16 +- .../webpack.config.js | 40 +- .../array-function-with-env.test.js | 16 +- .../array-function-with-env/webpack.config.js | 40 +- .../array-functions/array-functions.test.js | 22 +- .../type/array-functions/webpack.config.js | 40 +- .../array-promises/array-promises.test.js | 16 +- .../type/array-promises/webpack.config.js | 48 +- test/build/config/type/array/array.test.js | 40 +- .../build/config/type/array/webpack.config.js | 40 +- .../function-array/function-array.test.js | 22 +- .../type/function-array/webpack.config.js | 28 +- .../function-async/function-async.test.js | 20 +- .../type/function-async/webpack.config.js | 14 +- .../function-promise/function-promise.test.js | 20 +- .../type/function-promise/webpack.config.js | 22 +- .../function-with-argv.test.js | 20 +- .../type/function-with-argv/webpack.config.js | 16 +- test/build/config/type/function-with-env/a.js | 2 +- .../function-with-env.test.js | 378 +- .../type/function-with-env/webpack.config.js | 86 +- .../function-with-env/webpack.env.config.js | 60 +- .../config/type/function/function.test.js | 20 +- .../config/type/function/webpack.config.js | 14 +- .../type/promise-array/promise-array.test.js | 16 +- .../type/promise-array/webpack.config.js | 36 +- .../promise-function/promise-function.test.js | 14 +- .../type/promise-function/webpack.config.js | 18 +- .../build/config/type/promise/promise.test.js | 14 +- .../config/type/promise/webpack.config.js | 22 +- test/build/core-flags/core-flags.test.js | 498 +-- test/build/core-flags/my-warning-loader.js | 6 +- test/build/core-flags/warning.config.js | 38 +- test/build/core-flags/webpack.cache.config.js | 16 +- test/build/core-flags/webpack.config.js | 8 +- .../custom-webpack/custom-webpack.test.js | 34 +- test/build/custom-webpack/webpack.config.js | 2 +- test/build/defaults/output-defaults.test.js | 72 +- .../devtool/array/source-map-array.test.js | 84 +- test/build/devtool/array/webpack.config.js | 42 +- .../devtool/object/source-map-object.test.js | 110 +- .../devtool/object/webpack.eval.config.js | 18 +- .../devtool/object/webpack.source.config.js | 18 +- test/build/entry/config-entry/1.js | 14 +- .../entry-with-config.test.js | 14 +- .../entry-with-config.test.js | 24 +- .../entry-with-index/webpack.config.js | 18 +- .../defaults-empty/entry-single-arg.test.js | 12 +- .../defaults-index/entry-multi-args.test.js | 28 +- .../entry/flag-entry/entry-with-flag.test.js | 92 +- .../multiple-entries/multi-entries.test.js | 40 +- test/build/entry/scss/home.scss | 8 +- test/build/entry/scss/scss.test.js | 12 +- test/build/entry/scss/webpack.config.js | 46 +- test/build/env/array/array-env.test.js | 24 +- test/build/env/array/webpack.config.js | 46 +- test/build/env/object/object-env.test.js | 22 +- test/build/env/object/webpack.config.js | 16 +- .../build/error/error-in-plugin/error.test.js | 42 +- .../error/error-in-plugin/webpack.config.js | 14 +- .../invalid-schema/invalid-schema.test.js | 304 +- .../invalid-schema/webpack.mock.config.js | 2 +- .../webpack.plugin-mock.config.js | 12 +- test/build/hot/hot-flag.test.js | 80 +- test/build/hot/webpack.config.js | 4 +- test/build/import-local/import-local.test.js | 22 +- test/build/json/json.test.js | 336 +- test/build/json/logging.config.js | 6 +- test/build/merge/config-absent/1.js | 2 +- .../config-absent/merge-config-absent.test.js | 30 +- test/build/merge/config/1.js | 12 +- test/build/merge/config/2.js | 10 +- test/build/merge/config/3.js | 8 +- test/build/merge/config/merge-config.test.js | 106 +- .../mode-single-arg/mode-single-arg.test.js | 94 +- .../mode/mode-single-arg/webpack.config.js | 4 +- .../mode-with-config/mode-with-config.test.js | 226 +- .../mode/mode-with-config/webpack.config.js | 10 +- .../mode/mode-with-config/webpack.config2.js | 4 +- .../mode/mode-with-config/webpack.config3.js | 2 +- test/build/name/name.test.js | 12 +- test/build/name/webpack.config.js | 2 +- test/build/node-env/auto-mode.config.js | 2 +- test/build/node-env/node-env.test.js | 102 +- test/build/node-env/webpack.config.js | 4 +- test/build/node/node.test.js | 70 +- test/build/node/webpack.config.js | 10 +- .../build/output/output-named-bundles.test.js | 108 +- test/build/output/webpack.config.js | 12 +- test/build/output/webpack.defaults.config.js | 10 +- test/build/output/webpack.multiple.config.js | 18 +- test/build/output/webpack.single.config.js | 18 +- test/build/prefetch/prefetch.test.js | 77 +- test/build/progress/progress-flag.test.js | 90 +- .../build/progress/webpack.progress.config.js | 2 +- .../start-finish-force-log.test.js | 86 +- .../webpack.config.array.js | 16 +- .../start-finish-force-log/webpack.config.js | 2 +- .../config-no/no-stats-with-config.test.js | 44 +- test/build/stats/config-no/webpack.config.js | 8 +- test/build/stats/config/stats.test.js | 104 +- test/build/stats/config/webpack.config.js | 8 +- test/build/stats/flags/stats.test.js | 150 +- test/build/stats/flags/webpack.config.js | 6 +- .../target/flag-test/target-flag.test.js | 198 +- test/build/target/flag-test/webpack.config.js | 8 +- test/build/target/node/node-test.test.js | 12 +- test/build/target/node/webpack.config.js | 6 +- test/build/unknown/unknown.test.js | 293 +- .../entry-absent/zero-config.test.js | 14 +- .../entry-present/zero-config.test.js | 18 +- .../with-config-path/basic.config.js | 6 +- .../with-config-path/error.config.js | 6 +- .../with-config-path/with-config-path.test.js | 90 +- .../without-config-path.test.js | 12 +- .../webpack.config.js | 6 +- .../without-config-path-error.test.js | 12 +- .../webpack.config.js | 20 +- ...ut-config-path-multi-compiler-mode.test.js | 12 +- ...thout-config-path-no-configuration.test.js | 12 +- .../without-config-path/webpack.config.js | 6 +- .../without-config-path.test.js | 12 +- test/help/help.test.js | 774 ++-- test/info/info-output.test.js | 104 +- test/info/info-unknown.test.js | 12 +- test/init/init.test.js | 1034 +++-- test/loader/error-test/loader-error.test.js | 16 +- test/loader/error-test/webpack.config.js | 36 +- test/loader/loader.test.js | 342 +- .../warning-test/loader-warning.test.js | 12 +- test/loader/warning-test/my-loader.js | 6 +- test/loader/warning-test/webpack.config.js | 50 +- test/plugin/plugin.test.js | 426 +- .../dev-server-output-public-path.config.js | 14 +- test/serve/basic/function-with-argv.config.js | 26 +- test/serve/basic/function-with-env.config.js | 26 +- .../basic/helper/base-dev-server.config.js | 22 +- test/serve/basic/log.config.js | 22 +- ...ti-dev-server-output-public-path.config.js | 54 +- test/serve/basic/multi-dev-server.config.js | 48 +- .../basic/multi-output-public-path.config.js | 48 +- test/serve/basic/multi.config.js | 34 +- .../serve/basic/multiple-dev-server.config.js | 38 +- test/serve/basic/output-public-path.config.js | 26 +- .../basic/same-ports-dev-serever.config.js | 42 +- test/serve/basic/serve-basic.test.js | 1146 +++-- test/serve/basic/serve.config.js | 20 +- test/serve/basic/stats.config.js | 28 +- test/serve/basic/watch.config.js | 22 +- test/serve/basic/webpack.config.js | 20 +- .../invalid-schema/invalid-schema.test.js | 80 +- .../webpack-dev-server.config.mock.js | 8 +- .../invalid-schema/webpack.config.mock.js | 2 +- .../serve-variable/serve-variable.test.js | 30 +- test/serve/serve-variable/webpack.config.js | 34 +- .../serve-custom-config.test.js | 94 +- test/serve/with-custom-port/webpack.config.js | 16 +- test/utils/cli-plugin-test/plugin.test.js | 20 +- test/utils/cli-plugin-test/webpack.config.js | 24 +- test/utils/test-utils.js | 478 +- test/utils/test-utils.test.js | 150 +- test/utils/webpack-cli-test-plugin.js | 50 +- test/version/version.test.js | 514 +-- test/watch/analyze/analyze-flag.test.js | 14 +- test/watch/analyze/analyze.config.js | 14 +- test/watch/analyze/webpack.config.js | 4 +- .../bail/bail-and-watch-webpack.config.js | 10 +- test/watch/bail/bail-multi-webpack.config.js | 34 +- test/watch/bail/bail-webpack.config.js | 8 +- test/watch/bail/bail.test.js | 102 +- test/watch/bail/multi-webpack.config.js | 36 +- test/watch/bail/no-bail-webpack.config.js | 6 +- test/watch/bail/watch-webpack.config.js | 8 +- test/watch/basic/basic.test.js | 419 +- test/watch/basic/log.config.js | 8 +- test/watch/basic/watch.config.js | 2 +- test/watch/stats/multi-webpack.config.js | 68 +- test/watch/stats/stats-and-watch.test.js | 40 +- test/watch/stats/webpack.config.js | 30 +- test/watch/stdin/multi-serve.config.js | 14 +- test/watch/stdin/multi-watch.config.js | 16 +- test/watch/stdin/serve.config.js | 6 +- test/watch/stdin/stdin.test.js | 176 +- test/watch/stdin/watch.config.js | 8 +- .../watch-variable/watch-variable.test.js | 140 +- test/watch/watch-variable/webpack.config.js | 34 +- yarn.lock | 19 - 369 files changed, 15431 insertions(+), 15710 deletions(-) diff --git a/.editorconfig b/.editorconfig index 13c919daf16..1cd054b5315 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,26 +1,15 @@ root = true [*] -indent_style = space -indent_size = 4 charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 233 - -[*.js] -end_of_line = lf - -[*.json] indent_style = space indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true -[*.yml] -indent_style = space -indent_size = 2 +[*.md] +trim_trailing_whitespace = false [test/cases/parsing/bom/bomfile.{css,js}] charset = utf-8-bom - -[*.md] -trim_trailing_whitespace = false diff --git a/.eslintrc.js b/.eslintrc.js index 282964570ca..a17e0c5be7c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,51 +1,46 @@ module.exports = { - root: true, - reportUnusedDisableDirectives: true, - extends: [ - "eslint:recommended", - "plugin:node/recommended", - "plugin:prettier/recommended", - "prettier", - ], - parserOptions: { ecmaVersion: 2018, sourceType: "script" }, - plugins: ["node"], - settings: { + root: true, + reportUnusedDisableDirectives: true, + extends: ["eslint:recommended", "plugin:node/recommended", "prettier"], + parserOptions: { ecmaVersion: 2018, sourceType: "script" }, + plugins: ["node"], + settings: { + node: { + allowModules: ["@webpack-cli/generators"], + }, + }, + env: { + node: true, + es6: true, + jest: true, + }, + rules: { + "no-process-exit": "off", + "no-template-curly-in-string": "error", + "no-caller": "error", + "no-extra-bind": "error", + "no-loop-func": "error", + "no-undef": "error", + "prefer-const": "error", + }, + overrides: [ + { + settings: { node: { - allowModules: ["@webpack-cli/generators"], + tryExtensions: [".ts", ".tsx", ".js", ".jsx", ".json"], }, + }, + files: ["**/*.ts"], + extends: [ + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + "prettier", + ], + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint"], + rules: { + "node/no-unsupported-features/es-syntax": "off", + }, }, - env: { - node: true, - es6: true, - jest: true, - }, - rules: { - "no-process-exit": "off", - "no-template-curly-in-string": "error", - "no-caller": "error", - "no-extra-bind": "error", - "no-loop-func": "error", - "no-undef": "error", - "prefer-const": "error", - }, - overrides: [ - { - settings: { - node: { - tryExtensions: [".ts", ".tsx", ".js", ".jsx", ".json"], - }, - }, - files: ["**/*.ts"], - extends: [ - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "prettier", - ], - parser: "@typescript-eslint/parser", - plugins: ["@typescript-eslint"], - rules: { - "node/no-unsupported-features/es-syntax": "off", - }, - }, - ], + ], }; diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 0b85fbb6c8c..991bd4ca88e 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -7,26 +7,26 @@ work is not in vain. Table of Contents -- [Issues](#issues) -- [Your first Contribution](#your-first-contribution) -- [Setup](#setup) -- [Running Tests](#running-tests) - - [Using yarn](#using-yarn) -- [Editor Config](#editor-config) -- [Dependencies](#dependencies) -- [Branching Model](#branching-model) -- [Naming a branch](#naming-a-branch) - - [Features](#features) - - [Fixes](#fixes) -- [Testing](#testing) -- [Pull Requests](#pull-requests) -- [Submitting a good Pull Request](#submitting-a-good-pull-request) -- [Commit message](#commit-message) - - [Commit Message Format](#commit-message-format) -- [Contributor License Agreement](#contributor-license-agreement) -- [Documentation](#documentation) -- [Releasing](#releasing) -- [Join The Development](#join-the-development) +- [Issues](#issues) +- [Your first Contribution](#your-first-contribution) +- [Setup](#setup) +- [Running Tests](#running-tests) + - [Using yarn](#using-yarn) +- [Editor Config](#editor-config) +- [Dependencies](#dependencies) +- [Branching Model](#branching-model) +- [Naming a branch](#naming-a-branch) + - [Features](#features) + - [Fixes](#fixes) +- [Testing](#testing) +- [Pull Requests](#pull-requests) +- [Submitting a good Pull Request](#submitting-a-good-pull-request) +- [Commit message](#commit-message) + - [Commit Message Format](#commit-message-format) +- [Contributor License Agreement](#contributor-license-agreement) +- [Documentation](#documentation) +- [Releasing](#releasing) +- [Join The Development](#join-the-development) ## Issues @@ -52,29 +52,29 @@ In case you are suggesting a new feature, we will match your idea with our curre ## Setup -- Install [Node.js](https://nodejs.org/) if you don't have it already. - _Note: Node 6 or greater would be better for "best results"._ -- Fork the **webpack-cli** repo at [https://github.com/webpack/webpack-cli](https://github.com/webpack/webpack-cli). -- `git clone && cd webpack-cli` +- Install [Node.js](https://nodejs.org/) if you don't have it already. + _Note: Node 6 or greater would be better for "best results"._ +- Fork the **webpack-cli** repo at [https://github.com/webpack/webpack-cli](https://github.com/webpack/webpack-cli). +- `git clone && cd webpack-cli` -- We use [yarn](https://yarnpkg.com/lang/en/) workspaces, please install it: +- We use [yarn](https://yarnpkg.com/lang/en/) workspaces, please install it: - Read the [Installation Guide](https://yarnpkg.com/en/docs/install) on their official website for detailed instructions on how to install Yarn. + Read the [Installation Guide](https://yarnpkg.com/en/docs/install) on their official website for detailed instructions on how to install Yarn. > Using yarn is not a requirement, [npm](https://www.npmjs.com/) is included in node. -- Install the dependencies: +- Install the dependencies: - ```bash - yarn install - ``` + ```bash + yarn install + ``` -- Bootstrap all the submodules before building for the first time +- Bootstrap all the submodules before building for the first time - ```bash - yarn lerna bootstrap - yarn build - ``` + ```bash + yarn lerna bootstrap + yarn build + ``` > If you are a Docker and Visual Studio Code user, you can quickstart development using [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) Extension @@ -82,44 +82,44 @@ In case you are suggesting a new feature, we will match your idea with our curre ### Using yarn -- Run all the tests with: +- Run all the tests with: - ```bash - yarn test - ``` + ```bash + yarn test + ``` -- Run CLI tests with: +- Run CLI tests with: - ```bash - yarn test:cli - ``` + ```bash + yarn test:cli + ``` -- Run tests of all packages: +- Run tests of all packages: - ```bash - yarn test:packages - ``` + ```bash + yarn test:packages + ``` -- Test a single CLI test case: +- Test a single CLI test case: - > Must run from root of the project + > Must run from root of the project - ```bash - yarn jest path/to/my-test.js - ``` + ```bash + yarn jest path/to/my-test.js + ``` -- You can also install jest globally and run tests without npx: +- You can also install jest globally and run tests without npx: - ```bash - yarn global add jest - jest path/to/my-test.js - ``` + ```bash + yarn global add jest + jest path/to/my-test.js + ``` -- You can run the linters: +- You can run the linters: - ```bash - yarn lint - ``` + ```bash + yarn lint + ``` ## Editor Config @@ -139,15 +139,15 @@ We base our branching model on [git flow](http://nvie.com/posts/a-successful-git Making a branch in your fork for your contribution is helpful in the following ways: -- It allows you to submit more than one contribution in a single PR. -- It allows us to identify what your contribution is about from the branch name. +- It allows you to submit more than one contribution in a single PR. +- It allows us to identify what your contribution is about from the branch name. You will want to checkout the `master` branch locally before creating your new branch. There are two types of branches: -- Feature -- Bugfix +- Feature +- Bugfix ### Features @@ -178,12 +178,12 @@ In case you've got a small change in most of the cases, your pull request would ## Submitting a good Pull Request -- Write tests. -- Follow the existing coding style. -- Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) -- For a major bugfix/feature make sure your PR has an issue and if it doesn't, please create one. This would help discussion with the community, and polishing ideas in case of a new feature. -- Make sure your PR's description contains GitHub's special keyword references that automatically close the related issue when the PR is merged. ([More info](https://github.com/blog/1506-closing-issues-via-pull-requests)) -- When you have lot of commits in your PR, it's good practice to squash all your commits in one single commit. ([Learn how to squash here](https://davidwalsh.name/squash-commits-git)) +- Write tests. +- Follow the existing coding style. +- Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) +- For a major bugfix/feature make sure your PR has an issue and if it doesn't, please create one. This would help discussion with the community, and polishing ideas in case of a new feature. +- Make sure your PR's description contains GitHub's special keyword references that automatically close the related issue when the PR is merged. ([More info](https://github.com/blog/1506-closing-issues-via-pull-requests)) +- When you have lot of commits in your PR, it's good practice to squash all your commits in one single commit. ([Learn how to squash here](https://davidwalsh.name/squash-commits-git)) ## Commit message @@ -206,17 +206,17 @@ format that includes a **type** and a **subject**: This is the list of _type_ of commits that we accept: -- **build** : Changes that affect the build system or external dependencies (example scopes: typescript, webpack, npm). -- **chore** : Updating deps, docs, linting, etc. -- **ci** : Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs) -- **docs** : Documentation only changes. -- **feat** : A new feature. -- **fix** : A bug fix. -- **perf** : A code change that improves performance. -- **refactor** : A code change that neither fixes a bug nor adds a feature. -- **revert** : Reverts the previous commit. -- **style** : Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc). -- **test** : Adding missing tests or correcting existing tests. +- **build** : Changes that affect the build system or external dependencies (example scopes: typescript, webpack, npm). +- **chore** : Updating deps, docs, linting, etc. +- **ci** : Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs) +- **docs** : Documentation only changes. +- **feat** : A new feature. +- **fix** : A bug fix. +- **perf** : A code change that improves performance. +- **refactor** : A code change that neither fixes a bug nor adds a feature. +- **revert** : Reverts the previous commit. +- **style** : Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc). +- **test** : Adding missing tests or correcting existing tests. The **header** is mandatory. @@ -252,8 +252,8 @@ Run `yarn publish:monorepo` to build all packages and bump versions, this will t ## Join the development -- Before you join development, please set up the project on your local machine, run it and go through the application completely. Use any command you can find and see what it does. Explore. +- Before you join development, please set up the project on your local machine, run it and go through the application completely. Use any command you can find and see what it does. Explore. - > Don't worry ... Nothing will happen to the project or to you due to the exploring. Only thing that will happen is, you'll be more familiar with what is where and might even get some cool ideas on how to improve various aspects of the project. + > Don't worry ... Nothing will happen to the project or to you due to the exploring. Only thing that will happen is, you'll be more familiar with what is where and might even get some cool ideas on how to improve various aspects of the project. -- If you would like to work on an issue, drop in a comment at the issue. If it is already assigned to someone, but there is no sign of any work being done, please feel free to drop in a comment so that the issue can be assigned to you if the previous assignee has dropped it entirely. +- If you would like to work on an issue, drop in a comment at the issue. If it is already assigned to someone, but there is no sign of any work being done, please feel free to drop in a comment so that the issue can be assigned to you if the previous assignee has dropped it entirely. diff --git a/.prettierignore b/.prettierignore index 5b50a3c9941..d78acaa4cd9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -15,4 +15,4 @@ test/build/config/error-array/webpack.config.js test/build/config/error-mjs/syntax-error.mjs test/configtest/with-config-path/syntax-error.config.js packages/webpack-cli/__tests__/test-assets/.yo-rc.json -test/build-errors/stats.json +test/build/build-errors/stats.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b38cf05ba8..e0a34210582 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,13 +2,13 @@ ### Bug Fixes -- show default value in help output if available ([#2814](https://github.com/webpack/webpack-cli/issues/2814)) ([7f50948](https://github.com/webpack/webpack-cli/commit/7f50948bb984821449277d6b5632b98a695eb029)) -- support top multi compiler options ([#2874](https://github.com/webpack/webpack-cli/issues/2874)) ([82b1fb7](https://github.com/webpack/webpack-cli/commit/82b1fb7441f04595ac90626235d506f29e5bb107)) +- show default value in help output if available ([#2814](https://github.com/webpack/webpack-cli/issues/2814)) ([7f50948](https://github.com/webpack/webpack-cli/commit/7f50948bb984821449277d6b5632b98a695eb029)) +- support top multi compiler options ([#2874](https://github.com/webpack/webpack-cli/issues/2874)) ([82b1fb7](https://github.com/webpack/webpack-cli/commit/82b1fb7441f04595ac90626235d506f29e5bb107)) ### Features -- show possible values for option in help output ([#2819](https://github.com/webpack/webpack-cli/issues/2819)) ([828e5c9](https://github.com/webpack/webpack-cli/commit/828e5c923719982dfc828f9935f65384d6ede2d1)) -- **init-generator:** add ability to specify a package manager of choice ([#2769](https://github.com/webpack/webpack-cli/issues/2769)) ([e53f164](https://github.com/webpack/webpack-cli/commit/e53f1645c729c3bbcb27ffd41c999ed321f86f9d)) +- show possible values for option in help output ([#2819](https://github.com/webpack/webpack-cli/issues/2819)) ([828e5c9](https://github.com/webpack/webpack-cli/commit/828e5c923719982dfc828f9935f65384d6ede2d1)) +- **init-generator:** add ability to specify a package manager of choice ([#2769](https://github.com/webpack/webpack-cli/issues/2769)) ([e53f164](https://github.com/webpack/webpack-cli/commit/e53f1645c729c3bbcb27ffd41c999ed321f86f9d)) ## [4.7.2](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.7.1...webpack-cli@4.7.2) (2021-06-07) @@ -18,53 +18,53 @@ ### Bug Fixes -- not found module after ask installation ([#2761](https://github.com/webpack/webpack-cli/issues/2761)) ([557ad05](https://github.com/webpack/webpack-cli/commit/557ad05ae8168255b57698bdd2d98cbc7b53812d)) -- prettier config ([#2719](https://github.com/webpack/webpack-cli/issues/2719)) ([181295f](https://github.com/webpack/webpack-cli/commit/181295fb1b1973c201c221813562219d85b845ae)) +- not found module after ask installation ([#2761](https://github.com/webpack/webpack-cli/issues/2761)) ([557ad05](https://github.com/webpack/webpack-cli/commit/557ad05ae8168255b57698bdd2d98cbc7b53812d)) +- prettier config ([#2719](https://github.com/webpack/webpack-cli/issues/2719)) ([181295f](https://github.com/webpack/webpack-cli/commit/181295fb1b1973c201c221813562219d85b845ae)) # [4.7.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.6.0...webpack-cli@4.7.0) (2021-05-06) ### Bug Fixes -- parsing of empty `--env` flags ([#2643](https://github.com/webpack/webpack-cli/issues/2643)) ([bc12f1a](https://github.com/webpack/webpack-cli/commit/bc12f1a2a833f09a0585050a0f5dd854da188f1d)) -- update usage info ([#2594](https://github.com/webpack/webpack-cli/issues/2594)) ([9d07d67](https://github.com/webpack/webpack-cli/commit/9d07d67faf147cbaf0dddb95038403963e5f2afb)) +- parsing of empty `--env` flags ([#2643](https://github.com/webpack/webpack-cli/issues/2643)) ([bc12f1a](https://github.com/webpack/webpack-cli/commit/bc12f1a2a833f09a0585050a0f5dd854da188f1d)) +- update usage info ([#2594](https://github.com/webpack/webpack-cli/issues/2594)) ([9d07d67](https://github.com/webpack/webpack-cli/commit/9d07d67faf147cbaf0dddb95038403963e5f2afb)) ### Features -- add `create` and `new` alias for `init` ([#2616](https://github.com/webpack/webpack-cli/issues/2616)) ([5a9789d](https://github.com/webpack/webpack-cli/commit/5a9789db237b7696adfdc9826b0dda749fedfa9a)) -- add `server` alias for `serve` command ([#2631](https://github.com/webpack/webpack-cli/issues/2631)) ([c9ee947](https://github.com/webpack/webpack-cli/commit/c9ee947618c06447bc1f949e4d401e63f737f38d)) -- add flag to force start finish log ([#2566](https://github.com/webpack/webpack-cli/issues/2566)) ([281aad3](https://github.com/webpack/webpack-cli/commit/281aad3ee4961f1643453eb1a926e88e0b7f019c)) -- added `--no-devtool` to webpack v4([#2603](https://github.com/webpack/webpack-cli/issues/2603)) ([7c6f390](https://github.com/webpack/webpack-cli/commit/7c6f390a1d64d562065ffc31d8b23d833813ee9d)) -- added support arguments description ([#2659](https://github.com/webpack/webpack-cli/issues/2659)) ([4dfd166](https://github.com/webpack/webpack-cli/commit/4dfd166f757ce94130bf9b7580f2dbe2868b8f4f)) +- add `create` and `new` alias for `init` ([#2616](https://github.com/webpack/webpack-cli/issues/2616)) ([5a9789d](https://github.com/webpack/webpack-cli/commit/5a9789db237b7696adfdc9826b0dda749fedfa9a)) +- add `server` alias for `serve` command ([#2631](https://github.com/webpack/webpack-cli/issues/2631)) ([c9ee947](https://github.com/webpack/webpack-cli/commit/c9ee947618c06447bc1f949e4d401e63f737f38d)) +- add flag to force start finish log ([#2566](https://github.com/webpack/webpack-cli/issues/2566)) ([281aad3](https://github.com/webpack/webpack-cli/commit/281aad3ee4961f1643453eb1a926e88e0b7f019c)) +- added `--no-devtool` to webpack v4([#2603](https://github.com/webpack/webpack-cli/issues/2603)) ([7c6f390](https://github.com/webpack/webpack-cli/commit/7c6f390a1d64d562065ffc31d8b23d833813ee9d)) +- added support arguments description ([#2659](https://github.com/webpack/webpack-cli/issues/2659)) ([4dfd166](https://github.com/webpack/webpack-cli/commit/4dfd166f757ce94130bf9b7580f2dbe2868b8f4f)) # [4.6.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.5.0...webpack-cli@4.6.0) (2021-03-27) ### Bug Fixes -- `negative` options ([#2555](https://github.com/webpack/webpack-cli/issues/2555)) ([f26ebc1](https://github.com/webpack/webpack-cli/commit/f26ebc105e140992639864fa01950454abd716ac)) -- improve error message for help ([#2482](https://github.com/webpack/webpack-cli/issues/2482)) ([99ae2a3](https://github.com/webpack/webpack-cli/commit/99ae2a3b9f7ad8c1807839357360a1b4607865b1)) -- show `--node-env` in minimum help output ([#2411](https://github.com/webpack/webpack-cli/issues/2411)) ([f5fc302](https://github.com/webpack/webpack-cli/commit/f5fc3023121f4d952a166879a46b2653c20b6349)) +- `negative` options ([#2555](https://github.com/webpack/webpack-cli/issues/2555)) ([f26ebc1](https://github.com/webpack/webpack-cli/commit/f26ebc105e140992639864fa01950454abd716ac)) +- improve error message for help ([#2482](https://github.com/webpack/webpack-cli/issues/2482)) ([99ae2a3](https://github.com/webpack/webpack-cli/commit/99ae2a3b9f7ad8c1807839357360a1b4607865b1)) +- show `--node-env` in minimum help output ([#2411](https://github.com/webpack/webpack-cli/issues/2411)) ([f5fc302](https://github.com/webpack/webpack-cli/commit/f5fc3023121f4d952a166879a46b2653c20b6349)) ### Features -- added `WEBPACK_PACKAGE` env var to use custom `webpack` package ([#2556](https://github.com/webpack/webpack-cli/issues/2556)) ([3d1e485](https://github.com/webpack/webpack-cli/commit/3d1e4855c55a6601d8a89dcb50d9d842009e3cda)) -- added `WEBPACK_CLI_SKIP_IMPORT_LOCAL` env var to skip local import ([#2546](https://github.com/webpack/webpack-cli/issues/2546)) ([e130822](https://github.com/webpack/webpack-cli/commit/e13082221c2da01d8b8215ebc936474bf3ca1582)) -- allow string value for the `--hot` option ([#2444](https://github.com/webpack/webpack-cli/issues/2444)) ([8656e78](https://github.com/webpack/webpack-cli/commit/8656e78d788bc8a504258d4dcc609767f63d60c4)) -- display used config path when logging level=log ([#2431](https://github.com/webpack/webpack-cli/issues/2431)) ([f8406e1](https://github.com/webpack/webpack-cli/commit/f8406e1c5253849fad741eb45f1ece23a7c603f4)) +- added `WEBPACK_PACKAGE` env var to use custom `webpack` package ([#2556](https://github.com/webpack/webpack-cli/issues/2556)) ([3d1e485](https://github.com/webpack/webpack-cli/commit/3d1e4855c55a6601d8a89dcb50d9d842009e3cda)) +- added `WEBPACK_CLI_SKIP_IMPORT_LOCAL` env var to skip local import ([#2546](https://github.com/webpack/webpack-cli/issues/2546)) ([e130822](https://github.com/webpack/webpack-cli/commit/e13082221c2da01d8b8215ebc936474bf3ca1582)) +- allow string value for the `--hot` option ([#2444](https://github.com/webpack/webpack-cli/issues/2444)) ([8656e78](https://github.com/webpack/webpack-cli/commit/8656e78d788bc8a504258d4dcc609767f63d60c4)) +- display used config path when logging level=log ([#2431](https://github.com/webpack/webpack-cli/issues/2431)) ([f8406e1](https://github.com/webpack/webpack-cli/commit/f8406e1c5253849fad741eb45f1ece23a7c603f4)) # [4.5.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.4.0...webpack-cli@4.5.0) (2021-02-02) ### Notes -- now you can use `webpack.config.mjs` and `webpack.config.js` with `{ "type": "module" }` in `package.json` -- you can avoid using the `cross-env` package: +- now you can use `webpack.config.mjs` and `webpack.config.js` with `{ "type": "module" }` in `package.json` +- you can avoid using the `cross-env` package: Before: ```json { - "scripts": { - "build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js" - } + "scripts": { + "build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js" + } } ``` @@ -72,143 +72,143 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ```json { - "scripts": { - "build": "webpack --node-env=production --config build/webpack.config.js" - } + "scripts": { + "build": "webpack --node-env=production --config build/webpack.config.js" + } } ``` -- the `mode` option respect the `--node-env` option if you don't set the `mode` option explicit using CLI options or in configuration(s), i.e. `--node-env production` set `process.env.NODE_ENV` and `mode` to `production` +- the `mode` option respect the `--node-env` option if you don't set the `mode` option explicit using CLI options or in configuration(s), i.e. `--node-env production` set `process.env.NODE_ENV` and `mode` to `production` ### Bug Fixes -- avoid deprecation message ([9d6dbda](https://github.com/webpack/webpack-cli/commit/9d6dbda93da167a1aaad03f599105a4fe7849dc3)) -- error message on invalid plugin options ([#2380](https://github.com/webpack/webpack-cli/issues/2380)) ([f9ce1d3](https://github.com/webpack/webpack-cli/commit/f9ce1d30b83bf0e0b4d91498d012c13c208e6e67)) -- improve description for 'configtest' command ([#2379](https://github.com/webpack/webpack-cli/issues/2379)) ([311bae3](https://github.com/webpack/webpack-cli/commit/311bae336d83424c800e553b6ef40242d967685c)) +- avoid deprecation message ([9d6dbda](https://github.com/webpack/webpack-cli/commit/9d6dbda93da167a1aaad03f599105a4fe7849dc3)) +- error message on invalid plugin options ([#2380](https://github.com/webpack/webpack-cli/issues/2380)) ([f9ce1d3](https://github.com/webpack/webpack-cli/commit/f9ce1d30b83bf0e0b4d91498d012c13c208e6e67)) +- improve description for 'configtest' command ([#2379](https://github.com/webpack/webpack-cli/issues/2379)) ([311bae3](https://github.com/webpack/webpack-cli/commit/311bae336d83424c800e553b6ef40242d967685c)) ### Features -- add the `--node-env` flag ([#2388](https://github.com/webpack/webpack-cli/issues/2388)) ([e5126f1](https://github.com/webpack/webpack-cli/commit/e5126f10b6622437c0541c25be2a610a82c1df04)) -- entries syntax ([#2369](https://github.com/webpack/webpack-cli/issues/2369)) ([6b31614](https://github.com/webpack/webpack-cli/commit/6b3161479578f572f803f579c7e71073eb797184)) -- support ES module configuration format ([#2381](https://github.com/webpack/webpack-cli/issues/2381)) ([aebdbbc](https://github.com/webpack/webpack-cli/commit/aebdbbc1f6e2761e7821cb3660bea686cce7b587)) +- add the `--node-env` flag ([#2388](https://github.com/webpack/webpack-cli/issues/2388)) ([e5126f1](https://github.com/webpack/webpack-cli/commit/e5126f10b6622437c0541c25be2a610a82c1df04)) +- entries syntax ([#2369](https://github.com/webpack/webpack-cli/issues/2369)) ([6b31614](https://github.com/webpack/webpack-cli/commit/6b3161479578f572f803f579c7e71073eb797184)) +- support ES module configuration format ([#2381](https://github.com/webpack/webpack-cli/issues/2381)) ([aebdbbc](https://github.com/webpack/webpack-cli/commit/aebdbbc1f6e2761e7821cb3660bea686cce7b587)) # [4.4.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.3.1...webpack-cli@4.4.0) (2021-01-19) ### Bug Fixes -- better description for `--no-watch-options-stdin` ([#2288](https://github.com/webpack/webpack-cli/issues/2288)) ([4ee8665](https://github.com/webpack/webpack-cli/commit/4ee8665e01e8dce16448e0a4d3dd2293731695ab)) -- double commands output in help ([#2298](https://github.com/webpack/webpack-cli/issues/2298)) ([efe81e9](https://github.com/webpack/webpack-cli/commit/efe81e986a6dca5cc9b72a5c9312dc21409f65b1)) -- pass all `argv` to configurations when `serve` command used ([#2345](https://github.com/webpack/webpack-cli/issues/2345)) ([5070b9b](https://github.com/webpack/webpack-cli/commit/5070b9bcbd5bdac00088d0c21486ad181a4df000)) -- respect `--stats`, `--color` and `--no-color` option for `serve` command ([#2312](https://github.com/webpack/webpack-cli/issues/2312)) ([73d3fec](https://github.com/webpack/webpack-cli/commit/73d3feced18b4e3708f958707326a6642a594cf2)) -- show exact package name while prompting for installation ([#2338](https://github.com/webpack/webpack-cli/issues/2338)) ([ffc93e5](https://github.com/webpack/webpack-cli/commit/ffc93e556d784e2d4409cb0d3a92d737850996f4)) -- webpack installation prompt message ([#2316](https://github.com/webpack/webpack-cli/issues/2316)) ([3659c5e](https://github.com/webpack/webpack-cli/commit/3659c5e529fe1319251ef1c713d6cc758f7f5353)) +- better description for `--no-watch-options-stdin` ([#2288](https://github.com/webpack/webpack-cli/issues/2288)) ([4ee8665](https://github.com/webpack/webpack-cli/commit/4ee8665e01e8dce16448e0a4d3dd2293731695ab)) +- double commands output in help ([#2298](https://github.com/webpack/webpack-cli/issues/2298)) ([efe81e9](https://github.com/webpack/webpack-cli/commit/efe81e986a6dca5cc9b72a5c9312dc21409f65b1)) +- pass all `argv` to configurations when `serve` command used ([#2345](https://github.com/webpack/webpack-cli/issues/2345)) ([5070b9b](https://github.com/webpack/webpack-cli/commit/5070b9bcbd5bdac00088d0c21486ad181a4df000)) +- respect `--stats`, `--color` and `--no-color` option for `serve` command ([#2312](https://github.com/webpack/webpack-cli/issues/2312)) ([73d3fec](https://github.com/webpack/webpack-cli/commit/73d3feced18b4e3708f958707326a6642a594cf2)) +- show exact package name while prompting for installation ([#2338](https://github.com/webpack/webpack-cli/issues/2338)) ([ffc93e5](https://github.com/webpack/webpack-cli/commit/ffc93e556d784e2d4409cb0d3a92d737850996f4)) +- webpack installation prompt message ([#2316](https://github.com/webpack/webpack-cli/issues/2316)) ([3659c5e](https://github.com/webpack/webpack-cli/commit/3659c5e529fe1319251ef1c713d6cc758f7f5353)) ### Features -- added the `configtest` command ([#2303](https://github.com/webpack/webpack-cli/issues/2303)) ([eb7b189](https://github.com/webpack/webpack-cli/commit/eb7b18937d045261a5b20ca8356e8b4ae4dfcaad)) -- added the `build` command (aliases - `bundle` and `b`) ([7590f66](https://github.com/webpack/webpack-cli/commit/7590f66663ce701d52d9276c3adf9dbdfd1a0fa4)) -- added the `watch` command ([#2357](https://github.com/webpack/webpack-cli/issues/2357)) ([9693f7d](https://github.com/webpack/webpack-cli/commit/9693f7d9543a8fce610c4ef903ccca0d12d229a1)) -- allow to pass parseOption to CLI class ([#2299](https://github.com/webpack/webpack-cli/issues/2299)) ([2af0801](https://github.com/webpack/webpack-cli/commit/2af08013852a95c6f6462c56a9994a4ee28c6ea1)) -- allow to use `help` command to show option information ([#2353](https://github.com/webpack/webpack-cli/issues/2353)) ([15eb411](https://github.com/webpack/webpack-cli/commit/15eb411237dcdcf0db7a501c103fe53f9b82903f)) -- show multiple suggestions on unknown options ([#2349](https://github.com/webpack/webpack-cli/issues/2349)) ([7314d6c](https://github.com/webpack/webpack-cli/commit/7314d6ca927473da2f355a7d356a943471488606)) +- added the `configtest` command ([#2303](https://github.com/webpack/webpack-cli/issues/2303)) ([eb7b189](https://github.com/webpack/webpack-cli/commit/eb7b18937d045261a5b20ca8356e8b4ae4dfcaad)) +- added the `build` command (aliases - `bundle` and `b`) ([7590f66](https://github.com/webpack/webpack-cli/commit/7590f66663ce701d52d9276c3adf9dbdfd1a0fa4)) +- added the `watch` command ([#2357](https://github.com/webpack/webpack-cli/issues/2357)) ([9693f7d](https://github.com/webpack/webpack-cli/commit/9693f7d9543a8fce610c4ef903ccca0d12d229a1)) +- allow to pass parseOption to CLI class ([#2299](https://github.com/webpack/webpack-cli/issues/2299)) ([2af0801](https://github.com/webpack/webpack-cli/commit/2af08013852a95c6f6462c56a9994a4ee28c6ea1)) +- allow to use `help` command to show option information ([#2353](https://github.com/webpack/webpack-cli/issues/2353)) ([15eb411](https://github.com/webpack/webpack-cli/commit/15eb411237dcdcf0db7a501c103fe53f9b82903f)) +- show multiple suggestions on unknown options ([#2349](https://github.com/webpack/webpack-cli/issues/2349)) ([7314d6c](https://github.com/webpack/webpack-cli/commit/7314d6ca927473da2f355a7d356a943471488606)) ## [4.3.1](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.3.0...webpack-cli@4.3.1) (2020-12-31) ### Bug Fixes -- error message on not installed module loaders for configuration ([#2282](https://github.com/webpack/webpack-cli/issues/2282)) ([29eaa8e](https://github.com/webpack/webpack-cli/commit/29eaa8e843510e020ac4b57a13622df40713fe27)) -- peer dependencies ([#2284](https://github.com/webpack/webpack-cli/issues/2284)) ([083f2a0](https://github.com/webpack/webpack-cli/commit/083f2a069d6dc0a3b9492eb3f205474ba843acfd)) -- provide useful error on unknown command ([d6380bb](https://github.com/webpack/webpack-cli/commit/d6380bb6c6756d2a00ac20f2ffc454481d97e4d3)) -- the `--help` option is working without `webpack-dev-server` ([#2267](https://github.com/webpack/webpack-cli/issues/2267)) ([1dae54d](https://github.com/webpack/webpack-cli/commit/1dae54da94d3220437b9257efe512447023de1d3)) -- the `--progress` option is working with `--json` ([#2276](https://github.com/webpack/webpack-cli/issues/2276)) ([0595603](https://github.com/webpack/webpack-cli/commit/05956030cbb1491a2e9313732470bcd4ebe5a36d)) +- error message on not installed module loaders for configuration ([#2282](https://github.com/webpack/webpack-cli/issues/2282)) ([29eaa8e](https://github.com/webpack/webpack-cli/commit/29eaa8e843510e020ac4b57a13622df40713fe27)) +- peer dependencies ([#2284](https://github.com/webpack/webpack-cli/issues/2284)) ([083f2a0](https://github.com/webpack/webpack-cli/commit/083f2a069d6dc0a3b9492eb3f205474ba843acfd)) +- provide useful error on unknown command ([d6380bb](https://github.com/webpack/webpack-cli/commit/d6380bb6c6756d2a00ac20f2ffc454481d97e4d3)) +- the `--help` option is working without `webpack-dev-server` ([#2267](https://github.com/webpack/webpack-cli/issues/2267)) ([1dae54d](https://github.com/webpack/webpack-cli/commit/1dae54da94d3220437b9257efe512447023de1d3)) +- the `--progress` option is working with `--json` ([#2276](https://github.com/webpack/webpack-cli/issues/2276)) ([0595603](https://github.com/webpack/webpack-cli/commit/05956030cbb1491a2e9313732470bcd4ebe5a36d)) # [4.3.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.2.0...webpack-cli@4.3.0) (2020-12-25) ### Bug Fixes -- fix problems with `--mode` and config resolution, there are situations when we resolve an invalid config file, the `--mode` option does not affect on config resolution, if you faced with an error after updating, please use the `--config` option -- correct usage of cli-flags ([#2205](https://github.com/webpack/webpack-cli/issues/2205)) ([c8fc7d1](https://github.com/webpack/webpack-cli/commit/c8fc7d1f195800c4fbe54ed6533e694f40fa7a1b)) -- defer setting default mode to core ([#2095](https://github.com/webpack/webpack-cli/issues/2095)) ([3eb410e](https://github.com/webpack/webpack-cli/commit/3eb410e5d8f8e2149910b65f4a028c85f8af5d28)) -- respect the `--watch-options-stdin` option ([2d1e001](https://github.com/webpack/webpack-cli/commit/2d1e001e7f4f560c2b36607bd1b29dfe2aa32066)) -- respect `--color`/`--no-color` option ([#2042](https://github.com/webpack/webpack-cli/issues/2042)) ([09bd812](https://github.com/webpack/webpack-cli/commit/09bd8126e95c9675b1f6862451f629cd4c439adb)) -- stringify stats using streaming approach ([#2190](https://github.com/webpack/webpack-cli/issues/2190)) ([9bf4e92](https://github.com/webpack/webpack-cli/commit/9bf4e925757b02f7252073501562c95e762dc59b)) -- use logger for error with proper exit code ([#2076](https://github.com/webpack/webpack-cli/issues/2076)) ([2c9069f](https://github.com/webpack/webpack-cli/commit/2c9069fd1f7c0fb70f019900e4b841c5ea33975e)) -- reduce spammy logs ([#2206](https://github.com/webpack/webpack-cli/issues/2206)) ([9b3cc28](https://github.com/webpack/webpack-cli/commit/9b3cc283d7b74aa3bb26fe36c6110436b016e0d9)) -- respect the `infrastructureLogging.level` option (logger uses `stderr`) ([#2144](https://github.com/webpack/webpack-cli/issues/2144)) ([7daccc7](https://github.com/webpack/webpack-cli/commit/7daccc786a0eb4eeae4c5b3632fc28240a696170)) -- respect all options from command line for the `server` command -- `help` and `version` output -- respect `stats` from the config (webpack@4) ([#2098](https://github.com/webpack/webpack-cli/issues/2098)) ([2d6e5c6](https://github.com/webpack/webpack-cli/commit/2d6e5c6f4ed967368a81742bf347e39f24ee16c8)) -- fixed colors work with multi compiler mode (webpack@4) +- fix problems with `--mode` and config resolution, there are situations when we resolve an invalid config file, the `--mode` option does not affect on config resolution, if you faced with an error after updating, please use the `--config` option +- correct usage of cli-flags ([#2205](https://github.com/webpack/webpack-cli/issues/2205)) ([c8fc7d1](https://github.com/webpack/webpack-cli/commit/c8fc7d1f195800c4fbe54ed6533e694f40fa7a1b)) +- defer setting default mode to core ([#2095](https://github.com/webpack/webpack-cli/issues/2095)) ([3eb410e](https://github.com/webpack/webpack-cli/commit/3eb410e5d8f8e2149910b65f4a028c85f8af5d28)) +- respect the `--watch-options-stdin` option ([2d1e001](https://github.com/webpack/webpack-cli/commit/2d1e001e7f4f560c2b36607bd1b29dfe2aa32066)) +- respect `--color`/`--no-color` option ([#2042](https://github.com/webpack/webpack-cli/issues/2042)) ([09bd812](https://github.com/webpack/webpack-cli/commit/09bd8126e95c9675b1f6862451f629cd4c439adb)) +- stringify stats using streaming approach ([#2190](https://github.com/webpack/webpack-cli/issues/2190)) ([9bf4e92](https://github.com/webpack/webpack-cli/commit/9bf4e925757b02f7252073501562c95e762dc59b)) +- use logger for error with proper exit code ([#2076](https://github.com/webpack/webpack-cli/issues/2076)) ([2c9069f](https://github.com/webpack/webpack-cli/commit/2c9069fd1f7c0fb70f019900e4b841c5ea33975e)) +- reduce spammy logs ([#2206](https://github.com/webpack/webpack-cli/issues/2206)) ([9b3cc28](https://github.com/webpack/webpack-cli/commit/9b3cc283d7b74aa3bb26fe36c6110436b016e0d9)) +- respect the `infrastructureLogging.level` option (logger uses `stderr`) ([#2144](https://github.com/webpack/webpack-cli/issues/2144)) ([7daccc7](https://github.com/webpack/webpack-cli/commit/7daccc786a0eb4eeae4c5b3632fc28240a696170)) +- respect all options from command line for the `server` command +- `help` and `version` output +- respect `stats` from the config (webpack@4) ([#2098](https://github.com/webpack/webpack-cli/issues/2098)) ([2d6e5c6](https://github.com/webpack/webpack-cli/commit/2d6e5c6f4ed967368a81742bf347e39f24ee16c8)) +- fixed colors work with multi compiler mode (webpack@4) ### Features -- add `bundle` command (alias for `webpack [options]`) -- add `pnpm` support for package installation ([#2040](https://github.com/webpack/webpack-cli/issues/2040)) ([46cba36](https://github.com/webpack/webpack-cli/commit/46cba367f06a6354fe98fcb15e7771e819feeac0)) +- add `bundle` command (alias for `webpack [options]`) +- add `pnpm` support for package installation ([#2040](https://github.com/webpack/webpack-cli/issues/2040)) ([46cba36](https://github.com/webpack/webpack-cli/commit/46cba367f06a6354fe98fcb15e7771e819feeac0)) # [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)) +- --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)) +- 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 -- avoid unnecessary stringify ([#1920](https://github.com/webpack/webpack-cli/issues/1920)) ([5ef1e7b](https://github.com/webpack/webpack-cli/commit/5ef1e7b074390406b76cb3e25dd90f045e1bd8a2)) -- colored output ([#1944](https://github.com/webpack/webpack-cli/issues/1944)) ([2bbbb14](https://github.com/webpack/webpack-cli/commit/2bbbb14ca9a404f2205c0f5a5515e73832ee6173)) -- move init command to separate package ([#1950](https://github.com/webpack/webpack-cli/issues/1950)) ([92ad475](https://github.com/webpack/webpack-cli/commit/92ad475d4b9606b5db7c31dd3666658301c95597)) -- output stacktrace on errors ([#1949](https://github.com/webpack/webpack-cli/issues/1949)) ([9ba9d6f](https://github.com/webpack/webpack-cli/commit/9ba9d6f460fb25fb79d52f4360239b8c4b471451)) -- run CLI after webpack installation ([#1951](https://github.com/webpack/webpack-cli/issues/1951)) ([564279e](https://github.com/webpack/webpack-cli/commit/564279e5b634a399647bcdb21449e5e6a7f0637e)) -- support any config name ([#1926](https://github.com/webpack/webpack-cli/issues/1926)) ([6f95b26](https://github.com/webpack/webpack-cli/commit/6f95b267bf6a3a3e71360f4de176a4ebbec3afa1)) -- support array of functions and promises ([#1946](https://github.com/webpack/webpack-cli/issues/1946)) ([2ace39b](https://github.com/webpack/webpack-cli/commit/2ace39b06117f558c0d8528cea9248253cbdf593)) -- watch mode and options ([#1931](https://github.com/webpack/webpack-cli/issues/1931)) ([258219a](https://github.com/webpack/webpack-cli/commit/258219a3bb606b228636e6373a3d20413c1f660e)) +- avoid unnecessary stringify ([#1920](https://github.com/webpack/webpack-cli/issues/1920)) ([5ef1e7b](https://github.com/webpack/webpack-cli/commit/5ef1e7b074390406b76cb3e25dd90f045e1bd8a2)) +- colored output ([#1944](https://github.com/webpack/webpack-cli/issues/1944)) ([2bbbb14](https://github.com/webpack/webpack-cli/commit/2bbbb14ca9a404f2205c0f5a5515e73832ee6173)) +- move init command to separate package ([#1950](https://github.com/webpack/webpack-cli/issues/1950)) ([92ad475](https://github.com/webpack/webpack-cli/commit/92ad475d4b9606b5db7c31dd3666658301c95597)) +- output stacktrace on errors ([#1949](https://github.com/webpack/webpack-cli/issues/1949)) ([9ba9d6f](https://github.com/webpack/webpack-cli/commit/9ba9d6f460fb25fb79d52f4360239b8c4b471451)) +- run CLI after webpack installation ([#1951](https://github.com/webpack/webpack-cli/issues/1951)) ([564279e](https://github.com/webpack/webpack-cli/commit/564279e5b634a399647bcdb21449e5e6a7f0637e)) +- support any config name ([#1926](https://github.com/webpack/webpack-cli/issues/1926)) ([6f95b26](https://github.com/webpack/webpack-cli/commit/6f95b267bf6a3a3e71360f4de176a4ebbec3afa1)) +- support array of functions and promises ([#1946](https://github.com/webpack/webpack-cli/issues/1946)) ([2ace39b](https://github.com/webpack/webpack-cli/commit/2ace39b06117f558c0d8528cea9248253cbdf593)) +- watch mode and options ([#1931](https://github.com/webpack/webpack-cli/issues/1931)) ([258219a](https://github.com/webpack/webpack-cli/commit/258219a3bb606b228636e6373a3d20413c1f660e)) ### Features -- allow passing strings in env flag ([#1939](https://github.com/webpack/webpack-cli/issues/1939)) ([cc081a2](https://github.com/webpack/webpack-cli/commit/cc081a256181e34137a89d2e9d37b04280b3f180)) +- allow passing strings in env flag ([#1939](https://github.com/webpack/webpack-cli/issues/1939)) ([cc081a2](https://github.com/webpack/webpack-cli/commit/cc081a256181e34137a89d2e9d37b04280b3f180)) # [4.0.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.0.0-rc.1...webpack-cli@4.0.0) (2020-10-10) ### Bug Fixes -- add compilation lifecycle in watch instance ([#1903](https://github.com/webpack/webpack-cli/issues/1903)) ([02b6d21](https://github.com/webpack/webpack-cli/commit/02b6d21eaa20166a7ed37816de716b8fc22b756a)) -- cleanup `package-utils` package ([#1822](https://github.com/webpack/webpack-cli/issues/1822)) ([fd5b92b](https://github.com/webpack/webpack-cli/commit/fd5b92b3cd40361daec5bf4486e455a41f4c9738)) -- cli-executer supplies args further up ([#1904](https://github.com/webpack/webpack-cli/issues/1904)) ([097564a](https://github.com/webpack/webpack-cli/commit/097564a851b36b63e0a6bf88144997ef65aa057a)) -- exit code for validation errors ([59f6303](https://github.com/webpack/webpack-cli/commit/59f63037fcbdbb8934b578b9adf5725bc4ae1235)) -- exit process in case of schema errors ([71e89b4](https://github.com/webpack/webpack-cli/commit/71e89b4092d953ea587cc4f606451ab78cbcdb93)) +- add compilation lifecycle in watch instance ([#1903](https://github.com/webpack/webpack-cli/issues/1903)) ([02b6d21](https://github.com/webpack/webpack-cli/commit/02b6d21eaa20166a7ed37816de716b8fc22b756a)) +- cleanup `package-utils` package ([#1822](https://github.com/webpack/webpack-cli/issues/1822)) ([fd5b92b](https://github.com/webpack/webpack-cli/commit/fd5b92b3cd40361daec5bf4486e455a41f4c9738)) +- cli-executer supplies args further up ([#1904](https://github.com/webpack/webpack-cli/issues/1904)) ([097564a](https://github.com/webpack/webpack-cli/commit/097564a851b36b63e0a6bf88144997ef65aa057a)) +- exit code for validation errors ([59f6303](https://github.com/webpack/webpack-cli/commit/59f63037fcbdbb8934b578b9adf5725bc4ae1235)) +- exit process in case of schema errors ([71e89b4](https://github.com/webpack/webpack-cli/commit/71e89b4092d953ea587cc4f606451ab78cbcdb93)) ### Features -- assign config paths in build dependencies in cache config ([#1900](https://github.com/webpack/webpack-cli/issues/1900)) ([7e90f11](https://github.com/webpack/webpack-cli/commit/7e90f110b119f36ef9def4f66cf4e17ccf1438cd)) +- assign config paths in build dependencies in cache config ([#1900](https://github.com/webpack/webpack-cli/issues/1900)) ([7e90f11](https://github.com/webpack/webpack-cli/commit/7e90f110b119f36ef9def4f66cf4e17ccf1438cd)) # [4.0.0-rc.1](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.0.0-beta.8...webpack-cli@4.0.0-rc.1) (2020-10-06) ### Bug Fixes -- cache issue ([#1862](https://github.com/webpack/webpack-cli/issues/1862)) ([305c188](https://github.com/webpack/webpack-cli/commit/305c18816ca6c4275c2755ae6b48d90a8cc85bd1)) -- check webpack installation before running cli ([#1827](https://github.com/webpack/webpack-cli/issues/1827)) ([be509fa](https://github.com/webpack/webpack-cli/commit/be509fac9a03e202e062229484bb10af7876968f)) -- defer setting default entry to core ([#1856](https://github.com/webpack/webpack-cli/issues/1856)) ([5da1f81](https://github.com/webpack/webpack-cli/commit/5da1f81ed101b024249c5cd4e043ec1397338782)) -- log error if --config-name is used without multiple configs ([#1874](https://github.com/webpack/webpack-cli/issues/1874)) ([f653409](https://github.com/webpack/webpack-cli/commit/f653409e3468849970dab354f84c5213da01122d)) -- mode behaviour ([#1824](https://github.com/webpack/webpack-cli/issues/1824)) ([9e9c70b](https://github.com/webpack/webpack-cli/commit/9e9c70bc1f30d90cebd91341e865abb46f9c269e)) -- only set output path on passing flag ([#1855](https://github.com/webpack/webpack-cli/issues/1855)) ([2f36b9d](https://github.com/webpack/webpack-cli/commit/2f36b9d858faedaf3a6adca10a529d9837c0dd24)) -- show warning if bail and watch are used together ([#1804](https://github.com/webpack/webpack-cli/issues/1804)) ([6140b24](https://github.com/webpack/webpack-cli/commit/6140b24d08990aa807070f105d46a92e18855c9e)) -- warning should not result in non-zero exit code ([#1872](https://github.com/webpack/webpack-cli/issues/1872)) ([ae9539d](https://github.com/webpack/webpack-cli/commit/ae9539d20eab2172118f61f7a9ba7e26541e16a2)) +- cache issue ([#1862](https://github.com/webpack/webpack-cli/issues/1862)) ([305c188](https://github.com/webpack/webpack-cli/commit/305c18816ca6c4275c2755ae6b48d90a8cc85bd1)) +- check webpack installation before running cli ([#1827](https://github.com/webpack/webpack-cli/issues/1827)) ([be509fa](https://github.com/webpack/webpack-cli/commit/be509fac9a03e202e062229484bb10af7876968f)) +- defer setting default entry to core ([#1856](https://github.com/webpack/webpack-cli/issues/1856)) ([5da1f81](https://github.com/webpack/webpack-cli/commit/5da1f81ed101b024249c5cd4e043ec1397338782)) +- log error if --config-name is used without multiple configs ([#1874](https://github.com/webpack/webpack-cli/issues/1874)) ([f653409](https://github.com/webpack/webpack-cli/commit/f653409e3468849970dab354f84c5213da01122d)) +- mode behaviour ([#1824](https://github.com/webpack/webpack-cli/issues/1824)) ([9e9c70b](https://github.com/webpack/webpack-cli/commit/9e9c70bc1f30d90cebd91341e865abb46f9c269e)) +- only set output path on passing flag ([#1855](https://github.com/webpack/webpack-cli/issues/1855)) ([2f36b9d](https://github.com/webpack/webpack-cli/commit/2f36b9d858faedaf3a6adca10a529d9837c0dd24)) +- show warning if bail and watch are used together ([#1804](https://github.com/webpack/webpack-cli/issues/1804)) ([6140b24](https://github.com/webpack/webpack-cli/commit/6140b24d08990aa807070f105d46a92e18855c9e)) +- warning should not result in non-zero exit code ([#1872](https://github.com/webpack/webpack-cli/issues/1872)) ([ae9539d](https://github.com/webpack/webpack-cli/commit/ae9539d20eab2172118f61f7a9ba7e26541e16a2)) ### Features -- add --analyze flag ([#1853](https://github.com/webpack/webpack-cli/issues/1853)) ([e6d210a](https://github.com/webpack/webpack-cli/commit/e6d210a66b899023b1f39bb33cce7a9b83a5b803)) -- allow users to store stats as json to a file ([#1835](https://github.com/webpack/webpack-cli/issues/1835)) ([3907517](https://github.com/webpack/webpack-cli/commit/3907517b6afff46ddab51e32ada0357fc9763117)) +- add --analyze flag ([#1853](https://github.com/webpack/webpack-cli/issues/1853)) ([e6d210a](https://github.com/webpack/webpack-cli/commit/e6d210a66b899023b1f39bb33cce7a9b83a5b803)) +- allow users to store stats as json to a file ([#1835](https://github.com/webpack/webpack-cli/issues/1835)) ([3907517](https://github.com/webpack/webpack-cli/commit/3907517b6afff46ddab51e32ada0357fc9763117)) @@ -218,120 +218,120 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## New Features -- add aliases to all available commands ([#1644](https://github.com/webpack/webpack-cli/pull/1644)) -- generate changelog and copy old CHANGEFILE ([#1805](https://github.com/webpack/webpack-cli/pull/1805)) -- allow using cjs as default config ([#1775](https://github.com/webpack/webpack-cli/pull/1775)) -- add support for merging multiple configurations ([#1768](https://github.com/webpack/webpack-cli/pull/1768)) -- add support to spawn multiple compilers with different configs ([#1765](https://github.com/webpack/webpack-cli/pull/1765)) -- add name flag ([#1757](https://github.com/webpack/webpack-cli/pull/1757)) -- add --config-name flag ([#1753](https://github.com/webpack/webpack-cli/pull/1753)) -- serve integration ([#1712](https://github.com/webpack/webpack-cli/pull/1712)) -- add support for .cjs config ([#1727](https://github.com/webpack/webpack-cli/pull/1727)) -- support multiple env params ([#1715](https://github.com/webpack/webpack-cli/pull/1715)) -- add stats detailed option ([#1359](https://github.com/webpack/webpack-cli/pull/1359)) -- add flag to force config ([f61e7e0](https://github.com/webpack/webpack-cli/commit/f61e7e0)) -- support command aliases with webpack-cli version ([#1664](https://github.com/webpack/webpack-cli/pull/1664)) -- add support for none config in dotfolder ([#1637](https://github.com/webpack/webpack-cli/pull/1637)) -- validate user input ([#1610](https://github.com/webpack/webpack-cli/pull/1610)) -- parse Number flags ([#1652](https://github.com/webpack/webpack-cli/pull/1652)) -- allow multiple types for --stats ([ca2d593](https://github.com/webpack/webpack-cli/commit/ca2d593)) -- show up cli flag aliases with webpack help ([#1647](https://github.com/webpack/webpack-cli/pull/1647)) -- allow multiple targets ([#1799](https://github.com/webpack/webpack-cli/pull/1799)) -- 🎸 add support for env flag ([#1598](https://github.com/webpack/webpack-cli/pull/1598)) -- allow only specified negated flags ([#1613](https://github.com/webpack/webpack-cli/pull/1613)) -- add init to webpack-cli ([#1609](https://github.com/webpack/webpack-cli/pull/1609)) -- webpack-cli: webpack stats ([#1299](https://github.com/webpack/webpack-cli/pull/1299)) -- test case for passing in unknown flags ([#1214](https://github.com/webpack/webpack-cli/pull/1214)) -- webpack-cli: add mode argument validation ([#1290](https://github.com/webpack/webpack-cli/pull/1290)) -- webpack-cli: add --no-stats flag ([#1654](https://github.com/webpack/webpack-cli/pull/1654)) -- webpack-cli: --version for external packages ([#1421](https://github.com/webpack/webpack-cli/pull/1421)) -- webpack-cli: add alias for version ([#1405](https://github.com/webpack/webpack-cli/pull/1405)) -- webpack-cli: import flags from webpack core ([#1630](https://github.com/webpack/webpack-cli/pull/1630)) -- webpack-cli: allow multiple entry files ([#1619](https://github.com/webpack/webpack-cli/pull/1619)) -- webpack-cli: allow negative property for cli-flags ([#1668](https://github.com/webpack/webpack-cli/pull/1668)) -- webpack-cli: add no-mode flag ([#1276](https://github.com/webpack/webpack-cli/pull/1276)) -- webpack-cli: create a cli executer ([#1255](https://github.com/webpack/webpack-cli/pull/1255)) -- webpack-cli: added mode argument ([#1253](https://github.com/webpack/webpack-cli/pull/1253)) -- webpack-cli: add progress bar for progress flag ([#1238](https://github.com/webpack/webpack-cli/pull/1238)) -- webpack-cli: add --no-hot flag ([#1591](https://github.com/webpack/webpack-cli/pull/1591)) +- add aliases to all available commands ([#1644](https://github.com/webpack/webpack-cli/pull/1644)) +- generate changelog and copy old CHANGEFILE ([#1805](https://github.com/webpack/webpack-cli/pull/1805)) +- allow using cjs as default config ([#1775](https://github.com/webpack/webpack-cli/pull/1775)) +- add support for merging multiple configurations ([#1768](https://github.com/webpack/webpack-cli/pull/1768)) +- add support to spawn multiple compilers with different configs ([#1765](https://github.com/webpack/webpack-cli/pull/1765)) +- add name flag ([#1757](https://github.com/webpack/webpack-cli/pull/1757)) +- add --config-name flag ([#1753](https://github.com/webpack/webpack-cli/pull/1753)) +- serve integration ([#1712](https://github.com/webpack/webpack-cli/pull/1712)) +- add support for .cjs config ([#1727](https://github.com/webpack/webpack-cli/pull/1727)) +- support multiple env params ([#1715](https://github.com/webpack/webpack-cli/pull/1715)) +- add stats detailed option ([#1359](https://github.com/webpack/webpack-cli/pull/1359)) +- add flag to force config ([f61e7e0](https://github.com/webpack/webpack-cli/commit/f61e7e0)) +- support command aliases with webpack-cli version ([#1664](https://github.com/webpack/webpack-cli/pull/1664)) +- add support for none config in dotfolder ([#1637](https://github.com/webpack/webpack-cli/pull/1637)) +- validate user input ([#1610](https://github.com/webpack/webpack-cli/pull/1610)) +- parse Number flags ([#1652](https://github.com/webpack/webpack-cli/pull/1652)) +- allow multiple types for --stats ([ca2d593](https://github.com/webpack/webpack-cli/commit/ca2d593)) +- show up cli flag aliases with webpack help ([#1647](https://github.com/webpack/webpack-cli/pull/1647)) +- allow multiple targets ([#1799](https://github.com/webpack/webpack-cli/pull/1799)) +- 🎸 add support for env flag ([#1598](https://github.com/webpack/webpack-cli/pull/1598)) +- allow only specified negated flags ([#1613](https://github.com/webpack/webpack-cli/pull/1613)) +- add init to webpack-cli ([#1609](https://github.com/webpack/webpack-cli/pull/1609)) +- webpack-cli: webpack stats ([#1299](https://github.com/webpack/webpack-cli/pull/1299)) +- test case for passing in unknown flags ([#1214](https://github.com/webpack/webpack-cli/pull/1214)) +- webpack-cli: add mode argument validation ([#1290](https://github.com/webpack/webpack-cli/pull/1290)) +- webpack-cli: add --no-stats flag ([#1654](https://github.com/webpack/webpack-cli/pull/1654)) +- webpack-cli: --version for external packages ([#1421](https://github.com/webpack/webpack-cli/pull/1421)) +- webpack-cli: add alias for version ([#1405](https://github.com/webpack/webpack-cli/pull/1405)) +- webpack-cli: import flags from webpack core ([#1630](https://github.com/webpack/webpack-cli/pull/1630)) +- webpack-cli: allow multiple entry files ([#1619](https://github.com/webpack/webpack-cli/pull/1619)) +- webpack-cli: allow negative property for cli-flags ([#1668](https://github.com/webpack/webpack-cli/pull/1668)) +- webpack-cli: add no-mode flag ([#1276](https://github.com/webpack/webpack-cli/pull/1276)) +- webpack-cli: create a cli executer ([#1255](https://github.com/webpack/webpack-cli/pull/1255)) +- webpack-cli: added mode argument ([#1253](https://github.com/webpack/webpack-cli/pull/1253)) +- webpack-cli: add progress bar for progress flag ([#1238](https://github.com/webpack/webpack-cli/pull/1238)) +- webpack-cli: add --no-hot flag ([#1591](https://github.com/webpack/webpack-cli/pull/1591)) ## Fix -- webpack-cli: verbose flag functionality ([#1549](https://github.com/webpack/webpack-cli/pull/1549)) -- ci for webpack@beta.30 ([#1801](https://github.com/webpack/webpack-cli/pull/1801)) -- use compiler.apply for Progress Plugin ([#1772](https://github.com/webpack/webpack-cli/pull/1772)) -- remove yes ([279c43f](https://github.com/webpack/webpack-cli/commit/279c43f)) -- throw err when supplied config is absent ([#1760](https://github.com/webpack/webpack-cli/pull/1760)) -- allow unknown files to use default require as fallback ([#1747](https://github.com/webpack/webpack-cli/pull/1747)) -- use appropriate exit codes ([#1755](https://github.com/webpack/webpack-cli/pull/1755)) -- peer dependencies for `webpack serve` ([#1317](https://github.com/webpack/webpack-cli/pull/1317)) -- yarn.lock conflicts on setup ([#1367](https://github.com/webpack/webpack-cli/pull/1367)) -- conditionally install terser-webpack-plugin for webpack@next ([#1732](https://github.com/webpack/webpack-cli/pull/1732)) -- generated loader template ([#1720](https://github.com/webpack/webpack-cli/pull/1720)) -- supply argv to config with functions ([#1721](https://github.com/webpack/webpack-cli/pull/1721)) -- rename sourcemap flag to devtool ([#1723](https://github.com/webpack/webpack-cli/pull/1723)) -- generated plugin template ([#1717](https://github.com/webpack/webpack-cli/pull/1717)) -- warn about merge config resolution cases ([#1674](https://github.com/webpack/webpack-cli/pull/1674)) -- use fileTypes from interpret ([#1690](https://github.com/webpack/webpack-cli/pull/1690)) -- set mode=production by default ([#1688](https://github.com/webpack/webpack-cli/pull/1688)) -- promise support in config ([#1666](https://github.com/webpack/webpack-cli/pull/1666)) -- show version information for plugin and loader ([#1661](https://github.com/webpack/webpack-cli/pull/1661)) -- prevent info from running unnecessarily ([#1650](https://github.com/webpack/webpack-cli/pull/1650)) -- json flag, enable tests ([#1460](https://github.com/webpack/webpack-cli/pull/1460)) -- consistent webpack plugin name ([#1480](https://github.com/webpack/webpack-cli/pull/1480)) -- typo in Compiler.js ([#1580](https://github.com/webpack/webpack-cli/pull/1580)) -- 🐛 do not apply own defaults while setting mode ([#1565](https://github.com/webpack/webpack-cli/pull/1565)) -- compatibility with webpack@next ([#1779](https://github.com/webpack/webpack-cli/pull/1779)) -- throw error for invalid args ([#1462](https://github.com/webpack/webpack-cli/pull/1462)) -- regression with migrate command ([7ebcbb8](https://github.com/webpack/webpack-cli/commit/7ebcbb8)) -- generators: fix generators init loader's test regex ([#1309](https://github.com/webpack/webpack-cli/pull/1309)) -- release beta ([f1f05d8](https://github.com/webpack/webpack-cli/commit/f1f05d8)) -- cli: fix file resolution inside group helper ([#1221](https://github.com/webpack/webpack-cli/pull/1221)) -- generators: fix and refactor entry util, add tests ([#1392](https://github.com/webpack/webpack-cli/pull/1392)) -- generators: fix small issues with generators ([#1385](https://github.com/webpack/webpack-cli/pull/1385)) -- info: throw an error if help or version is passed as an arg ([#1737](https://github.com/webpack/webpack-cli/pull/1737)) -- init: fix the invalid package name ([#1228](https://github.com/webpack/webpack-cli/pull/1228)) -- init: fix webpack config scaffold ([#1231](https://github.com/webpack/webpack-cli/pull/1231)) -- packages: make packages have correct main paths to index ([#1366](https://github.com/webpack/webpack-cli/pull/1366)) -- serve: merge CLI and devServer options correctly ([#1649](https://github.com/webpack/webpack-cli/pull/1649)) -- serve: supplying help or version as an arg should throw error ([#1694](https://github.com/webpack/webpack-cli/pull/1694)) -- utils: respect package-lock.json ([#1375](https://github.com/webpack/webpack-cli/pull/1375)) -- webpack-cli: to void defaultEntry override the webpack config entry ([#1289](https://github.com/webpack/webpack-cli/pull/1289)) -- webpack-cli: add configuration for mode option none ([#1303](https://github.com/webpack/webpack-cli/pull/1303)) -- webpack-cli: handle promise rejection with package installation ([#1284](https://github.com/webpack/webpack-cli/pull/1284)) -- webpack-cli: correct cli-flags usage ([#1441](https://github.com/webpack/webpack-cli/pull/1441)) -- webpack-cli: fixed support for SCSS entry points ([#1271](https://github.com/webpack/webpack-cli/pull/1271)) -- webpack-cli: handle promise rejection happening with cli-executor ([#1269](https://github.com/webpack/webpack-cli/pull/1269)) -- webpack-cli: prefer import local ([#1345](https://github.com/webpack/webpack-cli/pull/1345)) -- webpack-cli: remove invalid stats warning with json flag ([#1587](https://github.com/webpack/webpack-cli/pull/1587)) -- webpack-cli: add value none in mode usage ([#1411](https://github.com/webpack/webpack-cli/pull/1411)) -- webpack-cli: prefetch flag implementation ([#1583](https://github.com/webpack/webpack-cli/pull/1583)) +- webpack-cli: verbose flag functionality ([#1549](https://github.com/webpack/webpack-cli/pull/1549)) +- ci for webpack@beta.30 ([#1801](https://github.com/webpack/webpack-cli/pull/1801)) +- use compiler.apply for Progress Plugin ([#1772](https://github.com/webpack/webpack-cli/pull/1772)) +- remove yes ([279c43f](https://github.com/webpack/webpack-cli/commit/279c43f)) +- throw err when supplied config is absent ([#1760](https://github.com/webpack/webpack-cli/pull/1760)) +- allow unknown files to use default require as fallback ([#1747](https://github.com/webpack/webpack-cli/pull/1747)) +- use appropriate exit codes ([#1755](https://github.com/webpack/webpack-cli/pull/1755)) +- peer dependencies for `webpack serve` ([#1317](https://github.com/webpack/webpack-cli/pull/1317)) +- yarn.lock conflicts on setup ([#1367](https://github.com/webpack/webpack-cli/pull/1367)) +- conditionally install terser-webpack-plugin for webpack@next ([#1732](https://github.com/webpack/webpack-cli/pull/1732)) +- generated loader template ([#1720](https://github.com/webpack/webpack-cli/pull/1720)) +- supply argv to config with functions ([#1721](https://github.com/webpack/webpack-cli/pull/1721)) +- rename sourcemap flag to devtool ([#1723](https://github.com/webpack/webpack-cli/pull/1723)) +- generated plugin template ([#1717](https://github.com/webpack/webpack-cli/pull/1717)) +- warn about merge config resolution cases ([#1674](https://github.com/webpack/webpack-cli/pull/1674)) +- use fileTypes from interpret ([#1690](https://github.com/webpack/webpack-cli/pull/1690)) +- set mode=production by default ([#1688](https://github.com/webpack/webpack-cli/pull/1688)) +- promise support in config ([#1666](https://github.com/webpack/webpack-cli/pull/1666)) +- show version information for plugin and loader ([#1661](https://github.com/webpack/webpack-cli/pull/1661)) +- prevent info from running unnecessarily ([#1650](https://github.com/webpack/webpack-cli/pull/1650)) +- json flag, enable tests ([#1460](https://github.com/webpack/webpack-cli/pull/1460)) +- consistent webpack plugin name ([#1480](https://github.com/webpack/webpack-cli/pull/1480)) +- typo in Compiler.js ([#1580](https://github.com/webpack/webpack-cli/pull/1580)) +- 🐛 do not apply own defaults while setting mode ([#1565](https://github.com/webpack/webpack-cli/pull/1565)) +- compatibility with webpack@next ([#1779](https://github.com/webpack/webpack-cli/pull/1779)) +- throw error for invalid args ([#1462](https://github.com/webpack/webpack-cli/pull/1462)) +- regression with migrate command ([7ebcbb8](https://github.com/webpack/webpack-cli/commit/7ebcbb8)) +- generators: fix generators init loader's test regex ([#1309](https://github.com/webpack/webpack-cli/pull/1309)) +- release beta ([f1f05d8](https://github.com/webpack/webpack-cli/commit/f1f05d8)) +- cli: fix file resolution inside group helper ([#1221](https://github.com/webpack/webpack-cli/pull/1221)) +- generators: fix and refactor entry util, add tests ([#1392](https://github.com/webpack/webpack-cli/pull/1392)) +- generators: fix small issues with generators ([#1385](https://github.com/webpack/webpack-cli/pull/1385)) +- info: throw an error if help or version is passed as an arg ([#1737](https://github.com/webpack/webpack-cli/pull/1737)) +- init: fix the invalid package name ([#1228](https://github.com/webpack/webpack-cli/pull/1228)) +- init: fix webpack config scaffold ([#1231](https://github.com/webpack/webpack-cli/pull/1231)) +- packages: make packages have correct main paths to index ([#1366](https://github.com/webpack/webpack-cli/pull/1366)) +- serve: merge CLI and devServer options correctly ([#1649](https://github.com/webpack/webpack-cli/pull/1649)) +- serve: supplying help or version as an arg should throw error ([#1694](https://github.com/webpack/webpack-cli/pull/1694)) +- utils: respect package-lock.json ([#1375](https://github.com/webpack/webpack-cli/pull/1375)) +- webpack-cli: to void defaultEntry override the webpack config entry ([#1289](https://github.com/webpack/webpack-cli/pull/1289)) +- webpack-cli: add configuration for mode option none ([#1303](https://github.com/webpack/webpack-cli/pull/1303)) +- webpack-cli: handle promise rejection with package installation ([#1284](https://github.com/webpack/webpack-cli/pull/1284)) +- webpack-cli: correct cli-flags usage ([#1441](https://github.com/webpack/webpack-cli/pull/1441)) +- webpack-cli: fixed support for SCSS entry points ([#1271](https://github.com/webpack/webpack-cli/pull/1271)) +- webpack-cli: handle promise rejection happening with cli-executor ([#1269](https://github.com/webpack/webpack-cli/pull/1269)) +- webpack-cli: prefer import local ([#1345](https://github.com/webpack/webpack-cli/pull/1345)) +- webpack-cli: remove invalid stats warning with json flag ([#1587](https://github.com/webpack/webpack-cli/pull/1587)) +- webpack-cli: add value none in mode usage ([#1411](https://github.com/webpack/webpack-cli/pull/1411)) +- webpack-cli: prefetch flag implementation ([#1583](https://github.com/webpack/webpack-cli/pull/1583)) ## Perf -- do not spawn new process for running webpack ([#1741](https://github.com/webpack/webpack-cli/pull/1741)) +- do not spawn new process for running webpack ([#1741](https://github.com/webpack/webpack-cli/pull/1741)) ## Refactor -- remove --dev and --prod flags and their aliases -d and -p ([#1693](https://github.com/webpack/webpack-cli/pull/1693)) -- remove duplicate invocation ([#1790](https://github.com/webpack/webpack-cli/pull/1790)) -- cliExecuter consumes runCLI ([#1754](https://github.com/webpack/webpack-cli/pull/1754)) -- remove --mode flag validation ([#1744](https://github.com/webpack/webpack-cli/pull/1744)) -- use console for logging ([#1740](https://github.com/webpack/webpack-cli/pull/1740)) -- use logger ([#1748](https://github.com/webpack/webpack-cli/pull/1748)) -- remove stale code ([#1670](https://github.com/webpack/webpack-cli/pull/1670)) -- remove plugin flag ([#1571](https://github.com/webpack/webpack-cli/pull/1571)) -- 💡 remove defaults flag ([#1543](https://github.com/webpack/webpack-cli/pull/1543)) -- refactor info package ([#1382](https://github.com/webpack/webpack-cli/pull/1382)) -- webpack-cli: remove --no-mode flag ([#1503](https://github.com/webpack/webpack-cli/pull/1503)) +- remove --dev and --prod flags and their aliases -d and -p ([#1693](https://github.com/webpack/webpack-cli/pull/1693)) +- remove duplicate invocation ([#1790](https://github.com/webpack/webpack-cli/pull/1790)) +- cliExecuter consumes runCLI ([#1754](https://github.com/webpack/webpack-cli/pull/1754)) +- remove --mode flag validation ([#1744](https://github.com/webpack/webpack-cli/pull/1744)) +- use console for logging ([#1740](https://github.com/webpack/webpack-cli/pull/1740)) +- use logger ([#1748](https://github.com/webpack/webpack-cli/pull/1748)) +- remove stale code ([#1670](https://github.com/webpack/webpack-cli/pull/1670)) +- remove plugin flag ([#1571](https://github.com/webpack/webpack-cli/pull/1571)) +- 💡 remove defaults flag ([#1543](https://github.com/webpack/webpack-cli/pull/1543)) +- refactor info package ([#1382](https://github.com/webpack/webpack-cli/pull/1382)) +- webpack-cli: remove --no-mode flag ([#1503](https://github.com/webpack/webpack-cli/pull/1503)) ## Misc -- feat[utils]: opt to use config schema from core ([#1655](https://github.com/webpack/webpack-cli/pull/1655)) -- migrate to commander ([#1481](https://github.com/webpack/webpack-cli/pull/1481)) -- Fix loader-generator and plugin-generator tests ([#1250](https://github.com/webpack/webpack-cli/pull/1250)) -- Fixing the typos and grammatical errors in Readme files ([#1246](https://github.com/webpack/webpack-cli/pull/1246)) -- remove code: remove unused code ([#1800](https://github.com/webpack/webpack-cli/pull/1800)) +- feat[utils]: opt to use config schema from core ([#1655](https://github.com/webpack/webpack-cli/pull/1655)) +- migrate to commander ([#1481](https://github.com/webpack/webpack-cli/pull/1481)) +- Fix loader-generator and plugin-generator tests ([#1250](https://github.com/webpack/webpack-cli/pull/1250)) +- Fixing the typos and grammatical errors in Readme files ([#1246](https://github.com/webpack/webpack-cli/pull/1246)) +- remove code: remove unused code ([#1800](https://github.com/webpack/webpack-cli/pull/1800)) @@ -353,7 +353,7 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## New Features -- add new flag and patch sec dep ([#1102](https://github.com/webpack/webpack-cli/pull/1102)) +- add new flag and patch sec dep ([#1102](https://github.com/webpack/webpack-cli/pull/1102)) @@ -363,7 +363,7 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## Fix -- use process.exitCode instead of process.exit in compilerCallback ([ee001bd](https://github.com/webpack/webpack-cli/commit/ee001bd)) +- use process.exitCode instead of process.exit in compilerCallback ([ee001bd](https://github.com/webpack/webpack-cli/commit/ee001bd)) @@ -373,11 +373,11 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## Fix -- support both webpack versions ([d28f9f5](https://github.com/webpack/webpack-cli/commit/d28f9f5)) +- support both webpack versions ([d28f9f5](https://github.com/webpack/webpack-cli/commit/d28f9f5)) ## Tests -- add schema tests ([70bf934](https://github.com/webpack/webpack-cli/commit/70bf934)) +- add schema tests ([70bf934](https://github.com/webpack/webpack-cli/commit/70bf934)) @@ -387,7 +387,7 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## Fix -- resolve opts when no-config ([fb31cc4](https://github.com/webpack/webpack-cli/commit/fb31cc4)) +- resolve opts when no-config ([fb31cc4](https://github.com/webpack/webpack-cli/commit/fb31cc4)) @@ -397,13 +397,13 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## Docs -- remove deprecated packages description ([#979](https://github.com/webpack/webpack-cli/pull/979)) +- remove deprecated packages description ([#979](https://github.com/webpack/webpack-cli/pull/979)) ## Fix -- minor refactor ([a30a027](https://github.com/webpack/webpack-cli/commit/a30a027)) -- update comments ([7553ae7](https://github.com/webpack/webpack-cli/commit/7553ae7)) -- minor fix ([0d9aa9a](https://github.com/webpack/webpack-cli/commit/0d9aa9a)) +- minor refactor ([a30a027](https://github.com/webpack/webpack-cli/commit/a30a027)) +- update comments ([7553ae7](https://github.com/webpack/webpack-cli/commit/7553ae7)) +- minor fix ([0d9aa9a](https://github.com/webpack/webpack-cli/commit/0d9aa9a)) @@ -413,13 +413,13 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## CLI -- remove donation prompt ([a37477d](https://github.com/webpack/webpack-cli/commit/a37477d)) +- remove donation prompt ([a37477d](https://github.com/webpack/webpack-cli/commit/a37477d)) ## Fix -- deps: move prettier from dependencies to devDependencies ([#968](https://github.com/webpack/webpack-cli/pull/968)) -- change "usr strict" to "use strict" ([670efc7](https://github.com/webpack/webpack-cli/commit/670efc7)) -- update deps ([69f364e](https://github.com/webpack/webpack-cli/commit/69f364e)) +- deps: move prettier from dependencies to devDependencies ([#968](https://github.com/webpack/webpack-cli/pull/968)) +- change "usr strict" to "use strict" ([670efc7](https://github.com/webpack/webpack-cli/commit/670efc7)) +- update deps ([69f364e](https://github.com/webpack/webpack-cli/commit/69f364e)) @@ -429,26 +429,26 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## New Features -- add workbox + offline support ([589253e](https://github.com/webpack/webpack-cli/commit/589253e)) -- better defaults ([77bf564](https://github.com/webpack/webpack-cli/commit/77bf564)) +- add workbox + offline support ([589253e](https://github.com/webpack/webpack-cli/commit/589253e)) +- better defaults ([77bf564](https://github.com/webpack/webpack-cli/commit/77bf564)) ## Docs -- added auto flag in docs for init command ([dede7d8](https://github.com/webpack/webpack-cli/commit/dede7d8)) +- added auto flag in docs for init command ([dede7d8](https://github.com/webpack/webpack-cli/commit/dede7d8)) ## Fix -- module not found error ([a2062f2](https://github.com/webpack/webpack-cli/commit/a2062f2)) -- remove unused pkgs and refactor init generator ([7608d4b](https://github.com/webpack/webpack-cli/commit/7608d4b)) +- module not found error ([a2062f2](https://github.com/webpack/webpack-cli/commit/a2062f2)) +- remove unused pkgs and refactor init generator ([7608d4b](https://github.com/webpack/webpack-cli/commit/7608d4b)) ## Tests -- fix failing ones ([d154d0e](https://github.com/webpack/webpack-cli/commit/d154d0e)) +- fix failing ones ([d154d0e](https://github.com/webpack/webpack-cli/commit/d154d0e)) ## Misc -- finetune 0cjs ([bd2cd86](https://github.com/webpack/webpack-cli/commit/bd2cd86)) -- improve cjs ([60ecc02](https://github.com/webpack/webpack-cli/commit/60ecc02)) +- finetune 0cjs ([bd2cd86](https://github.com/webpack/webpack-cli/commit/bd2cd86)) +- improve cjs ([60ecc02](https://github.com/webpack/webpack-cli/commit/60ecc02)) @@ -458,78 +458,78 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## New Features -- chore: Added type definitions for the data returned by envinfo ([#921](https://github.com/webpack/webpack-cli/pull/921)) -- add htmlWebpackPlugin in development ([88fcfa8](https://github.com/webpack/webpack-cli/commit/88fcfa8)) -- add mergeHandler ([248b9cc](https://github.com/webpack/webpack-cli/commit/248b9cc)) -- generators: add generated file templates ([6be9291](https://github.com/webpack/webpack-cli/commit/6be9291)) -- init: generate README ([c090b17](https://github.com/webpack/webpack-cli/commit/c090b17)) -- init: generate tsconfig ([25ab7e6](https://github.com/webpack/webpack-cli/commit/25ab7e6)) -- init: support ts in configuration ([283e089](https://github.com/webpack/webpack-cli/commit/283e089)) -- init: wip typescript support ([093a36d](https://github.com/webpack/webpack-cli/commit/093a36d)) -- md: formats md before committing ([#851](https://github.com/webpack/webpack-cli/pull/851)) -- webpack-scaffold: adds Input defaults, doc & tests ([0a648f7](https://github.com/webpack/webpack-cli/commit/0a648f7)) +- chore: Added type definitions for the data returned by envinfo ([#921](https://github.com/webpack/webpack-cli/pull/921)) +- add htmlWebpackPlugin in development ([88fcfa8](https://github.com/webpack/webpack-cli/commit/88fcfa8)) +- add mergeHandler ([248b9cc](https://github.com/webpack/webpack-cli/commit/248b9cc)) +- generators: add generated file templates ([6be9291](https://github.com/webpack/webpack-cli/commit/6be9291)) +- init: generate README ([c090b17](https://github.com/webpack/webpack-cli/commit/c090b17)) +- init: generate tsconfig ([25ab7e6](https://github.com/webpack/webpack-cli/commit/25ab7e6)) +- init: support ts in configuration ([283e089](https://github.com/webpack/webpack-cli/commit/283e089)) +- init: wip typescript support ([093a36d](https://github.com/webpack/webpack-cli/commit/093a36d)) +- md: formats md before committing ([#851](https://github.com/webpack/webpack-cli/pull/851)) +- webpack-scaffold: adds Input defaults, doc & tests ([0a648f7](https://github.com/webpack/webpack-cli/commit/0a648f7)) ## CLI -- fix watch options for array config ([#892](https://github.com/webpack/webpack-cli/pull/892)) +- fix watch options for array config ([#892](https://github.com/webpack/webpack-cli/pull/892)) ## Docs -- contribute: adds section seperator ([cff0c55](https://github.com/webpack/webpack-cli/commit/cff0c55)) -- contribute: combines seperate sections for npm and yarn ([aefa8eb](https://github.com/webpack/webpack-cli/commit/aefa8eb)) -- contributing: updates the docs for the test ([7656637](https://github.com/webpack/webpack-cli/commit/7656637)) -- fix link to webpack-scaffold ([de0b4a0](https://github.com/webpack/webpack-cli/commit/de0b4a0)) -- init: improve description ([9856bab](https://github.com/webpack/webpack-cli/commit/9856bab)) -- utils: update prettier ([8b6d47b](https://github.com/webpack/webpack-cli/commit/8b6d47b)) +- contribute: adds section seperator ([cff0c55](https://github.com/webpack/webpack-cli/commit/cff0c55)) +- contribute: combines seperate sections for npm and yarn ([aefa8eb](https://github.com/webpack/webpack-cli/commit/aefa8eb)) +- contributing: updates the docs for the test ([7656637](https://github.com/webpack/webpack-cli/commit/7656637)) +- fix link to webpack-scaffold ([de0b4a0](https://github.com/webpack/webpack-cli/commit/de0b4a0)) +- init: improve description ([9856bab](https://github.com/webpack/webpack-cli/commit/9856bab)) +- utils: update prettier ([8b6d47b](https://github.com/webpack/webpack-cli/commit/8b6d47b)) ## Fix -- improve checking file permission ([de41351](https://github.com/webpack/webpack-cli/commit/de41351)) -- chore: Minor fix ([6810182](https://github.com/webpack/webpack-cli/commit/6810182)) -- use fork cause original repo is unmaintained ([383125a](https://github.com/webpack/webpack-cli/commit/383125a)) -- add: apply suggestions ([ccf0dce](https://github.com/webpack/webpack-cli/commit/ccf0dce)) -- add: add handling of merge option ([eb43443](https://github.com/webpack/webpack-cli/commit/eb43443)) -- add: add handling of merge option ([ce51a0a](https://github.com/webpack/webpack-cli/commit/ce51a0a)) -- ci: fixes linting error in ci ([cfc0117](https://github.com/webpack/webpack-cli/commit/cfc0117)) -- cli: updates err message ([b5e1913](https://github.com/webpack/webpack-cli/commit/b5e1913)) -- cli: removes the comment before err handling block ([ac5a53f](https://github.com/webpack/webpack-cli/commit/ac5a53f)) -- cli: --config-register resolves relative to root ([23375bd](https://github.com/webpack/webpack-cli/commit/23375bd)) -- cli: removes func return in catch instance ([7d31321](https://github.com/webpack/webpack-cli/commit/7d31321)) -- cli: sets stack trace limit ([869024f](https://github.com/webpack/webpack-cli/commit/869024f)) -- cli: err when no args passed, refactored nested conditional blocks ([a9bc0bd](https://github.com/webpack/webpack-cli/commit/a9bc0bd)) -- cli: shows error message based on package manager ([a3ce273](https://github.com/webpack/webpack-cli/commit/a3ce273)) -- cli: error when no webpack and args found ([2250af0](https://github.com/webpack/webpack-cli/commit/2250af0)) -- generator: fixed the support of native plugins in add command ([123a150](https://github.com/webpack/webpack-cli/commit/123a150)) -- infra: fixes npm run docs ([65c08e2](https://github.com/webpack/webpack-cli/commit/65c08e2)) -- formatting files ([eb3909b](https://github.com/webpack/webpack-cli/commit/eb3909b)) -- remove type from inherited type ([960e73a](https://github.com/webpack/webpack-cli/commit/960e73a)) -- remove type from inherited type ([0552f76](https://github.com/webpack/webpack-cli/commit/0552f76)) -- change parser options ([4e8bc76](https://github.com/webpack/webpack-cli/commit/4e8bc76)) -- json module resolve ([61697b8](https://github.com/webpack/webpack-cli/commit/61697b8)) -- cli: improves error handling with args ([cc64955](https://github.com/webpack/webpack-cli/commit/cc64955)) -- generator: generate correct module.rule for babel & ts ([263b83c](https://github.com/webpack/webpack-cli/commit/263b83c)) -- generator: using configFile in configPath to get the config file name ([#883](https://github.com/webpack/webpack-cli/pull/883)) -- genrators/utils/style: typo & fix ([f46f4e5](https://github.com/webpack/webpack-cli/commit/f46f4e5)) +- improve checking file permission ([de41351](https://github.com/webpack/webpack-cli/commit/de41351)) +- chore: Minor fix ([6810182](https://github.com/webpack/webpack-cli/commit/6810182)) +- use fork cause original repo is unmaintained ([383125a](https://github.com/webpack/webpack-cli/commit/383125a)) +- add: apply suggestions ([ccf0dce](https://github.com/webpack/webpack-cli/commit/ccf0dce)) +- add: add handling of merge option ([eb43443](https://github.com/webpack/webpack-cli/commit/eb43443)) +- add: add handling of merge option ([ce51a0a](https://github.com/webpack/webpack-cli/commit/ce51a0a)) +- ci: fixes linting error in ci ([cfc0117](https://github.com/webpack/webpack-cli/commit/cfc0117)) +- cli: updates err message ([b5e1913](https://github.com/webpack/webpack-cli/commit/b5e1913)) +- cli: removes the comment before err handling block ([ac5a53f](https://github.com/webpack/webpack-cli/commit/ac5a53f)) +- cli: --config-register resolves relative to root ([23375bd](https://github.com/webpack/webpack-cli/commit/23375bd)) +- cli: removes func return in catch instance ([7d31321](https://github.com/webpack/webpack-cli/commit/7d31321)) +- cli: sets stack trace limit ([869024f](https://github.com/webpack/webpack-cli/commit/869024f)) +- cli: err when no args passed, refactored nested conditional blocks ([a9bc0bd](https://github.com/webpack/webpack-cli/commit/a9bc0bd)) +- cli: shows error message based on package manager ([a3ce273](https://github.com/webpack/webpack-cli/commit/a3ce273)) +- cli: error when no webpack and args found ([2250af0](https://github.com/webpack/webpack-cli/commit/2250af0)) +- generator: fixed the support of native plugins in add command ([123a150](https://github.com/webpack/webpack-cli/commit/123a150)) +- infra: fixes npm run docs ([65c08e2](https://github.com/webpack/webpack-cli/commit/65c08e2)) +- formatting files ([eb3909b](https://github.com/webpack/webpack-cli/commit/eb3909b)) +- remove type from inherited type ([960e73a](https://github.com/webpack/webpack-cli/commit/960e73a)) +- remove type from inherited type ([0552f76](https://github.com/webpack/webpack-cli/commit/0552f76)) +- change parser options ([4e8bc76](https://github.com/webpack/webpack-cli/commit/4e8bc76)) +- json module resolve ([61697b8](https://github.com/webpack/webpack-cli/commit/61697b8)) +- cli: improves error handling with args ([cc64955](https://github.com/webpack/webpack-cli/commit/cc64955)) +- generator: generate correct module.rule for babel & ts ([263b83c](https://github.com/webpack/webpack-cli/commit/263b83c)) +- generator: using configFile in configPath to get the config file name ([#883](https://github.com/webpack/webpack-cli/pull/883)) +- genrators/utils/style: typo & fix ([f46f4e5](https://github.com/webpack/webpack-cli/commit/f46f4e5)) ## Misc -- update internal docs ([7071b5c](https://github.com/webpack/webpack-cli/commit/7071b5c)) -- add lerna publish cmnd ([5c8c6a1](https://github.com/webpack/webpack-cli/commit/5c8c6a1)) -- generators: remove comment ([bd06a69](https://github.com/webpack/webpack-cli/commit/bd06a69)) -- generators: refactor ([376dcbd](https://github.com/webpack/webpack-cli/commit/376dcbd)) -- generators: small text improvements ([782f56c](https://github.com/webpack/webpack-cli/commit/782f56c)) -- generators: improve prompts ([ac35a31](https://github.com/webpack/webpack-cli/commit/ac35a31)) -- generators: refactor init-generator ([d574846](https://github.com/webpack/webpack-cli/commit/d574846)) -- generators: refactor utils ([17e4511](https://github.com/webpack/webpack-cli/commit/17e4511)) -- generators/utils/style: refactor ([392fcfe](https://github.com/webpack/webpack-cli/commit/392fcfe)) -- init: refactor with async/await ([1b07d2b](https://github.com/webpack/webpack-cli/commit/1b07d2b)) -- init: small refactor ([4627ea1](https://github.com/webpack/webpack-cli/commit/4627ea1)) -- init-generator: improve readme ([f971632](https://github.com/webpack/webpack-cli/commit/f971632)) -- init-generator: small refactor ([dcf44c1](https://github.com/webpack/webpack-cli/commit/dcf44c1)) -- init-generator: use webpackOption types, improve test rules ([a650e0e](https://github.com/webpack/webpack-cli/commit/a650e0e)) -- init-generator: improve types & defaults ([fb23aa4](https://github.com/webpack/webpack-cli/commit/fb23aa4)) -- packages: complete rebase ([488b06c](https://github.com/webpack/webpack-cli/commit/488b06c)) -- types: correct types ([85ef3e7](https://github.com/webpack/webpack-cli/commit/85ef3e7)) +- update internal docs ([7071b5c](https://github.com/webpack/webpack-cli/commit/7071b5c)) +- add lerna publish cmnd ([5c8c6a1](https://github.com/webpack/webpack-cli/commit/5c8c6a1)) +- generators: remove comment ([bd06a69](https://github.com/webpack/webpack-cli/commit/bd06a69)) +- generators: refactor ([376dcbd](https://github.com/webpack/webpack-cli/commit/376dcbd)) +- generators: small text improvements ([782f56c](https://github.com/webpack/webpack-cli/commit/782f56c)) +- generators: improve prompts ([ac35a31](https://github.com/webpack/webpack-cli/commit/ac35a31)) +- generators: refactor init-generator ([d574846](https://github.com/webpack/webpack-cli/commit/d574846)) +- generators: refactor utils ([17e4511](https://github.com/webpack/webpack-cli/commit/17e4511)) +- generators/utils/style: refactor ([392fcfe](https://github.com/webpack/webpack-cli/commit/392fcfe)) +- init: refactor with async/await ([1b07d2b](https://github.com/webpack/webpack-cli/commit/1b07d2b)) +- init: small refactor ([4627ea1](https://github.com/webpack/webpack-cli/commit/4627ea1)) +- init-generator: improve readme ([f971632](https://github.com/webpack/webpack-cli/commit/f971632)) +- init-generator: small refactor ([dcf44c1](https://github.com/webpack/webpack-cli/commit/dcf44c1)) +- init-generator: use webpackOption types, improve test rules ([a650e0e](https://github.com/webpack/webpack-cli/commit/a650e0e)) +- init-generator: improve types & defaults ([fb23aa4](https://github.com/webpack/webpack-cli/commit/fb23aa4)) +- packages: complete rebase ([488b06c](https://github.com/webpack/webpack-cli/commit/488b06c)) +- types: correct types ([85ef3e7](https://github.com/webpack/webpack-cli/commit/85ef3e7)) @@ -539,76 +539,76 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## New Features -- opencollective prompt: add option to disable it + doc ([d4643ae](https://github.com/webpack/webpack-cli/commit/d4643ae)) -- terser: clean old files ([89e6b74](https://github.com/webpack/webpack-cli/commit/89e6b74)) -- terser: remove leftover files ([27d5b4d](https://github.com/webpack/webpack-cli/commit/27d5b4d)) -- terser: replace after merging master ([c404655](https://github.com/webpack/webpack-cli/commit/c404655)) -- replace Uglify with Terser in generators ([2b8651b](https://github.com/webpack/webpack-cli/commit/2b8651b)) -- use terserPlugin in loaderOptionsPlugin ([14f5337](https://github.com/webpack/webpack-cli/commit/14f5337)) -- use terserJsPlugin for transformations during migrate ([33c6185](https://github.com/webpack/webpack-cli/commit/33c6185)) -- replace uglifyJsPlugin with terserPlugin in migrate ([d467f3b](https://github.com/webpack/webpack-cli/commit/d467f3b)) -- opencollective prompt: work on windows setting atime by code ([3af73a8](https://github.com/webpack/webpack-cli/commit/3af73a8)) -- opencollective prompt: fix typo ([c2351b1](https://github.com/webpack/webpack-cli/commit/c2351b1)) -- opencollective prompt: remove .lastocprint file from fs ([b96ad56](https://github.com/webpack/webpack-cli/commit/b96ad56)) -- opencollective prompt: extract weekday to variable ([790d27a](https://github.com/webpack/webpack-cli/commit/790d27a)) -- opencollective prompt: set terminal cols to 80 ([badc32d](https://github.com/webpack/webpack-cli/commit/badc32d)) -- opencollective prompt: fix azure ci ([ea0039a](https://github.com/webpack/webpack-cli/commit/ea0039a)) -- opencollective prompt: lint ([ea906d8](https://github.com/webpack/webpack-cli/commit/ea906d8)) -- opencollective prompt: clear package.json modifications ([f080733](https://github.com/webpack/webpack-cli/commit/f080733)) -- opencollective prompt: add prompt in postinstall script ([dd9d528](https://github.com/webpack/webpack-cli/commit/dd9d528)) +- opencollective prompt: add option to disable it + doc ([d4643ae](https://github.com/webpack/webpack-cli/commit/d4643ae)) +- terser: clean old files ([89e6b74](https://github.com/webpack/webpack-cli/commit/89e6b74)) +- terser: remove leftover files ([27d5b4d](https://github.com/webpack/webpack-cli/commit/27d5b4d)) +- terser: replace after merging master ([c404655](https://github.com/webpack/webpack-cli/commit/c404655)) +- replace Uglify with Terser in generators ([2b8651b](https://github.com/webpack/webpack-cli/commit/2b8651b)) +- use terserPlugin in loaderOptionsPlugin ([14f5337](https://github.com/webpack/webpack-cli/commit/14f5337)) +- use terserJsPlugin for transformations during migrate ([33c6185](https://github.com/webpack/webpack-cli/commit/33c6185)) +- replace uglifyJsPlugin with terserPlugin in migrate ([d467f3b](https://github.com/webpack/webpack-cli/commit/d467f3b)) +- opencollective prompt: work on windows setting atime by code ([3af73a8](https://github.com/webpack/webpack-cli/commit/3af73a8)) +- opencollective prompt: fix typo ([c2351b1](https://github.com/webpack/webpack-cli/commit/c2351b1)) +- opencollective prompt: remove .lastocprint file from fs ([b96ad56](https://github.com/webpack/webpack-cli/commit/b96ad56)) +- opencollective prompt: extract weekday to variable ([790d27a](https://github.com/webpack/webpack-cli/commit/790d27a)) +- opencollective prompt: set terminal cols to 80 ([badc32d](https://github.com/webpack/webpack-cli/commit/badc32d)) +- opencollective prompt: fix azure ci ([ea0039a](https://github.com/webpack/webpack-cli/commit/ea0039a)) +- opencollective prompt: lint ([ea906d8](https://github.com/webpack/webpack-cli/commit/ea906d8)) +- opencollective prompt: clear package.json modifications ([f080733](https://github.com/webpack/webpack-cli/commit/f080733)) +- opencollective prompt: add prompt in postinstall script ([dd9d528](https://github.com/webpack/webpack-cli/commit/dd9d528)) ## Ast -- change tooltip property from uglify to terser ([ea9e4b8](https://github.com/webpack/webpack-cli/commit/ea9e4b8)) -- replace requires and inits for uglify with terser ([3011a6c](https://github.com/webpack/webpack-cli/commit/3011a6c)) -- replace UglifyJsPlugin with TerserPlugin ([21da35f](https://github.com/webpack/webpack-cli/commit/21da35f)) +- change tooltip property from uglify to terser ([ea9e4b8](https://github.com/webpack/webpack-cli/commit/ea9e4b8)) +- replace requires and inits for uglify with terser ([3011a6c](https://github.com/webpack/webpack-cli/commit/3011a6c)) +- replace UglifyJsPlugin with TerserPlugin ([21da35f](https://github.com/webpack/webpack-cli/commit/21da35f)) ## Docs -- code of conduct ([#873](https://github.com/webpack/webpack-cli/pull/873)) -- contribute: adds table of contents and info about dependencies. ([#842](https://github.com/webpack/webpack-cli/pull/842)) -- contributing: fixes dead link ([#835](https://github.com/webpack/webpack-cli/pull/835)) -- opencollective prompt: improve code clarity ([55992a4](https://github.com/webpack/webpack-cli/commit/55992a4)) -- packages: adds downloads/month shield ([6a0375a](https://github.com/webpack/webpack-cli/commit/6a0375a)) -- readme: fix typos, add summary of all commands ([#845](https://github.com/webpack/webpack-cli/pull/845)) -- readme: adds contributors shield ([958d064](https://github.com/webpack/webpack-cli/commit/958d064)) -- README: phrase change ([3a11a16](https://github.com/webpack/webpack-cli/commit/3a11a16)) -- README: add link to webpack-scaffold-starter ([e35a194](https://github.com/webpack/webpack-cli/commit/e35a194)) -- README: update scaffolding links ([74179b5](https://github.com/webpack/webpack-cli/commit/74179b5)) -- serve: link to webpack-dev-server ([cb68b1b](https://github.com/webpack/webpack-cli/commit/cb68b1b)) -- serve: update docs to use webpack-dev-server ([f7451d4](https://github.com/webpack/webpack-cli/commit/f7451d4)) -- replace tooltip link to terser plugin ([4254730](https://github.com/webpack/webpack-cli/commit/4254730)) -- replace Uglify with Terser in comments ([799577d](https://github.com/webpack/webpack-cli/commit/799577d)) -- replace UglifyJsPlugin with TerserPlugin in migrate docs ([326f783](https://github.com/webpack/webpack-cli/commit/326f783)) +- code of conduct ([#873](https://github.com/webpack/webpack-cli/pull/873)) +- contribute: adds table of contents and info about dependencies. ([#842](https://github.com/webpack/webpack-cli/pull/842)) +- contributing: fixes dead link ([#835](https://github.com/webpack/webpack-cli/pull/835)) +- opencollective prompt: improve code clarity ([55992a4](https://github.com/webpack/webpack-cli/commit/55992a4)) +- packages: adds downloads/month shield ([6a0375a](https://github.com/webpack/webpack-cli/commit/6a0375a)) +- readme: fix typos, add summary of all commands ([#845](https://github.com/webpack/webpack-cli/pull/845)) +- readme: adds contributors shield ([958d064](https://github.com/webpack/webpack-cli/commit/958d064)) +- README: phrase change ([3a11a16](https://github.com/webpack/webpack-cli/commit/3a11a16)) +- README: add link to webpack-scaffold-starter ([e35a194](https://github.com/webpack/webpack-cli/commit/e35a194)) +- README: update scaffolding links ([74179b5](https://github.com/webpack/webpack-cli/commit/74179b5)) +- serve: link to webpack-dev-server ([cb68b1b](https://github.com/webpack/webpack-cli/commit/cb68b1b)) +- serve: update docs to use webpack-dev-server ([f7451d4](https://github.com/webpack/webpack-cli/commit/f7451d4)) +- replace tooltip link to terser plugin ([4254730](https://github.com/webpack/webpack-cli/commit/4254730)) +- replace Uglify with Terser in comments ([799577d](https://github.com/webpack/webpack-cli/commit/799577d)) +- replace UglifyJsPlugin with TerserPlugin in migrate docs ([326f783](https://github.com/webpack/webpack-cli/commit/326f783)) ## Enh -- webpack-scaffold: improve prompt and doc ([#794](https://github.com/webpack/webpack-cli/pull/794)) +- webpack-scaffold: improve prompt and doc ([#794](https://github.com/webpack/webpack-cli/pull/794)) ## Fix -- add: add types ([d4ce6f2](https://github.com/webpack/webpack-cli/commit/d4ce6f2)) -- add: fix runTransform ([dbc3e9e](https://github.com/webpack/webpack-cli/commit/dbc3e9e)) -- add: lint code ([163b309](https://github.com/webpack/webpack-cli/commit/163b309)) -- add: add handling for topScope ([1162cf5](https://github.com/webpack/webpack-cli/commit/1162cf5)) -- bin, serve: force default package export, add serve default ([#815](https://github.com/webpack/webpack-cli/pull/815)) -- init: refactored the init.ts success message ([#810](https://github.com/webpack/webpack-cli/pull/810)) -- opencollective prompt: fix grammar ([246db42](https://github.com/webpack/webpack-cli/commit/246db42)) -- opencollective-prompt: check write permissions ([5284b7e](https://github.com/webpack/webpack-cli/commit/5284b7e)) -- scaffold: config file is always generated at the project root ([#801](https://github.com/webpack/webpack-cli/pull/801)) -- utils: refactors utils ([7fe3543](https://github.com/webpack/webpack-cli/commit/7fe3543)) -- clear up comment about default function purpose ([e48507d](https://github.com/webpack/webpack-cli/commit/e48507d)) -- remove unused files ([ec242ab](https://github.com/webpack/webpack-cli/commit/ec242ab)) -- reset files ([9863445](https://github.com/webpack/webpack-cli/commit/9863445)) -- replace lookups for TerserPlugin in webpack.optimise ([ef23fec](https://github.com/webpack/webpack-cli/commit/ef23fec)) +- add: add types ([d4ce6f2](https://github.com/webpack/webpack-cli/commit/d4ce6f2)) +- add: fix runTransform ([dbc3e9e](https://github.com/webpack/webpack-cli/commit/dbc3e9e)) +- add: lint code ([163b309](https://github.com/webpack/webpack-cli/commit/163b309)) +- add: add handling for topScope ([1162cf5](https://github.com/webpack/webpack-cli/commit/1162cf5)) +- bin, serve: force default package export, add serve default ([#815](https://github.com/webpack/webpack-cli/pull/815)) +- init: refactored the init.ts success message ([#810](https://github.com/webpack/webpack-cli/pull/810)) +- opencollective prompt: fix grammar ([246db42](https://github.com/webpack/webpack-cli/commit/246db42)) +- opencollective-prompt: check write permissions ([5284b7e](https://github.com/webpack/webpack-cli/commit/5284b7e)) +- scaffold: config file is always generated at the project root ([#801](https://github.com/webpack/webpack-cli/pull/801)) +- utils: refactors utils ([7fe3543](https://github.com/webpack/webpack-cli/commit/7fe3543)) +- clear up comment about default function purpose ([e48507d](https://github.com/webpack/webpack-cli/commit/e48507d)) +- remove unused files ([ec242ab](https://github.com/webpack/webpack-cli/commit/ec242ab)) +- reset files ([9863445](https://github.com/webpack/webpack-cli/commit/9863445)) +- replace lookups for TerserPlugin in webpack.optimise ([ef23fec](https://github.com/webpack/webpack-cli/commit/ef23fec)) ## Misc -- chore(docs): Refactors links for badges ([#859](https://github.com/webpack/webpack-cli/pull/859)) -- opencollective-prompt: improve grammar ([e17a26d](https://github.com/webpack/webpack-cli/commit/e17a26d)) -- Remove tslint in favour of eslint ([#834](https://github.com/webpack/webpack-cli/pull/834)) -- cli: refactor functions into utils and config dirs, merge yargs options ([#781](https://github.com/webpack/webpack-cli/pull/781)) -- utils: refactors scaffold ([0b28fb3](https://github.com/webpack/webpack-cli/commit/0b28fb3)) +- chore(docs): Refactors links for badges ([#859](https://github.com/webpack/webpack-cli/pull/859)) +- opencollective-prompt: improve grammar ([e17a26d](https://github.com/webpack/webpack-cli/commit/e17a26d)) +- Remove tslint in favour of eslint ([#834](https://github.com/webpack/webpack-cli/pull/834)) +- cli: refactor functions into utils and config dirs, merge yargs options ([#781](https://github.com/webpack/webpack-cli/pull/781)) +- utils: refactors scaffold ([0b28fb3](https://github.com/webpack/webpack-cli/commit/0b28fb3)) @@ -618,68 +618,68 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## New Features -- terser: clean old files ([89e6b74](https://github.com/webpack/webpack-cli/commit/89e6b74)) -- terser: remove leftover files ([27d5b4d](https://github.com/webpack/webpack-cli/commit/27d5b4d)) -- terser: replace after merging master ([c404655](https://github.com/webpack/webpack-cli/commit/c404655)) -- replace Uglify with Terser in generators ([2b8651b](https://github.com/webpack/webpack-cli/commit/2b8651b)) -- use terserPlugin in loaderOptionsPlugin ([14f5337](https://github.com/webpack/webpack-cli/commit/14f5337)) -- use terserJsPlugin for transformations during migrate ([33c6185](https://github.com/webpack/webpack-cli/commit/33c6185)) -- replace uglifyJsPlugin with terserPlugin in migrate ([d467f3b](https://github.com/webpack/webpack-cli/commit/d467f3b)) -- opencollective prompt: work on windows setting atime by code ([3af73a8](https://github.com/webpack/webpack-cli/commit/3af73a8)) -- opencollective prompt: fix typo ([c2351b1](https://github.com/webpack/webpack-cli/commit/c2351b1)) -- opencollective prompt: remove .lastocprint file from fs ([b96ad56](https://github.com/webpack/webpack-cli/commit/b96ad56)) -- opencollective prompt: extract weekday to variable ([790d27a](https://github.com/webpack/webpack-cli/commit/790d27a)) -- opencollective prompt: set terminal cols to 80 ([badc32d](https://github.com/webpack/webpack-cli/commit/badc32d)) -- opencollective prompt: fix azure ci ([ea0039a](https://github.com/webpack/webpack-cli/commit/ea0039a)) -- opencollective prompt: lint ([ea906d8](https://github.com/webpack/webpack-cli/commit/ea906d8)) -- opencollective prompt: clear package.json modifications ([f080733](https://github.com/webpack/webpack-cli/commit/f080733)) -- opencollective prompt: add prompt in postinstall script ([dd9d528](https://github.com/webpack/webpack-cli/commit/dd9d528)) +- terser: clean old files ([89e6b74](https://github.com/webpack/webpack-cli/commit/89e6b74)) +- terser: remove leftover files ([27d5b4d](https://github.com/webpack/webpack-cli/commit/27d5b4d)) +- terser: replace after merging master ([c404655](https://github.com/webpack/webpack-cli/commit/c404655)) +- replace Uglify with Terser in generators ([2b8651b](https://github.com/webpack/webpack-cli/commit/2b8651b)) +- use terserPlugin in loaderOptionsPlugin ([14f5337](https://github.com/webpack/webpack-cli/commit/14f5337)) +- use terserJsPlugin for transformations during migrate ([33c6185](https://github.com/webpack/webpack-cli/commit/33c6185)) +- replace uglifyJsPlugin with terserPlugin in migrate ([d467f3b](https://github.com/webpack/webpack-cli/commit/d467f3b)) +- opencollective prompt: work on windows setting atime by code ([3af73a8](https://github.com/webpack/webpack-cli/commit/3af73a8)) +- opencollective prompt: fix typo ([c2351b1](https://github.com/webpack/webpack-cli/commit/c2351b1)) +- opencollective prompt: remove .lastocprint file from fs ([b96ad56](https://github.com/webpack/webpack-cli/commit/b96ad56)) +- opencollective prompt: extract weekday to variable ([790d27a](https://github.com/webpack/webpack-cli/commit/790d27a)) +- opencollective prompt: set terminal cols to 80 ([badc32d](https://github.com/webpack/webpack-cli/commit/badc32d)) +- opencollective prompt: fix azure ci ([ea0039a](https://github.com/webpack/webpack-cli/commit/ea0039a)) +- opencollective prompt: lint ([ea906d8](https://github.com/webpack/webpack-cli/commit/ea906d8)) +- opencollective prompt: clear package.json modifications ([f080733](https://github.com/webpack/webpack-cli/commit/f080733)) +- opencollective prompt: add prompt in postinstall script ([dd9d528](https://github.com/webpack/webpack-cli/commit/dd9d528)) ## Ast -- change tooltip property from uglify to terser ([ea9e4b8](https://github.com/webpack/webpack-cli/commit/ea9e4b8)) -- replace requires and inits for uglify with terser ([3011a6c](https://github.com/webpack/webpack-cli/commit/3011a6c)) -- replace UglifyJsPlugin with TerserPlugin ([21da35f](https://github.com/webpack/webpack-cli/commit/21da35f)) +- change tooltip property from uglify to terser ([ea9e4b8](https://github.com/webpack/webpack-cli/commit/ea9e4b8)) +- replace requires and inits for uglify with terser ([3011a6c](https://github.com/webpack/webpack-cli/commit/3011a6c)) +- replace UglifyJsPlugin with TerserPlugin ([21da35f](https://github.com/webpack/webpack-cli/commit/21da35f)) ## Docs -- contributing: fixes dead link ([#835](https://github.com/webpack/webpack-cli/pull/835)) -- opencollective prompt: improve code clarity ([55992a4](https://github.com/webpack/webpack-cli/commit/55992a4)) -- packages: adds downloads/month shield ([6a0375a](https://github.com/webpack/webpack-cli/commit/6a0375a)) -- readme: adds contributors shield ([958d064](https://github.com/webpack/webpack-cli/commit/958d064)) -- README: phrase change ([3a11a16](https://github.com/webpack/webpack-cli/commit/3a11a16)) -- README: add link to webpack-scaffold-starter ([e35a194](https://github.com/webpack/webpack-cli/commit/e35a194)) -- README: update scaffolding links ([74179b5](https://github.com/webpack/webpack-cli/commit/74179b5)) -- serve: link to webpack-dev-server ([cb68b1b](https://github.com/webpack/webpack-cli/commit/cb68b1b)) -- serve: update docs to use webpack-dev-server ([f7451d4](https://github.com/webpack/webpack-cli/commit/f7451d4)) -- replace tooltip link to terser plugin ([4254730](https://github.com/webpack/webpack-cli/commit/4254730)) -- replace Uglify with Terser in comments ([799577d](https://github.com/webpack/webpack-cli/commit/799577d)) -- replace UglifyJsPlugin with TerserPlugin in migrate docs ([326f783](https://github.com/webpack/webpack-cli/commit/326f783)) +- contributing: fixes dead link ([#835](https://github.com/webpack/webpack-cli/pull/835)) +- opencollective prompt: improve code clarity ([55992a4](https://github.com/webpack/webpack-cli/commit/55992a4)) +- packages: adds downloads/month shield ([6a0375a](https://github.com/webpack/webpack-cli/commit/6a0375a)) +- readme: adds contributors shield ([958d064](https://github.com/webpack/webpack-cli/commit/958d064)) +- README: phrase change ([3a11a16](https://github.com/webpack/webpack-cli/commit/3a11a16)) +- README: add link to webpack-scaffold-starter ([e35a194](https://github.com/webpack/webpack-cli/commit/e35a194)) +- README: update scaffolding links ([74179b5](https://github.com/webpack/webpack-cli/commit/74179b5)) +- serve: link to webpack-dev-server ([cb68b1b](https://github.com/webpack/webpack-cli/commit/cb68b1b)) +- serve: update docs to use webpack-dev-server ([f7451d4](https://github.com/webpack/webpack-cli/commit/f7451d4)) +- replace tooltip link to terser plugin ([4254730](https://github.com/webpack/webpack-cli/commit/4254730)) +- replace Uglify with Terser in comments ([799577d](https://github.com/webpack/webpack-cli/commit/799577d)) +- replace UglifyJsPlugin with TerserPlugin in migrate docs ([326f783](https://github.com/webpack/webpack-cli/commit/326f783)) ## Enh -- webpack-scaffold: improve prompt and doc ([#794](https://github.com/webpack/webpack-cli/pull/794)) +- webpack-scaffold: improve prompt and doc ([#794](https://github.com/webpack/webpack-cli/pull/794)) ## Fix -- add: add types ([d4ce6f2](https://github.com/webpack/webpack-cli/commit/d4ce6f2)) -- add: fix runTransform ([dbc3e9e](https://github.com/webpack/webpack-cli/commit/dbc3e9e)) -- add: lint code ([163b309](https://github.com/webpack/webpack-cli/commit/163b309)) -- add: add handling for topScope ([1162cf5](https://github.com/webpack/webpack-cli/commit/1162cf5)) -- bin, serve: force default package export, add serve default ([#815](https://github.com/webpack/webpack-cli/pull/815)) -- init: refactored the init.ts success message ([#810](https://github.com/webpack/webpack-cli/pull/810)) -- scaffold: config file is always generated at the project root ([#801](https://github.com/webpack/webpack-cli/pull/801)) -- utils: refactors utils ([7fe3543](https://github.com/webpack/webpack-cli/commit/7fe3543)) -- clear up comment about default function purpose ([e48507d](https://github.com/webpack/webpack-cli/commit/e48507d)) -- remove unused files ([ec242ab](https://github.com/webpack/webpack-cli/commit/ec242ab)) -- reset files ([9863445](https://github.com/webpack/webpack-cli/commit/9863445)) -- replace lookups for TerserPlugin in webpack.optimise ([ef23fec](https://github.com/webpack/webpack-cli/commit/ef23fec)) +- add: add types ([d4ce6f2](https://github.com/webpack/webpack-cli/commit/d4ce6f2)) +- add: fix runTransform ([dbc3e9e](https://github.com/webpack/webpack-cli/commit/dbc3e9e)) +- add: lint code ([163b309](https://github.com/webpack/webpack-cli/commit/163b309)) +- add: add handling for topScope ([1162cf5](https://github.com/webpack/webpack-cli/commit/1162cf5)) +- bin, serve: force default package export, add serve default ([#815](https://github.com/webpack/webpack-cli/pull/815)) +- init: refactored the init.ts success message ([#810](https://github.com/webpack/webpack-cli/pull/810)) +- scaffold: config file is always generated at the project root ([#801](https://github.com/webpack/webpack-cli/pull/801)) +- utils: refactors utils ([7fe3543](https://github.com/webpack/webpack-cli/commit/7fe3543)) +- clear up comment about default function purpose ([e48507d](https://github.com/webpack/webpack-cli/commit/e48507d)) +- remove unused files ([ec242ab](https://github.com/webpack/webpack-cli/commit/ec242ab)) +- reset files ([9863445](https://github.com/webpack/webpack-cli/commit/9863445)) +- replace lookups for TerserPlugin in webpack.optimise ([ef23fec](https://github.com/webpack/webpack-cli/commit/ef23fec)) ## Misc -- Remove tslint in favour of eslint ([#834](https://github.com/webpack/webpack-cli/pull/834)) -- cli: refactor functions into utils and config dirs, merge yargs options ([#781](https://github.com/webpack/webpack-cli/pull/781)) -- utils: refactors scaffold ([0b28fb3](https://github.com/webpack/webpack-cli/commit/0b28fb3)) +- Remove tslint in favour of eslint ([#834](https://github.com/webpack/webpack-cli/pull/834)) +- cli: refactor functions into utils and config dirs, merge yargs options ([#781](https://github.com/webpack/webpack-cli/pull/781)) +- utils: refactors scaffold ([0b28fb3](https://github.com/webpack/webpack-cli/commit/0b28fb3)) @@ -689,71 +689,71 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## New Features -- use webpack.config as default name in dev scaffold ([385a672](https://github.com/webpack/webpack-cli/commit/385a672)) -- only display once a week ([b6199e5](https://github.com/webpack/webpack-cli/commit/b6199e5)) -- add util to run-and-get watch proc ([1d2ccd5](https://github.com/webpack/webpack-cli/commit/1d2ccd5)) -- add test-util to append data to file ([e9e1dcb](https://github.com/webpack/webpack-cli/commit/e9e1dcb)) -- log: clean single line logs ([5d2284b](https://github.com/webpack/webpack-cli/commit/5d2284b)) -- log: add gitignore ([7c830b5](https://github.com/webpack/webpack-cli/commit/7c830b5)) -- log: make log package ([df7c224](https://github.com/webpack/webpack-cli/commit/df7c224)) -- log: add clrscr function ([11b3bff](https://github.com/webpack/webpack-cli/commit/11b3bff)) -- log: few changes ([bc32727](https://github.com/webpack/webpack-cli/commit/bc32727)) -- log: add newline for title ([4047213](https://github.com/webpack/webpack-cli/commit/4047213)) -- log: remove unwanted commits ([c088f3e](https://github.com/webpack/webpack-cli/commit/c088f3e)) -- log: task based custom loggers ([2c43a41](https://github.com/webpack/webpack-cli/commit/2c43a41)) +- use webpack.config as default name in dev scaffold ([385a672](https://github.com/webpack/webpack-cli/commit/385a672)) +- only display once a week ([b6199e5](https://github.com/webpack/webpack-cli/commit/b6199e5)) +- add util to run-and-get watch proc ([1d2ccd5](https://github.com/webpack/webpack-cli/commit/1d2ccd5)) +- add test-util to append data to file ([e9e1dcb](https://github.com/webpack/webpack-cli/commit/e9e1dcb)) +- log: clean single line logs ([5d2284b](https://github.com/webpack/webpack-cli/commit/5d2284b)) +- log: add gitignore ([7c830b5](https://github.com/webpack/webpack-cli/commit/7c830b5)) +- log: make log package ([df7c224](https://github.com/webpack/webpack-cli/commit/df7c224)) +- log: add clrscr function ([11b3bff](https://github.com/webpack/webpack-cli/commit/11b3bff)) +- log: few changes ([bc32727](https://github.com/webpack/webpack-cli/commit/bc32727)) +- log: add newline for title ([4047213](https://github.com/webpack/webpack-cli/commit/4047213)) +- log: remove unwanted commits ([c088f3e](https://github.com/webpack/webpack-cli/commit/c088f3e)) +- log: task based custom loggers ([2c43a41](https://github.com/webpack/webpack-cli/commit/2c43a41)) ## Docs -- scaffolding: lowercase Webpack ([d19c1f7](https://github.com/webpack/webpack-cli/commit/d19c1f7)) -- scaffolding: fix typos ([b94b0de](https://github.com/webpack/webpack-cli/commit/b94b0de)) -- scaffolding: improve grammar ([6b79072](https://github.com/webpack/webpack-cli/commit/6b79072)) -- add lerna badge in README ([#786](https://github.com/webpack/webpack-cli/pull/786)) -- contributing: refactor & formatting ([1042cb2](https://github.com/webpack/webpack-cli/commit/1042cb2)) -- contributing: improve formatting ([47fcd7f](https://github.com/webpack/webpack-cli/commit/47fcd7f)) -- contributing: : at the end of paragraphs ([48d65fd](https://github.com/webpack/webpack-cli/commit/48d65fd)) -- contributing: update instructions to run individual tests ([b7cca58](https://github.com/webpack/webpack-cli/commit/b7cca58)) -- contributing: update instructions to run individual tests ([bc0297a](https://github.com/webpack/webpack-cli/commit/bc0297a)) -- contributing: add yarn before running jest ([126cf55](https://github.com/webpack/webpack-cli/commit/126cf55)) -- contributing: commands to install jest globally ([18b7c2e](https://github.com/webpack/webpack-cli/commit/18b7c2e)) -- contributing: fixes typo ([c458380](https://github.com/webpack/webpack-cli/commit/c458380)) -- contributing: improves formatting ([abac823](https://github.com/webpack/webpack-cli/commit/abac823)) -- contributing: adds prebuild instructions ([81cb46a](https://github.com/webpack/webpack-cli/commit/81cb46a)) -- readme: add downloads badge ([dc2423c](https://github.com/webpack/webpack-cli/commit/dc2423c)) -- scaffold: add link option for local ([f8424be](https://github.com/webpack/webpack-cli/commit/f8424be)) -- scaffold: Add installation guide for packages/webpack-scaffold ([#727](https://github.com/webpack/webpack-cli/pull/727)) -- scaffolding: fix typo ([98818a1](https://github.com/webpack/webpack-cli/commit/98818a1)) -- scaffolding: improve description & formatting ([0f657d0](https://github.com/webpack/webpack-cli/commit/0f657d0)) -- scaffolding: fix links ([e11c524](https://github.com/webpack/webpack-cli/commit/e11c524)) -- scaffolding: add yarn example ([d47eea0](https://github.com/webpack/webpack-cli/commit/d47eea0)) -- scaffolding: fix typo ([87ba169](https://github.com/webpack/webpack-cli/commit/87ba169)) -- scaffolding: improved structure, formatting, typos ([8949f82](https://github.com/webpack/webpack-cli/commit/8949f82)) -- init documentaion ([4b130bb](https://github.com/webpack/webpack-cli/commit/4b130bb)) -- rename Webpack to webpack ([900c13e](https://github.com/webpack/webpack-cli/commit/900c13e)) -- init documentaion ([14d2b47](https://github.com/webpack/webpack-cli/commit/14d2b47)) +- scaffolding: lowercase Webpack ([d19c1f7](https://github.com/webpack/webpack-cli/commit/d19c1f7)) +- scaffolding: fix typos ([b94b0de](https://github.com/webpack/webpack-cli/commit/b94b0de)) +- scaffolding: improve grammar ([6b79072](https://github.com/webpack/webpack-cli/commit/6b79072)) +- add lerna badge in README ([#786](https://github.com/webpack/webpack-cli/pull/786)) +- contributing: refactor & formatting ([1042cb2](https://github.com/webpack/webpack-cli/commit/1042cb2)) +- contributing: improve formatting ([47fcd7f](https://github.com/webpack/webpack-cli/commit/47fcd7f)) +- contributing: : at the end of paragraphs ([48d65fd](https://github.com/webpack/webpack-cli/commit/48d65fd)) +- contributing: update instructions to run individual tests ([b7cca58](https://github.com/webpack/webpack-cli/commit/b7cca58)) +- contributing: update instructions to run individual tests ([bc0297a](https://github.com/webpack/webpack-cli/commit/bc0297a)) +- contributing: add yarn before running jest ([126cf55](https://github.com/webpack/webpack-cli/commit/126cf55)) +- contributing: commands to install jest globally ([18b7c2e](https://github.com/webpack/webpack-cli/commit/18b7c2e)) +- contributing: fixes typo ([c458380](https://github.com/webpack/webpack-cli/commit/c458380)) +- contributing: improves formatting ([abac823](https://github.com/webpack/webpack-cli/commit/abac823)) +- contributing: adds prebuild instructions ([81cb46a](https://github.com/webpack/webpack-cli/commit/81cb46a)) +- readme: add downloads badge ([dc2423c](https://github.com/webpack/webpack-cli/commit/dc2423c)) +- scaffold: add link option for local ([f8424be](https://github.com/webpack/webpack-cli/commit/f8424be)) +- scaffold: Add installation guide for packages/webpack-scaffold ([#727](https://github.com/webpack/webpack-cli/pull/727)) +- scaffolding: fix typo ([98818a1](https://github.com/webpack/webpack-cli/commit/98818a1)) +- scaffolding: improve description & formatting ([0f657d0](https://github.com/webpack/webpack-cli/commit/0f657d0)) +- scaffolding: fix links ([e11c524](https://github.com/webpack/webpack-cli/commit/e11c524)) +- scaffolding: add yarn example ([d47eea0](https://github.com/webpack/webpack-cli/commit/d47eea0)) +- scaffolding: fix typo ([87ba169](https://github.com/webpack/webpack-cli/commit/87ba169)) +- scaffolding: improved structure, formatting, typos ([8949f82](https://github.com/webpack/webpack-cli/commit/8949f82)) +- init documentaion ([4b130bb](https://github.com/webpack/webpack-cli/commit/4b130bb)) +- rename Webpack to webpack ([900c13e](https://github.com/webpack/webpack-cli/commit/900c13e)) +- init documentaion ([14d2b47](https://github.com/webpack/webpack-cli/commit/14d2b47)) ## Fix -- bin: use compiler.close API correctly for stats ([568161d](https://github.com/webpack/webpack-cli/commit/568161d)) -- bin: extension detection ([#724](https://github.com/webpack/webpack-cli/pull/724)) -- init: lint code ([20aab48](https://github.com/webpack/webpack-cli/commit/20aab48)) -- init: support global installation ([1cb0166](https://github.com/webpack/webpack-cli/commit/1cb0166)) -- init: revert to local installation ([48b3b23](https://github.com/webpack/webpack-cli/commit/48b3b23)) -- init: update prompt command ([c1c0739](https://github.com/webpack/webpack-cli/commit/c1c0739)) -- init: update prompt command ([1cab3cb](https://github.com/webpack/webpack-cli/commit/1cab3cb)) -- readme: remove old dependency status link ([4df0000](https://github.com/webpack/webpack-cli/commit/4df0000)) -- readme: add fallback badge for dependency status ([0e3753b](https://github.com/webpack/webpack-cli/commit/0e3753b)) -- tests: remove snapshot for static compilation ([54a3ac4](https://github.com/webpack/webpack-cli/commit/54a3ac4)) -- tests: remove snapshot for static compilation ([3af0948](https://github.com/webpack/webpack-cli/commit/3af0948)) -- tests: update jest ([d195774](https://github.com/webpack/webpack-cli/commit/d195774)) -- close compiler, own sh script and output clearing ([6ded275](https://github.com/webpack/webpack-cli/commit/6ded275)) -- failing test ([88888bb](https://github.com/webpack/webpack-cli/commit/88888bb)) -- failing test ([986472a](https://github.com/webpack/webpack-cli/commit/986472a)) -- test: fix travis ts build ([22d3acc](https://github.com/webpack/webpack-cli/commit/22d3acc)) +- bin: use compiler.close API correctly for stats ([568161d](https://github.com/webpack/webpack-cli/commit/568161d)) +- bin: extension detection ([#724](https://github.com/webpack/webpack-cli/pull/724)) +- init: lint code ([20aab48](https://github.com/webpack/webpack-cli/commit/20aab48)) +- init: support global installation ([1cb0166](https://github.com/webpack/webpack-cli/commit/1cb0166)) +- init: revert to local installation ([48b3b23](https://github.com/webpack/webpack-cli/commit/48b3b23)) +- init: update prompt command ([c1c0739](https://github.com/webpack/webpack-cli/commit/c1c0739)) +- init: update prompt command ([1cab3cb](https://github.com/webpack/webpack-cli/commit/1cab3cb)) +- readme: remove old dependency status link ([4df0000](https://github.com/webpack/webpack-cli/commit/4df0000)) +- readme: add fallback badge for dependency status ([0e3753b](https://github.com/webpack/webpack-cli/commit/0e3753b)) +- tests: remove snapshot for static compilation ([54a3ac4](https://github.com/webpack/webpack-cli/commit/54a3ac4)) +- tests: remove snapshot for static compilation ([3af0948](https://github.com/webpack/webpack-cli/commit/3af0948)) +- tests: update jest ([d195774](https://github.com/webpack/webpack-cli/commit/d195774)) +- close compiler, own sh script and output clearing ([6ded275](https://github.com/webpack/webpack-cli/commit/6ded275)) +- failing test ([88888bb](https://github.com/webpack/webpack-cli/commit/88888bb)) +- failing test ([986472a](https://github.com/webpack/webpack-cli/commit/986472a)) +- test: fix travis ts build ([22d3acc](https://github.com/webpack/webpack-cli/commit/22d3acc)) ## Misc -- Correction of the webpack-merge configuration ([2ed8c60](https://github.com/webpack/webpack-cli/commit/2ed8c60)) -- replace opencollective with light vers ([848bf4b](https://github.com/webpack/webpack-cli/commit/848bf4b)) +- Correction of the webpack-merge configuration ([2ed8c60](https://github.com/webpack/webpack-cli/commit/2ed8c60)) +- replace opencollective with light vers ([848bf4b](https://github.com/webpack/webpack-cli/commit/848bf4b)) @@ -763,36 +763,36 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## New Features -- only display once a week ([b6199e5](https://github.com/webpack/webpack-cli/commit/b6199e5)) -- add util to run-and-get watch proc ([1d2ccd5](https://github.com/webpack/webpack-cli/commit/1d2ccd5)) -- add test-util to append data to file ([e9e1dcb](https://github.com/webpack/webpack-cli/commit/e9e1dcb)) -- log: clean single line logs ([5d2284b](https://github.com/webpack/webpack-cli/commit/5d2284b)) -- log: add gitignore ([7c830b5](https://github.com/webpack/webpack-cli/commit/7c830b5)) -- log: make log package ([df7c224](https://github.com/webpack/webpack-cli/commit/df7c224)) -- log: add clrscr function ([11b3bff](https://github.com/webpack/webpack-cli/commit/11b3bff)) -- log: few changes ([bc32727](https://github.com/webpack/webpack-cli/commit/bc32727)) -- log: add newline for title ([4047213](https://github.com/webpack/webpack-cli/commit/4047213)) -- log: remove unwanted commits ([c088f3e](https://github.com/webpack/webpack-cli/commit/c088f3e)) -- log: task based custom loggers ([2c43a41](https://github.com/webpack/webpack-cli/commit/2c43a41)) +- only display once a week ([b6199e5](https://github.com/webpack/webpack-cli/commit/b6199e5)) +- add util to run-and-get watch proc ([1d2ccd5](https://github.com/webpack/webpack-cli/commit/1d2ccd5)) +- add test-util to append data to file ([e9e1dcb](https://github.com/webpack/webpack-cli/commit/e9e1dcb)) +- log: clean single line logs ([5d2284b](https://github.com/webpack/webpack-cli/commit/5d2284b)) +- log: add gitignore ([7c830b5](https://github.com/webpack/webpack-cli/commit/7c830b5)) +- log: make log package ([df7c224](https://github.com/webpack/webpack-cli/commit/df7c224)) +- log: add clrscr function ([11b3bff](https://github.com/webpack/webpack-cli/commit/11b3bff)) +- log: few changes ([bc32727](https://github.com/webpack/webpack-cli/commit/bc32727)) +- log: add newline for title ([4047213](https://github.com/webpack/webpack-cli/commit/4047213)) +- log: remove unwanted commits ([c088f3e](https://github.com/webpack/webpack-cli/commit/c088f3e)) +- log: task based custom loggers ([2c43a41](https://github.com/webpack/webpack-cli/commit/2c43a41)) ## Docs -- init documentaion ([14d2b47](https://github.com/webpack/webpack-cli/commit/14d2b47)) -- scaffold: Add installation guide for packages/webpack-scaffold ([#727](https://github.com/webpack/webpack-cli/pull/727)) +- init documentaion ([14d2b47](https://github.com/webpack/webpack-cli/commit/14d2b47)) +- scaffold: Add installation guide for packages/webpack-scaffold ([#727](https://github.com/webpack/webpack-cli/pull/727)) ## Fix -- close compiler, own sh script and output clearing ([6ded275](https://github.com/webpack/webpack-cli/commit/6ded275)) -- bin: extension detection ([#724](https://github.com/webpack/webpack-cli/pull/724)) -- readme: remove old dependency status link ([4df0000](https://github.com/webpack/webpack-cli/commit/4df0000)) -- readme: add fallback badge for dependency status ([0e3753b](https://github.com/webpack/webpack-cli/commit/0e3753b)) -- failing test ([88888bb](https://github.com/webpack/webpack-cli/commit/88888bb)) -- test: fix travis ts build ([22d3acc](https://github.com/webpack/webpack-cli/commit/22d3acc)) +- close compiler, own sh script and output clearing ([6ded275](https://github.com/webpack/webpack-cli/commit/6ded275)) +- bin: extension detection ([#724](https://github.com/webpack/webpack-cli/pull/724)) +- readme: remove old dependency status link ([4df0000](https://github.com/webpack/webpack-cli/commit/4df0000)) +- readme: add fallback badge for dependency status ([0e3753b](https://github.com/webpack/webpack-cli/commit/0e3753b)) +- failing test ([88888bb](https://github.com/webpack/webpack-cli/commit/88888bb)) +- test: fix travis ts build ([22d3acc](https://github.com/webpack/webpack-cli/commit/22d3acc)) ## Misc -- Correction of the webpack-merge configuration ([2ed8c60](https://github.com/webpack/webpack-cli/commit/2ed8c60)) -- replace opencollective with light vers ([848bf4b](https://github.com/webpack/webpack-cli/commit/848bf4b)) +- Correction of the webpack-merge configuration ([2ed8c60](https://github.com/webpack/webpack-cli/commit/2ed8c60)) +- replace opencollective with light vers ([848bf4b](https://github.com/webpack/webpack-cli/commit/848bf4b)) @@ -802,18 +802,18 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## Docs -- init: update headers ([dc4ded9](https://github.com/webpack/webpack-cli/commit/dc4ded9)) -- init: update init documentation ([2ccf9a9](https://github.com/webpack/webpack-cli/commit/2ccf9a9)) -- readme: update webpack-cli to webpack CLI ([f3a225a](https://github.com/webpack/webpack-cli/commit/f3a225a)) -- readme: change addons to scaffolds ([747aef9](https://github.com/webpack/webpack-cli/commit/747aef9)) -- readme: update links ([f8187f1](https://github.com/webpack/webpack-cli/commit/f8187f1)) -- readme: update README.md ([#614](https://github.com/webpack/webpack-cli/pull/614)) -- readme: update Readme based on feedback ([da05c2f](https://github.com/webpack/webpack-cli/commit/da05c2f)) +- init: update headers ([dc4ded9](https://github.com/webpack/webpack-cli/commit/dc4ded9)) +- init: update init documentation ([2ccf9a9](https://github.com/webpack/webpack-cli/commit/2ccf9a9)) +- readme: update webpack-cli to webpack CLI ([f3a225a](https://github.com/webpack/webpack-cli/commit/f3a225a)) +- readme: change addons to scaffolds ([747aef9](https://github.com/webpack/webpack-cli/commit/747aef9)) +- readme: update links ([f8187f1](https://github.com/webpack/webpack-cli/commit/f8187f1)) +- readme: update README.md ([#614](https://github.com/webpack/webpack-cli/pull/614)) +- readme: update Readme based on feedback ([da05c2f](https://github.com/webpack/webpack-cli/commit/da05c2f)) ## Fix -- tapable: fix hook options ([9aed0dc](https://github.com/webpack/webpack-cli/commit/9aed0dc)) -- replace test regex ([d4e1614](https://github.com/webpack/webpack-cli/commit/d4e1614)) +- tapable: fix hook options ([9aed0dc](https://github.com/webpack/webpack-cli/commit/9aed0dc)) +- replace test regex ([d4e1614](https://github.com/webpack/webpack-cli/commit/d4e1614)) @@ -823,32 +823,32 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## New Features -- migrate: CommonChunksPlugin to SplitChunksPlugin ([#558](https://github.com/webpack/webpack-cli/pull/558)) -- types: types for packages ([#578](https://github.com/webpack/webpack-cli/pull/578)) +- migrate: CommonChunksPlugin to SplitChunksPlugin ([#558](https://github.com/webpack/webpack-cli/pull/558)) +- types: types for packages ([#578](https://github.com/webpack/webpack-cli/pull/578)) ## CLI -- allow array value for --ouput-library ([#559](https://github.com/webpack/webpack-cli/pull/559)) +- allow array value for --ouput-library ([#559](https://github.com/webpack/webpack-cli/pull/559)) ## Docs -- fixed latest changelog link ([#556](https://github.com/webpack/webpack-cli/pull/556)) -- migrate documentaion ([#554](https://github.com/webpack/webpack-cli/pull/554)) -- init documentaion ([#547](https://github.com/webpack/webpack-cli/pull/547)) -- contribution: fix the setup workflow #591 ([#597](https://github.com/webpack/webpack-cli/pull/597)) -- typedoc: add ts docs ([#571](https://github.com/webpack/webpack-cli/pull/571)) +- fixed latest changelog link ([#556](https://github.com/webpack/webpack-cli/pull/556)) +- migrate documentaion ([#554](https://github.com/webpack/webpack-cli/pull/554)) +- init documentaion ([#547](https://github.com/webpack/webpack-cli/pull/547)) +- contribution: fix the setup workflow #591 ([#597](https://github.com/webpack/webpack-cli/pull/597)) +- typedoc: add ts docs ([#571](https://github.com/webpack/webpack-cli/pull/571)) ## Fix -- generate-loader: include example template in npm package ([d26ea82](https://github.com/webpack/webpack-cli/commit/d26ea82)) -- generate-plugin: include example template in npm package ([77fa723](https://github.com/webpack/webpack-cli/commit/77fa723)) -- package: update import-local to version 2.0.0 🚀 ([#576](https://github.com/webpack/webpack-cli/pull/576)) -- prettier: add parser, filePath ([#553](https://github.com/webpack/webpack-cli/pull/553)) -- schema: resolve references in schema ([#605](https://github.com/webpack/webpack-cli/pull/605)) +- generate-loader: include example template in npm package ([d26ea82](https://github.com/webpack/webpack-cli/commit/d26ea82)) +- generate-plugin: include example template in npm package ([77fa723](https://github.com/webpack/webpack-cli/commit/77fa723)) +- package: update import-local to version 2.0.0 🚀 ([#576](https://github.com/webpack/webpack-cli/pull/576)) +- prettier: add parser, filePath ([#553](https://github.com/webpack/webpack-cli/pull/553)) +- schema: resolve references in schema ([#605](https://github.com/webpack/webpack-cli/pull/605)) ## Misc -- Revert "cli: allow array value for --ouput-library (#559)" ([#561](https://github.com/webpack/webpack-cli/pull/561)) +- Revert "cli: allow array value for --ouput-library (#559)" ([#561](https://github.com/webpack/webpack-cli/pull/561)) @@ -858,43 +858,43 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## New Features -- generators: add typescript support ([c1844f8](https://github.com/webpack/webpack-cli/commit/c1844f8)) -- init: add typescript support ([222ccdc](https://github.com/webpack/webpack-cli/commit/222ccdc)) -- make: add typescript support ([4b574d9](https://github.com/webpack/webpack-cli/commit/4b574d9)) -- remove: add typescript support ([f1623ed](https://github.com/webpack/webpack-cli/commit/f1623ed)) -- scaffold: add typescript support ([eaf6fdf](https://github.com/webpack/webpack-cli/commit/eaf6fdf)) -- scaffold: add typescript support ([f611c27](https://github.com/webpack/webpack-cli/commit/f611c27)) -- serve: add typescript support ([d313421](https://github.com/webpack/webpack-cli/commit/d313421)) -- types: add webpack types schema ([90909e4](https://github.com/webpack/webpack-cli/commit/90909e4)) -- typescript: setup base infra ([fe25465](https://github.com/webpack/webpack-cli/commit/fe25465)) -- typescript: setup base infra ([373a304](https://github.com/webpack/webpack-cli/commit/373a304)) -- update: add typescript support ([53505b9](https://github.com/webpack/webpack-cli/commit/53505b9)) -- utils: add typescript support ([47702cb](https://github.com/webpack/webpack-cli/commit/47702cb)) +- generators: add typescript support ([c1844f8](https://github.com/webpack/webpack-cli/commit/c1844f8)) +- init: add typescript support ([222ccdc](https://github.com/webpack/webpack-cli/commit/222ccdc)) +- make: add typescript support ([4b574d9](https://github.com/webpack/webpack-cli/commit/4b574d9)) +- remove: add typescript support ([f1623ed](https://github.com/webpack/webpack-cli/commit/f1623ed)) +- scaffold: add typescript support ([eaf6fdf](https://github.com/webpack/webpack-cli/commit/eaf6fdf)) +- scaffold: add typescript support ([f611c27](https://github.com/webpack/webpack-cli/commit/f611c27)) +- serve: add typescript support ([d313421](https://github.com/webpack/webpack-cli/commit/d313421)) +- types: add webpack types schema ([90909e4](https://github.com/webpack/webpack-cli/commit/90909e4)) +- typescript: setup base infra ([fe25465](https://github.com/webpack/webpack-cli/commit/fe25465)) +- typescript: setup base infra ([373a304](https://github.com/webpack/webpack-cli/commit/373a304)) +- update: add typescript support ([53505b9](https://github.com/webpack/webpack-cli/commit/53505b9)) +- utils: add typescript support ([47702cb](https://github.com/webpack/webpack-cli/commit/47702cb)) ## Ast -- parser: remove ([7f51c27](https://github.com/webpack/webpack-cli/commit/7f51c27)) -- parser: remove ([faeec57](https://github.com/webpack/webpack-cli/commit/faeec57)) +- parser: remove ([7f51c27](https://github.com/webpack/webpack-cli/commit/7f51c27)) +- parser: remove ([faeec57](https://github.com/webpack/webpack-cli/commit/faeec57)) ## Docs -- update jsdoc ([#507](https://github.com/webpack/webpack-cli/pull/507)) -- update jsdoc ([#507](https://github.com/webpack/webpack-cli/pull/507)) -- update jsdoc ([#507](https://github.com/webpack/webpack-cli/pull/507)) -- pkg: readme file for add package ([#498](https://github.com/webpack/webpack-cli/pull/498)) -- pkg: readme info ([#497](https://github.com/webpack/webpack-cli/pull/497)) -- pkg: readme info ([#497](https://github.com/webpack/webpack-cli/pull/497)) +- update jsdoc ([#507](https://github.com/webpack/webpack-cli/pull/507)) +- update jsdoc ([#507](https://github.com/webpack/webpack-cli/pull/507)) +- update jsdoc ([#507](https://github.com/webpack/webpack-cli/pull/507)) +- pkg: readme file for add package ([#498](https://github.com/webpack/webpack-cli/pull/498)) +- pkg: readme info ([#497](https://github.com/webpack/webpack-cli/pull/497)) +- pkg: readme info ([#497](https://github.com/webpack/webpack-cli/pull/497)) ## Fix -- default named import bug ([ce956c0](https://github.com/webpack/webpack-cli/commit/ce956c0)) -- generators: named export ([8adbe9e](https://github.com/webpack/webpack-cli/commit/8adbe9e)) +- default named import bug ([ce956c0](https://github.com/webpack/webpack-cli/commit/ce956c0)) +- generators: named export ([8adbe9e](https://github.com/webpack/webpack-cli/commit/8adbe9e)) ## Misc -- Update yargs to the latest version 🚀 ([#533](https://github.com/webpack/webpack-cli/pull/533)) +- Update yargs to the latest version 🚀 ([#533](https://github.com/webpack/webpack-cli/pull/533)) - + # 0.0.8-development (2018-06-15, webpack CLI v.3) @@ -902,30 +902,30 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## Ast -- parser: add ([#456](https://github.com/webpack/webpack-cli/pull/456)) +- parser: add ([#456](https://github.com/webpack/webpack-cli/pull/456)) ## CLI -- add: re-add add command ([bf78411](https://github.com/webpack/webpack-cli/commit/bf78411)) -- color: don't use color on non-tty ([#452](https://github.com/webpack/webpack-cli/pull/452)) -- init: Better defaults ([#451](https://github.com/webpack/webpack-cli/pull/451)) -- symlinks: Fix paths ([#453](https://github.com/webpack/webpack-cli/pull/453)) +- add: re-add add command ([bf78411](https://github.com/webpack/webpack-cli/commit/bf78411)) +- color: don't use color on non-tty ([#452](https://github.com/webpack/webpack-cli/pull/452)) +- init: Better defaults ([#451](https://github.com/webpack/webpack-cli/pull/451)) +- symlinks: Fix paths ([#453](https://github.com/webpack/webpack-cli/pull/453)) ## Fix -- cli: show help flag when defaults fail ([#466](https://github.com/webpack/webpack-cli/pull/466)) -- vulnerabilities: vulnerabilities patch for v3 ([#460](https://github.com/webpack/webpack-cli/pull/460)) +- cli: show help flag when defaults fail ([#466](https://github.com/webpack/webpack-cli/pull/466)) +- vulnerabilities: vulnerabilities patch for v3 ([#460](https://github.com/webpack/webpack-cli/pull/460)) ## Tests -- cov: use regular nyc on tests ([3aa96ce](https://github.com/webpack/webpack-cli/commit/3aa96ce)) -- coverage: fix coverage ([#473](https://github.com/webpack/webpack-cli/pull/473)) -- no-options: refactor tests ([7be10d8](https://github.com/webpack/webpack-cli/commit/7be10d8)) -- parser: fix recursive-tests signature ([#470](https://github.com/webpack/webpack-cli/pull/470)) +- cov: use regular nyc on tests ([3aa96ce](https://github.com/webpack/webpack-cli/commit/3aa96ce)) +- coverage: fix coverage ([#473](https://github.com/webpack/webpack-cli/pull/473)) +- no-options: refactor tests ([7be10d8](https://github.com/webpack/webpack-cli/commit/7be10d8)) +- parser: fix recursive-tests signature ([#470](https://github.com/webpack/webpack-cli/pull/470)) ## Misc -- Added yarn lock file to gitignore ([#455](https://github.com/webpack/webpack-cli/pull/455)) +- Added yarn lock file to gitignore ([#455](https://github.com/webpack/webpack-cli/pull/455)) @@ -935,11 +935,11 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## CLI -- path: resolve better ([7fca948](https://github.com/webpack/webpack-cli/commit/7fca948)) +- path: resolve better ([7fca948](https://github.com/webpack/webpack-cli/commit/7fca948)) ## Misc -- v0.0.6 ([f544578](https://github.com/webpack/webpack-cli/commit/f544578)) +- v0.0.6 ([f544578](https://github.com/webpack/webpack-cli/commit/f544578)) @@ -949,7 +949,7 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## Misc -- v0.0.5 ([062fa28](https://github.com/webpack/webpack-cli/commit/062fa28)) +- v0.0.5 ([062fa28](https://github.com/webpack/webpack-cli/commit/062fa28)) @@ -959,9 +959,9 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## Misc -- v0.0.4 ([e29a173](https://github.com/webpack/webpack-cli/commit/e29a173)) -- v0.0.3 ([01cef3f](https://github.com/webpack/webpack-cli/commit/01cef3f)) -- v0.0.2 ([6489b10](https://github.com/webpack/webpack-cli/commit/6489b10)) +- v0.0.4 ([e29a173](https://github.com/webpack/webpack-cli/commit/e29a173)) +- v0.0.3 ([01cef3f](https://github.com/webpack/webpack-cli/commit/01cef3f)) +- v0.0.2 ([6489b10](https://github.com/webpack/webpack-cli/commit/6489b10)) @@ -971,7 +971,7 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## Misc -- v0.0.3 ([b51e66d](https://github.com/webpack/webpack-cli/commit/b51e66d)) +- v0.0.3 ([b51e66d](https://github.com/webpack/webpack-cli/commit/b51e66d)) @@ -981,7 +981,7 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## Misc -- v0.0.2 ([91be3fd](https://github.com/webpack/webpack-cli/commit/91be3fd)) +- v0.0.2 ([91be3fd](https://github.com/webpack/webpack-cli/commit/91be3fd)) @@ -991,21 +991,21 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## CLI -- pkgs: re-add entries ([b2c2bbd](https://github.com/webpack/webpack-cli/commit/b2c2bbd)) -- prompt: wip ([5f357c9](https://github.com/webpack/webpack-cli/commit/5f357c9)) -- prompt: initial comment for prompt file ([f8a71c0](https://github.com/webpack/webpack-cli/commit/f8a71c0)) +- pkgs: re-add entries ([b2c2bbd](https://github.com/webpack/webpack-cli/commit/b2c2bbd)) +- prompt: wip ([5f357c9](https://github.com/webpack/webpack-cli/commit/5f357c9)) +- prompt: initial comment for prompt file ([f8a71c0](https://github.com/webpack/webpack-cli/commit/f8a71c0)) ## Fix -- monorepo: fix versions in pacakges ([2b3035c](https://github.com/webpack/webpack-cli/commit/2b3035c)) -- monorepo: update lock files ([ca8f5c1](https://github.com/webpack/webpack-cli/commit/ca8f5c1)) -- monorepo: fix cross spawn versions ([0fcc5b3](https://github.com/webpack/webpack-cli/commit/0fcc5b3)) -- monorepo: fix lint errors ([74fb759](https://github.com/webpack/webpack-cli/commit/74fb759)) -- revert: packagejson ([3dd244b](https://github.com/webpack/webpack-cli/commit/3dd244b)) +- monorepo: fix versions in pacakges ([2b3035c](https://github.com/webpack/webpack-cli/commit/2b3035c)) +- monorepo: update lock files ([ca8f5c1](https://github.com/webpack/webpack-cli/commit/ca8f5c1)) +- monorepo: fix cross spawn versions ([0fcc5b3](https://github.com/webpack/webpack-cli/commit/0fcc5b3)) +- monorepo: fix lint errors ([74fb759](https://github.com/webpack/webpack-cli/commit/74fb759)) +- revert: packagejson ([3dd244b](https://github.com/webpack/webpack-cli/commit/3dd244b)) ## Misc -- v0.0.1 ([faae7aa](https://github.com/webpack/webpack-cli/commit/faae7aa)) +- v0.0.1 ([faae7aa](https://github.com/webpack/webpack-cli/commit/faae7aa)) @@ -1015,7 +1015,7 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## CLI -- cmds: revise yargs command ([#422](https://github.com/webpack/webpack-cli/pull/422)) +- cmds: revise yargs command ([#422](https://github.com/webpack/webpack-cli/pull/422)) @@ -1025,17 +1025,17 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## New Features -- use npm ci for tests (#367) ([#368](https://github.com/webpack/webpack-cli/pull/368)) -- add envinfo as `webpack-cli info` command ([51ab19f](https://github.com/webpack/webpack-cli/commit/51ab19f)) -- --entry should override config.entry (#155) ([#358](https://github.com/webpack/webpack-cli/pull/358)) +- use npm ci for tests (#367) ([#368](https://github.com/webpack/webpack-cli/pull/368)) +- add envinfo as `webpack-cli info` command ([51ab19f](https://github.com/webpack/webpack-cli/commit/51ab19f)) +- --entry should override config.entry (#155) ([#358](https://github.com/webpack/webpack-cli/pull/358)) ## CLI -- refactor: improve folder structure ([#371](https://github.com/webpack/webpack-cli/pull/371)) +- refactor: improve folder structure ([#371](https://github.com/webpack/webpack-cli/pull/371)) ## Fix -- loader,plugin: fix generators path bug ([b4bfafb](https://github.com/webpack/webpack-cli/commit/b4bfafb)) +- loader,plugin: fix generators path bug ([b4bfafb](https://github.com/webpack/webpack-cli/commit/b4bfafb)) @@ -1045,7 +1045,7 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## CLI -- init: add webpack-cli dep ([#347](https://github.com/webpack/webpack-cli/pull/347)) +- init: add webpack-cli dep ([#347](https://github.com/webpack/webpack-cli/pull/347)) @@ -1055,17 +1055,17 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## New Features -- support --build-delimiter for opt-in output delimiter (#192) ([#340](https://github.com/webpack/webpack-cli/pull/340)) +- support --build-delimiter for opt-in output delimiter (#192) ([#340](https://github.com/webpack/webpack-cli/pull/340)) ## Fix -- removes debug in migrate ([#342](https://github.com/webpack/webpack-cli/pull/342)) +- removes debug in migrate ([#342](https://github.com/webpack/webpack-cli/pull/342)) ## Misc -- cz: fix type description ([#339](https://github.com/webpack/webpack-cli/pull/339)) -- init: fix global-modules require statement in package-manager ([610aa02](https://github.com/webpack/webpack-cli/commit/610aa02)) -- init-generator: cleanup ([b8c3145](https://github.com/webpack/webpack-cli/commit/b8c3145)) +- cz: fix type description ([#339](https://github.com/webpack/webpack-cli/pull/339)) +- init: fix global-modules require statement in package-manager ([610aa02](https://github.com/webpack/webpack-cli/commit/610aa02)) +- init-generator: cleanup ([b8c3145](https://github.com/webpack/webpack-cli/commit/b8c3145)) @@ -1075,24 +1075,24 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## CLI -- init: Refactor Yeoman ([#323](https://github.com/webpack/webpack-cli/pull/323)) -- tapable: Remove Tapable#apply calls ([#305](https://github.com/webpack/webpack-cli/pull/305)) +- init: Refactor Yeoman ([#323](https://github.com/webpack/webpack-cli/pull/323)) +- tapable: Remove Tapable#apply calls ([#305](https://github.com/webpack/webpack-cli/pull/305)) ## Docs -- update README to remove inconsistent CLI messaging (#327) ([#328](https://github.com/webpack/webpack-cli/pull/328)) +- update README to remove inconsistent CLI messaging (#327) ([#328](https://github.com/webpack/webpack-cli/pull/328)) ## Fix -- migrate: move options to use ([#308](https://github.com/webpack/webpack-cli/pull/308)) -- adding 'fix' to whitelist ([10a00df](https://github.com/webpack/webpack-cli/commit/10a00df)) +- migrate: move options to use ([#308](https://github.com/webpack/webpack-cli/pull/308)) +- adding 'fix' to whitelist ([10a00df](https://github.com/webpack/webpack-cli/commit/10a00df)) ## Misc -- deps: clean up dependencies ([7078282](https://github.com/webpack/webpack-cli/commit/7078282)) -- generator: Allow local paths to generators ([#265](https://github.com/webpack/webpack-cli/pull/265)) -- grammar: revise spelling and incorrect syntax ([#293](https://github.com/webpack/webpack-cli/pull/293)) -- readme: add npm badge ([#303](https://github.com/webpack/webpack-cli/pull/303)) +- deps: clean up dependencies ([7078282](https://github.com/webpack/webpack-cli/commit/7078282)) +- generator: Allow local paths to generators ([#265](https://github.com/webpack/webpack-cli/pull/265)) +- grammar: revise spelling and incorrect syntax ([#293](https://github.com/webpack/webpack-cli/pull/293)) +- readme: add npm badge ([#303](https://github.com/webpack/webpack-cli/pull/303)) @@ -1102,59 +1102,59 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## New Features -- show help when no options given ([a7ee15a](https://github.com/webpack/webpack-cli/commit/a7ee15a)) -- chore: add project tools and utilities ([#270](https://github.com/webpack/webpack-cli/pull/270)) +- show help when no options given ([a7ee15a](https://github.com/webpack/webpack-cli/commit/a7ee15a)) +- chore: add project tools and utilities ([#270](https://github.com/webpack/webpack-cli/pull/270)) ## Ast -- init: fix init command ([d36cd4f](https://github.com/webpack/webpack-cli/commit/d36cd4f)) +- init: fix init command ([d36cd4f](https://github.com/webpack/webpack-cli/commit/d36cd4f)) ## CLI -- devServer: change devServer path ([c27e961](https://github.com/webpack/webpack-cli/commit/c27e961)) -- version: v.2.0.8 ([9406912](https://github.com/webpack/webpack-cli/commit/9406912)) +- devServer: change devServer path ([c27e961](https://github.com/webpack/webpack-cli/commit/c27e961)) +- version: v.2.0.8 ([9406912](https://github.com/webpack/webpack-cli/commit/9406912)) ## Fix -- generator: use yeoman clone ([0b4269c](https://github.com/webpack/webpack-cli/commit/0b4269c)) -- yeoman-generator fork issue ([#294](https://github.com/webpack/webpack-cli/pull/294)) -- Resolve webpack dependencies ([#251](https://github.com/webpack/webpack-cli/pull/251)) -- change help logic ([d67f4b7](https://github.com/webpack/webpack-cli/commit/d67f4b7)) +- generator: use yeoman clone ([0b4269c](https://github.com/webpack/webpack-cli/commit/0b4269c)) +- yeoman-generator fork issue ([#294](https://github.com/webpack/webpack-cli/pull/294)) +- Resolve webpack dependencies ([#251](https://github.com/webpack/webpack-cli/pull/251)) +- change help logic ([d67f4b7](https://github.com/webpack/webpack-cli/commit/d67f4b7)) ## Improvement -- add an option to watch messaging. Add .idea to .gitignore ([#200](https://github.com/webpack/webpack-cli/pull/200)) +- add an option to watch messaging. Add .idea to .gitignore ([#200](https://github.com/webpack/webpack-cli/pull/200)) ## Refactor -- convert-args: remove unused arguments ([#253](https://github.com/webpack/webpack-cli/pull/253)) +- convert-args: remove unused arguments ([#253](https://github.com/webpack/webpack-cli/pull/253)) ## Style -- run formatter ([7be0da7](https://github.com/webpack/webpack-cli/commit/7be0da7)) +- run formatter ([7be0da7](https://github.com/webpack/webpack-cli/commit/7be0da7)) ## Misc -- refactor: reduce code duplication use process.exitCode instead of process.exit ([#272](https://github.com/webpack/webpack-cli/pull/272)) -- [feature] configuration validation ([#240](https://github.com/webpack/webpack-cli/pull/240)) -- Commitlint ([#300](https://github.com/webpack/webpack-cli/pull/300)) -- Change from git:// to https:// ([#259](https://github.com/webpack/webpack-cli/pull/259)) -- Add jsdoc comments for migrate ([#255](https://github.com/webpack/webpack-cli/pull/255)) -- strict Promise configuration validation ([#298](https://github.com/webpack/webpack-cli/pull/298)) -- Refactor bin directory ([#263](https://github.com/webpack/webpack-cli/pull/263)) -- Issue 249 fixed and other enums refactored ([#264](https://github.com/webpack/webpack-cli/pull/264)) -- remove yargs major update due security compromise ([9bd7ed4](https://github.com/webpack/webpack-cli/commit/9bd7ed4)) -- Revert "Show help on no command" ([#276](https://github.com/webpack/webpack-cli/pull/276)) -- 2.0.5 ([94ac6db](https://github.com/webpack/webpack-cli/commit/94ac6db)) -- v.2.0.6 ([4333088](https://github.com/webpack/webpack-cli/commit/4333088)) -- fix typo.. ([0f1cee6](https://github.com/webpack/webpack-cli/commit/0f1cee6)) -- binTestCases: remove obsolete snapshot ([42301d7](https://github.com/webpack/webpack-cli/commit/42301d7)) -- dep: add webpack 4 as peer dependency ([#297](https://github.com/webpack/webpack-cli/pull/297)) -- migrate: prettify output ([#281](https://github.com/webpack/webpack-cli/pull/281)) -- revert: revert supports-color usage ([f8e819a](https://github.com/webpack/webpack-cli/commit/f8e819a)) -- revert: revert supports-color usage ([75f706b](https://github.com/webpack/webpack-cli/commit/75f706b)) -- syntax: prettify ([5cb146f](https://github.com/webpack/webpack-cli/commit/5cb146f)) -- yargs: add description for module-bind-\* args ([#286](https://github.com/webpack/webpack-cli/pull/286)) +- refactor: reduce code duplication use process.exitCode instead of process.exit ([#272](https://github.com/webpack/webpack-cli/pull/272)) +- [feature] configuration validation ([#240](https://github.com/webpack/webpack-cli/pull/240)) +- Commitlint ([#300](https://github.com/webpack/webpack-cli/pull/300)) +- Change from git:// to https:// ([#259](https://github.com/webpack/webpack-cli/pull/259)) +- Add jsdoc comments for migrate ([#255](https://github.com/webpack/webpack-cli/pull/255)) +- strict Promise configuration validation ([#298](https://github.com/webpack/webpack-cli/pull/298)) +- Refactor bin directory ([#263](https://github.com/webpack/webpack-cli/pull/263)) +- Issue 249 fixed and other enums refactored ([#264](https://github.com/webpack/webpack-cli/pull/264)) +- remove yargs major update due security compromise ([9bd7ed4](https://github.com/webpack/webpack-cli/commit/9bd7ed4)) +- Revert "Show help on no command" ([#276](https://github.com/webpack/webpack-cli/pull/276)) +- 2.0.5 ([94ac6db](https://github.com/webpack/webpack-cli/commit/94ac6db)) +- v.2.0.6 ([4333088](https://github.com/webpack/webpack-cli/commit/4333088)) +- fix typo.. ([0f1cee6](https://github.com/webpack/webpack-cli/commit/0f1cee6)) +- binTestCases: remove obsolete snapshot ([42301d7](https://github.com/webpack/webpack-cli/commit/42301d7)) +- dep: add webpack 4 as peer dependency ([#297](https://github.com/webpack/webpack-cli/pull/297)) +- migrate: prettify output ([#281](https://github.com/webpack/webpack-cli/pull/281)) +- revert: revert supports-color usage ([f8e819a](https://github.com/webpack/webpack-cli/commit/f8e819a)) +- revert: revert supports-color usage ([75f706b](https://github.com/webpack/webpack-cli/commit/75f706b)) +- syntax: prettify ([5cb146f](https://github.com/webpack/webpack-cli/commit/5cb146f)) +- yargs: add description for module-bind-\* args ([#286](https://github.com/webpack/webpack-cli/pull/286)) @@ -1164,49 +1164,49 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## Ast -- init: fix init command ([d36cd4f](https://github.com/webpack/webpack-cli/commit/d36cd4f)) +- init: fix init command ([d36cd4f](https://github.com/webpack/webpack-cli/commit/d36cd4f)) ## CLI -- devServer: change devServer path ([c27e961](https://github.com/webpack/webpack-cli/commit/c27e961)) -- version: v.2.0.8 ([9406912](https://github.com/webpack/webpack-cli/commit/9406912)) +- devServer: change devServer path ([c27e961](https://github.com/webpack/webpack-cli/commit/c27e961)) +- version: v.2.0.8 ([9406912](https://github.com/webpack/webpack-cli/commit/9406912)) ## Feat -- show help when no options given ([a7ee15a](https://github.com/webpack/webpack-cli/commit/a7ee15a)) -- chore: add project tools and utilities ([#270](https://github.com/webpack/webpack-cli/pull/270)) +- show help when no options given ([a7ee15a](https://github.com/webpack/webpack-cli/commit/a7ee15a)) +- chore: add project tools and utilities ([#270](https://github.com/webpack/webpack-cli/pull/270)) ## Fix -- Resolve webpack dependencies ([#251](https://github.com/webpack/webpack-cli/pull/251)) -- change help logic ([d67f4b7](https://github.com/webpack/webpack-cli/commit/d67f4b7)) -- generator: use yeoman clone ([0b4269c](https://github.com/webpack/webpack-cli/commit/0b4269c)) +- Resolve webpack dependencies ([#251](https://github.com/webpack/webpack-cli/pull/251)) +- change help logic ([d67f4b7](https://github.com/webpack/webpack-cli/commit/d67f4b7)) +- generator: use yeoman clone ([0b4269c](https://github.com/webpack/webpack-cli/commit/0b4269c)) ## Improvement -- add an option to watch messaging. Add .idea to .gitignore ([#200](https://github.com/webpack/webpack-cli/pull/200)) +- add an option to watch messaging. Add .idea to .gitignore ([#200](https://github.com/webpack/webpack-cli/pull/200)) ## Refactor -- convert-args: remove unused arguments ([#253](https://github.com/webpack/webpack-cli/pull/253)) +- convert-args: remove unused arguments ([#253](https://github.com/webpack/webpack-cli/pull/253)) ## Style -- run formatter ([7be0da7](https://github.com/webpack/webpack-cli/commit/7be0da7)) +- run formatter ([7be0da7](https://github.com/webpack/webpack-cli/commit/7be0da7)) ## Misc -- remove yargs major update due security compromise ([9bd7ed4](https://github.com/webpack/webpack-cli/commit/9bd7ed4)) -- Revert "Show help on no command" ([#276](https://github.com/webpack/webpack-cli/pull/276)) -- v.2.0.6 ([4333088](https://github.com/webpack/webpack-cli/commit/4333088)) -- fix typo.. ([0f1cee6](https://github.com/webpack/webpack-cli/commit/0f1cee6)) -- 2.0.5 ([94ac6db](https://github.com/webpack/webpack-cli/commit/94ac6db)) -- Change from git:// to https:// ([#259](https://github.com/webpack/webpack-cli/pull/259)) -- Issue 249 fixed and other enums refactored ([#264](https://github.com/webpack/webpack-cli/pull/264)) -- Refactor bin directory ([#263](https://github.com/webpack/webpack-cli/pull/263)) -- Add jsdoc comments for migrate ([#255](https://github.com/webpack/webpack-cli/pull/255)) -- [feature] configuration validation ([#240](https://github.com/webpack/webpack-cli/pull/240)) -- refactor: reduce code duplication use process.exitCode instead of process.exit ([#272](https://github.com/webpack/webpack-cli/pull/272)) +- remove yargs major update due security compromise ([9bd7ed4](https://github.com/webpack/webpack-cli/commit/9bd7ed4)) +- Revert "Show help on no command" ([#276](https://github.com/webpack/webpack-cli/pull/276)) +- v.2.0.6 ([4333088](https://github.com/webpack/webpack-cli/commit/4333088)) +- fix typo.. ([0f1cee6](https://github.com/webpack/webpack-cli/commit/0f1cee6)) +- 2.0.5 ([94ac6db](https://github.com/webpack/webpack-cli/commit/94ac6db)) +- Change from git:// to https:// ([#259](https://github.com/webpack/webpack-cli/pull/259)) +- Issue 249 fixed and other enums refactored ([#264](https://github.com/webpack/webpack-cli/pull/264)) +- Refactor bin directory ([#263](https://github.com/webpack/webpack-cli/pull/263)) +- Add jsdoc comments for migrate ([#255](https://github.com/webpack/webpack-cli/pull/255)) +- [feature] configuration validation ([#240](https://github.com/webpack/webpack-cli/pull/240)) +- refactor: reduce code duplication use process.exitCode instead of process.exit ([#272](https://github.com/webpack/webpack-cli/pull/272)) @@ -1216,39 +1216,39 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## Feat -- show help when no options given ([a7ee15a](https://github.com/webpack/webpack-cli/commit/a7ee15a)) -- chore: add project tools and utilities ([#270](https://github.com/webpack/webpack-cli/pull/270)) +- show help when no options given ([a7ee15a](https://github.com/webpack/webpack-cli/commit/a7ee15a)) +- chore: add project tools and utilities ([#270](https://github.com/webpack/webpack-cli/pull/270)) ## Fix -- Resolve webpack dependencies ([#251](https://github.com/webpack/webpack-cli/pull/251)) -- change help logic ([d67f4b7](https://github.com/webpack/webpack-cli/commit/d67f4b7)) +- Resolve webpack dependencies ([#251](https://github.com/webpack/webpack-cli/pull/251)) +- change help logic ([d67f4b7](https://github.com/webpack/webpack-cli/commit/d67f4b7)) ## Improvement -- add an option to watch messaging. Add .idea to .gitignore ([#200](https://github.com/webpack/webpack-cli/pull/200)) +- add an option to watch messaging. Add .idea to .gitignore ([#200](https://github.com/webpack/webpack-cli/pull/200)) ## Refactor -- convert-args: remove unused arguments ([#253](https://github.com/webpack/webpack-cli/pull/253)) +- convert-args: remove unused arguments ([#253](https://github.com/webpack/webpack-cli/pull/253)) ## Style -- run formatter ([7be0da7](https://github.com/webpack/webpack-cli/commit/7be0da7)) +- run formatter ([7be0da7](https://github.com/webpack/webpack-cli/commit/7be0da7)) ## Misc -- remove yargs major update due security compromise ([9bd7ed4](https://github.com/webpack/webpack-cli/commit/9bd7ed4)) -- Revert "Show help on no command" ([#276](https://github.com/webpack/webpack-cli/pull/276)) -- v.2.0.6 ([4333088](https://github.com/webpack/webpack-cli/commit/4333088)) -- fix typo.. ([0f1cee6](https://github.com/webpack/webpack-cli/commit/0f1cee6)) -- 2.0.5 ([94ac6db](https://github.com/webpack/webpack-cli/commit/94ac6db)) -- Change from git:// to https:// ([#259](https://github.com/webpack/webpack-cli/pull/259)) -- Issue 249 fixed and other enums refactored ([#264](https://github.com/webpack/webpack-cli/pull/264)) -- Refactor bin directory ([#263](https://github.com/webpack/webpack-cli/pull/263)) -- Add jsdoc comments for migrate ([#255](https://github.com/webpack/webpack-cli/pull/255)) -- [feature] configuration validation ([#240](https://github.com/webpack/webpack-cli/pull/240)) -- refactor: reduce code duplication use process.exitCode instead of process.exit ([#272](https://github.com/webpack/webpack-cli/pull/272)) +- remove yargs major update due security compromise ([9bd7ed4](https://github.com/webpack/webpack-cli/commit/9bd7ed4)) +- Revert "Show help on no command" ([#276](https://github.com/webpack/webpack-cli/pull/276)) +- v.2.0.6 ([4333088](https://github.com/webpack/webpack-cli/commit/4333088)) +- fix typo.. ([0f1cee6](https://github.com/webpack/webpack-cli/commit/0f1cee6)) +- 2.0.5 ([94ac6db](https://github.com/webpack/webpack-cli/commit/94ac6db)) +- Change from git:// to https:// ([#259](https://github.com/webpack/webpack-cli/pull/259)) +- Issue 249 fixed and other enums refactored ([#264](https://github.com/webpack/webpack-cli/pull/264)) +- Refactor bin directory ([#263](https://github.com/webpack/webpack-cli/pull/263)) +- Add jsdoc comments for migrate ([#255](https://github.com/webpack/webpack-cli/pull/255)) +- [feature] configuration validation ([#240](https://github.com/webpack/webpack-cli/pull/240)) +- refactor: reduce code duplication use process.exitCode instead of process.exit ([#272](https://github.com/webpack/webpack-cli/pull/272)) @@ -1258,81 +1258,81 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ## Feat -- show help when no options given ([a7ee15a](https://github.com/webpack/webpack-cli/commit/a7ee15a)) +- show help when no options given ([a7ee15a](https://github.com/webpack/webpack-cli/commit/a7ee15a)) ## Fix -- Resolve webpack dependencies ([#251](https://github.com/webpack/webpack-cli/pull/251)) -- change help logic ([d67f4b7](https://github.com/webpack/webpack-cli/commit/d67f4b7)) +- Resolve webpack dependencies ([#251](https://github.com/webpack/webpack-cli/pull/251)) +- change help logic ([d67f4b7](https://github.com/webpack/webpack-cli/commit/d67f4b7)) ## Improvement -- add an option to watch messaging. Add .idea to .gitignore ([#200](https://github.com/webpack/webpack-cli/pull/200)) +- add an option to watch messaging. Add .idea to .gitignore ([#200](https://github.com/webpack/webpack-cli/pull/200)) ## Refactor -- convert-args: remove unused arguments ([#253](https://github.com/webpack/webpack-cli/pull/253)) +- convert-args: remove unused arguments ([#253](https://github.com/webpack/webpack-cli/pull/253)) ## Style -- run formatter ([7be0da7](https://github.com/webpack/webpack-cli/commit/7be0da7)) +- run formatter ([7be0da7](https://github.com/webpack/webpack-cli/commit/7be0da7)) ## Misc -- remove yargs major update due security compromise ([9bd7ed4](https://github.com/webpack/webpack-cli/commit/9bd7ed4)) -- [feature] configuration validation ([#240](https://github.com/webpack/webpack-cli/pull/240)) -- v.2.0.6 ([4333088](https://github.com/webpack/webpack-cli/commit/4333088)) -- fix typo.. ([0f1cee6](https://github.com/webpack/webpack-cli/commit/0f1cee6)) -- 2.0.5 ([94ac6db](https://github.com/webpack/webpack-cli/commit/94ac6db)) -- Change from git:// to https:// ([#259](https://github.com/webpack/webpack-cli/pull/259)) -- Issue 249 fixed and other enums refactored ([#264](https://github.com/webpack/webpack-cli/pull/264)) -- Refactor bin directory ([#263](https://github.com/webpack/webpack-cli/pull/263)) -- Add jsdoc comments for migrate ([#255](https://github.com/webpack/webpack-cli/pull/255)) -- add commitlinting: adds commit linting to the cli ([7e4dd3d](https://github.com/webpack/webpack-cli/commit/7e4dd3d)) -- add eslint ignore items: adds build folder and commit linter to ignore ([a400809](https://github.com/webpack/webpack-cli/commit/a400809)) +- remove yargs major update due security compromise ([9bd7ed4](https://github.com/webpack/webpack-cli/commit/9bd7ed4)) +- [feature] configuration validation ([#240](https://github.com/webpack/webpack-cli/pull/240)) +- v.2.0.6 ([4333088](https://github.com/webpack/webpack-cli/commit/4333088)) +- fix typo.. ([0f1cee6](https://github.com/webpack/webpack-cli/commit/0f1cee6)) +- 2.0.5 ([94ac6db](https://github.com/webpack/webpack-cli/commit/94ac6db)) +- Change from git:// to https:// ([#259](https://github.com/webpack/webpack-cli/pull/259)) +- Issue 249 fixed and other enums refactored ([#264](https://github.com/webpack/webpack-cli/pull/264)) +- Refactor bin directory ([#263](https://github.com/webpack/webpack-cli/pull/263)) +- Add jsdoc comments for migrate ([#255](https://github.com/webpack/webpack-cli/pull/255)) +- add commitlinting: adds commit linting to the cli ([7e4dd3d](https://github.com/webpack/webpack-cli/commit/7e4dd3d)) +- add eslint ignore items: adds build folder and commit linter to ignore ([a400809](https://github.com/webpack/webpack-cli/commit/a400809)) ## 2.0.0 (2017-12-21) -- Adds add -- Remove some mocks -- Remove validationschema and ajv dependencies -- Update Jest & Jest-cli -- Remove unused dependencies -- Creator is now init -- Using env preset ([#197](https://github.com/webpack/webpack-cli/pull/197)) -- Using Yarn ([#203](https://github.com/webpack/webpack-cli/pull/203)) -- Using peer dep of webpack -- Transformations is now migrate -- Init has its own generator -- Commands are refactored into a HOC and sent to a folder for each command with an helper for scaffolding aliases -- Using RawList instead of List for better usability ([82c64db](https://github.com/webpack/webpack-cli/commit/541ba62f02c4a1fcc807eac62a551fcae3f2d2c3)) -- lib/transformations/util is now in lib/utils/ast-utils -- Each AST module now has an extra argument that specifies action to be done -- FindPluginsByRoot is now FindRootByName and more generalistic -- Added ast util function createEmptyCallableFunctionWithArguments -- Refactor for readability ([#214](https://github.com/webpack/webpack-cli/pull/214)) -- Remove dist from repo ([#215](https://github.com/webpack/webpack-cli/pull/215)) -- Remove entry and output validation ([#217](https://github.com/webpack/webpack-cli/pull/217)) -- topScope now checks if the import already is present -- Updated test errors/issue-5576, remember to sync with webpack/next -- User friendly startup message ([#218](https://github.com/webpack/webpack-cli/pull/218)) -- Migrate now uses prettier ([88aaaa2](https://github.com/webpack/webpack-cli/commit/972d4cd90061644aa2f4aaac33d2d80cb4a56d57) -- Added transform for mode ([972d4cd](https://github.com/webpack/webpack-cli/commit/e1f512c9bb96694dd623562dc4cef411ed004c2c) -- Remove recast fork ([fba04da](https://github.com/webpack/webpack-cli/commit/b416d9c50138ef343b8bac6e3f66fdd5b917857d)) -- New transforms ([b416d9c](https://github.com/webpack/webpack-cli/commit/28680c944dca0860ca59a38910840a641b418d18)) -- JSdocs are added ([47de46a](https://github.com/webpack/webpack-cli/commit/285846a4cb1f976edcdb36629cf247d8017ff956)) -- Added serve alias ([#204](https://github.com/webpack/webpack-cli/pull/204)) -- Migrate has new validate logic ([c4c68e8](https://github.com/webpack/webpack-cli/commit/5d4430a6a5531cd8084e5a591f7884e746e21b2f)) -- webpack serve logic ([5d4430a](https://github.com/webpack/webpack-cli/commit/992bfe2b08b98aebb43c68d5e5a92320ba3e32a8)) -- webpack --config-register and webpack -r is added ([1f24d19](https://github.com/webpack/webpack-cli/commit/ab9421136887b7e9e10f25a39b59fb32f07b5037)) -- work on makefile generation ([d86e1ce](https://github.com/webpack/webpack-cli/commit/4f9a4f88a8bd113762a54c05b3b9fe6f459855db)) -- Appveyor is added ([9b2f6f5](https://github.com/webpack/webpack-cli/commit/c5c97462d6ccfa4c02fd79206fa075815520cd88)) -- Remove commit-validate from docs ([#222](https://github.com/webpack/webpack-cli/pull/222)) -- Added transform ResolveLoader ([7c713ce](https://github.com/webpack/webpack-cli/commit/3c90e83fa7b8dd5fbecaee5d1b9d8f0279600096)) -- Using v8-compile-cache ([7e57314](https://github.com/webpack/webpack-cli/commit/0564ceb77a995239d0be7a022b948cbd727773a4)) -- Adds webpack-cli bot ([#224](https://github.com/webpack/webpack-cli/pull/224)) +- Adds add +- Remove some mocks +- Remove validationschema and ajv dependencies +- Update Jest & Jest-cli +- Remove unused dependencies +- Creator is now init +- Using env preset ([#197](https://github.com/webpack/webpack-cli/pull/197)) +- Using Yarn ([#203](https://github.com/webpack/webpack-cli/pull/203)) +- Using peer dep of webpack +- Transformations is now migrate +- Init has its own generator +- Commands are refactored into a HOC and sent to a folder for each command with an helper for scaffolding aliases +- Using RawList instead of List for better usability ([82c64db](https://github.com/webpack/webpack-cli/commit/541ba62f02c4a1fcc807eac62a551fcae3f2d2c3)) +- lib/transformations/util is now in lib/utils/ast-utils +- Each AST module now has an extra argument that specifies action to be done +- FindPluginsByRoot is now FindRootByName and more generalistic +- Added ast util function createEmptyCallableFunctionWithArguments +- Refactor for readability ([#214](https://github.com/webpack/webpack-cli/pull/214)) +- Remove dist from repo ([#215](https://github.com/webpack/webpack-cli/pull/215)) +- Remove entry and output validation ([#217](https://github.com/webpack/webpack-cli/pull/217)) +- topScope now checks if the import already is present +- Updated test errors/issue-5576, remember to sync with webpack/next +- User friendly startup message ([#218](https://github.com/webpack/webpack-cli/pull/218)) +- Migrate now uses prettier ([88aaaa2](https://github.com/webpack/webpack-cli/commit/972d4cd90061644aa2f4aaac33d2d80cb4a56d57) +- Added transform for mode ([972d4cd](https://github.com/webpack/webpack-cli/commit/e1f512c9bb96694dd623562dc4cef411ed004c2c) +- Remove recast fork ([fba04da](https://github.com/webpack/webpack-cli/commit/b416d9c50138ef343b8bac6e3f66fdd5b917857d)) +- New transforms ([b416d9c](https://github.com/webpack/webpack-cli/commit/28680c944dca0860ca59a38910840a641b418d18)) +- JSdocs are added ([47de46a](https://github.com/webpack/webpack-cli/commit/285846a4cb1f976edcdb36629cf247d8017ff956)) +- Added serve alias ([#204](https://github.com/webpack/webpack-cli/pull/204)) +- Migrate has new validate logic ([c4c68e8](https://github.com/webpack/webpack-cli/commit/5d4430a6a5531cd8084e5a591f7884e746e21b2f)) +- webpack serve logic ([5d4430a](https://github.com/webpack/webpack-cli/commit/992bfe2b08b98aebb43c68d5e5a92320ba3e32a8)) +- webpack --config-register and webpack -r is added ([1f24d19](https://github.com/webpack/webpack-cli/commit/ab9421136887b7e9e10f25a39b59fb32f07b5037)) +- work on makefile generation ([d86e1ce](https://github.com/webpack/webpack-cli/commit/4f9a4f88a8bd113762a54c05b3b9fe6f459855db)) +- Appveyor is added ([9b2f6f5](https://github.com/webpack/webpack-cli/commit/c5c97462d6ccfa4c02fd79206fa075815520cd88)) +- Remove commit-validate from docs ([#222](https://github.com/webpack/webpack-cli/pull/222)) +- Added transform ResolveLoader ([7c713ce](https://github.com/webpack/webpack-cli/commit/3c90e83fa7b8dd5fbecaee5d1b9d8f0279600096)) +- Using v8-compile-cache ([7e57314](https://github.com/webpack/webpack-cli/commit/0564ceb77a995239d0be7a022b948cbd727773a4)) +- Adds webpack-cli bot ([#224](https://github.com/webpack/webpack-cli/pull/224)) @@ -1340,10 +1340,10 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ### Bug Fixes -- add css-loader appropriately ([#141](https://github.com/webpack/webpack-cli/issues/141)) ([a71600e](https://github.com/webpack/webpack-cli/commit/a71600e)) -- Deps 'webpack' and 'uglifyjs-webpack-plugin' not installed when user answers yes to 'using ES2015' ([#135](https://github.com/webpack/webpack-cli/issues/135)). ([#136](https://github.com/webpack/webpack-cli/issues/136)) ([524f035](https://github.com/webpack/webpack-cli/commit/524f035)) -- Install correct (`es2015`) babel preset to match generated config ([#138](https://github.com/webpack/webpack-cli/issues/138)) ([b0af53f](https://github.com/webpack/webpack-cli/commit/b0af53f)) -- use correct test function ([#129](https://github.com/webpack/webpack-cli/issues/129)) ([3464d9e](https://github.com/webpack/webpack-cli/commit/3464d9e)) +- add css-loader appropriately ([#141](https://github.com/webpack/webpack-cli/issues/141)) ([a71600e](https://github.com/webpack/webpack-cli/commit/a71600e)) +- Deps 'webpack' and 'uglifyjs-webpack-plugin' not installed when user answers yes to 'using ES2015' ([#135](https://github.com/webpack/webpack-cli/issues/135)). ([#136](https://github.com/webpack/webpack-cli/issues/136)) ([524f035](https://github.com/webpack/webpack-cli/commit/524f035)) +- Install correct (`es2015`) babel preset to match generated config ([#138](https://github.com/webpack/webpack-cli/issues/138)) ([b0af53f](https://github.com/webpack/webpack-cli/commit/b0af53f)) +- use correct test function ([#129](https://github.com/webpack/webpack-cli/issues/129)) ([3464d9e](https://github.com/webpack/webpack-cli/commit/3464d9e)) @@ -1351,22 +1351,22 @@ Now (you can remove the `cross-env` if you don't use it somewhere else): ### Bug Fixes -- add safe traverse to loaderoptionsplugin ([#77](https://github.com/webpack/webpack-cli/issues/77)) ([4020043](https://github.com/webpack/webpack-cli/commit/4020043)) -- Do not create LoaderOptionsPlugin if loaderOptions is empty ([#72](https://github.com/webpack/webpack-cli/issues/72)) ([b9d22c9](https://github.com/webpack/webpack-cli/commit/b9d22c9)) - ([68a2dfd](https://github.com/webpack/webpack-cli/commit/68a2dfd)) -- Upgrade to Jest 19 ([#71](https://github.com/webpack/webpack-cli/issues/71)) ([fe62523](https://github.com/webpack/webpack-cli/commit/fe62523)) -- Use `safeTraverse` where appropriate ([#94](https://github.com/webpack/webpack-cli/issues/94)) ([dcde2b6](https://github.com/webpack/webpack-cli/commit/dcde2b6)) - ([3464d9e](https://github.com/webpack/webpack-cli/commit/3464d9e)) -- Use real paths from argvs instead of dummy hard-coded file ([#65](https://github.com/webpack/webpack-cli/issues/65)) ([a46edbb](https://github.com/webpack/webpack-cli/commit/a46edbb)) +- add safe traverse to loaderoptionsplugin ([#77](https://github.com/webpack/webpack-cli/issues/77)) ([4020043](https://github.com/webpack/webpack-cli/commit/4020043)) +- Do not create LoaderOptionsPlugin if loaderOptions is empty ([#72](https://github.com/webpack/webpack-cli/issues/72)) ([b9d22c9](https://github.com/webpack/webpack-cli/commit/b9d22c9)) + ([68a2dfd](https://github.com/webpack/webpack-cli/commit/68a2dfd)) +- Upgrade to Jest 19 ([#71](https://github.com/webpack/webpack-cli/issues/71)) ([fe62523](https://github.com/webpack/webpack-cli/commit/fe62523)) +- Use `safeTraverse` where appropriate ([#94](https://github.com/webpack/webpack-cli/issues/94)) ([dcde2b6](https://github.com/webpack/webpack-cli/commit/dcde2b6)) + ([3464d9e](https://github.com/webpack/webpack-cli/commit/3464d9e)) +- Use real paths from argvs instead of dummy hard-coded file ([#65](https://github.com/webpack/webpack-cli/issues/65)) ([a46edbb](https://github.com/webpack/webpack-cli/commit/a46edbb)) ### Features -- Add beautifier config for JS code ([64c88ea](https://github.com/webpack/webpack-cli/commit/64c88ea)) -- Add commit validation and commits template ([d0cbfc0](https://github.com/webpack/webpack-cli/commit/d0cbfc0)) -- Add editorconfig settings from core webpack ([89809de](https://github.com/webpack/webpack-cli/commit/89809de)) -- Add yarn settings to handle dependencies ([34579c7](https://github.com/webpack/webpack-cli/commit/34579c7)) -- Adds a resolved path for output ([#80](https://github.com/webpack/webpack-cli/issues/80)) ([37a594d](https://github.com/webpack/webpack-cli/commit/37a594d)) -- Introduce reserve and timestamps ([#24](https://github.com/webpack/webpack-cli/issues/24)) ([ed267b4](https://github.com/webpack/webpack-cli/commit/ed267b4)) -- Webpack-CLI version 1([#105](https://github.com/webpack/webpack-cli/pull/105)) -- Feature: Use listr to display progress and errors for transformations([#92](https://github.com/webpack/webpack-cli/pull/92)) -- Feature: Jscodeshift Transformations for --migrate ([#40](https://github.com/webpack/webpack-cli/pull/40)) +- Add beautifier config for JS code ([64c88ea](https://github.com/webpack/webpack-cli/commit/64c88ea)) +- Add commit validation and commits template ([d0cbfc0](https://github.com/webpack/webpack-cli/commit/d0cbfc0)) +- Add editorconfig settings from core webpack ([89809de](https://github.com/webpack/webpack-cli/commit/89809de)) +- Add yarn settings to handle dependencies ([34579c7](https://github.com/webpack/webpack-cli/commit/34579c7)) +- Adds a resolved path for output ([#80](https://github.com/webpack/webpack-cli/issues/80)) ([37a594d](https://github.com/webpack/webpack-cli/commit/37a594d)) +- Introduce reserve and timestamps ([#24](https://github.com/webpack/webpack-cli/issues/24)) ([ed267b4](https://github.com/webpack/webpack-cli/commit/ed267b4)) +- Webpack-CLI version 1([#105](https://github.com/webpack/webpack-cli/pull/105)) +- Feature: Use listr to display progress and errors for transformations([#92](https://github.com/webpack/webpack-cli/pull/92)) +- Feature: Jscodeshift Transformations for --migrate ([#40](https://github.com/webpack/webpack-cli/pull/40)) diff --git a/README.md b/README.md index 3bf5bf3819c..656b52adde0 100644 --- a/README.md +++ b/README.md @@ -20,16 +20,16 @@ ## Table of Contents -- [About](#about) - - [How to install](#how-to-install) -- [Supported arguments and commands](#supported-arguments-and-commands) -- [Packages](#packages) - - [Commands](#commands) - - [Utilities](#utilities) -- [Getting started](#getting-started) -- [Exit codes and their meanings](#exit-codes-and-their-meanings) -- [Contributing and Internal Documentation](#contributing-and-internal-documentation) -- [Open Collective](#open-collective) +- [About](#about) + - [How to install](#how-to-install) +- [Supported arguments and commands](#supported-arguments-and-commands) +- [Packages](#packages) + - [Commands](#commands) + - [Utilities](#utilities) +- [Getting started](#getting-started) +- [Exit codes and their meanings](#exit-codes-and-their-meanings) +- [Contributing and Internal Documentation](#contributing-and-internal-documentation) +- [Open Collective](#open-collective) ## About @@ -56,23 +56,23 @@ We organize webpack CLI as a multi-package repository using [lerna](https://gith Supporting developers is an important task for webpack CLI. Thus, webpack CLI provides different commands for many common tasks. -- `build|bundle|b [entries...] [options]` - Run webpack (default command, can be omitted). -- [`configtest|t [config-path]`](./packages/configtest/README.md#webpack-cli-configtest) - Validate a webpack configuration. -- `help|h [command] [option]` - Display help for commands and options. -- [`init|create|new|c|n [generation-path] [options]`](./packages/generators/INIT.md#webpack-cli-init) - Create a new webpack project. -- [`info|i [options]`](./packages/info/README.md#webpack-cli-info) - Returns information related to the local environment. -- [`migrate|m [new-config-path]`](https://www.npmjs.com/package/@webpack-cli/migrate) - Migrate project from one version to another. -- [`plugin|p [output-path] [options]`](./packages/generators#generators) - Initiate new plugin project. -- [`loader|l [output-path] [options]`](./packages/generators#generators) - Initiate new loader project. -- [`serve|server|s [entries...] [options]`](./packages/serve/README.md#webpack-cli-serve) - Use webpack with a development server that provides live reloading. -- `version|v [commands...]` - Output the version number of `webpack`, `webpack-cli`, `webpack-dev-server`, and commands -- `watch|w [entries...] [options]` - Run webpack and watch for files changes. +- `build|bundle|b [entries...] [options]` - Run webpack (default command, can be omitted). +- [`configtest|t [config-path]`](./packages/configtest/README.md#webpack-cli-configtest) - Validate a webpack configuration. +- `help|h [command] [option]` - Display help for commands and options. +- [`init|create|new|c|n [generation-path] [options]`](./packages/generators/INIT.md#webpack-cli-init) - Create a new webpack project. +- [`info|i [options]`](./packages/info/README.md#webpack-cli-info) - Returns information related to the local environment. +- [`migrate|m [new-config-path]`](https://www.npmjs.com/package/@webpack-cli/migrate) - Migrate project from one version to another. +- [`plugin|p [output-path] [options]`](./packages/generators#generators) - Initiate new plugin project. +- [`loader|l [output-path] [options]`](./packages/generators#generators) - Initiate new loader project. +- [`serve|server|s [entries...] [options]`](./packages/serve/README.md#webpack-cli-serve) - Use webpack with a development server that provides live reloading. +- `version|v [commands...]` - Output the version number of `webpack`, `webpack-cli`, `webpack-dev-server`, and commands +- `watch|w [entries...] [options]` - Run webpack and watch for files changes. ### Utilities The project has several utility packages which are used by other commands -- [`generators`](./packages/generators/README.md) - Contains all webpack-cli related yeoman generators. +- [`generators`](./packages/generators/README.md) - Contains all webpack-cli related yeoman generators. ## Getting started diff --git a/commitlint.config.js b/commitlint.config.js index db74d15522c..69b4242cc7a 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,3 +1,3 @@ module.exports = { - extends: ["@commitlint/config-conventional"], + extends: ["@commitlint/config-conventional"], }; diff --git a/jest.config.js b/jest.config.js index af8a0297593..6df9c2c8577 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,29 +2,29 @@ const { cli } = require("webpack"); // Ignore core-flags test for webpack@4 const ignorePattern = - typeof cli !== "undefined" - ? ["/node_modules/"] - : ["/node_modules/", "/test/build/core-flags"]; + typeof cli !== "undefined" + ? ["/node_modules/"] + : ["/node_modules/", "/test/build/core-flags"]; module.exports = { - testPathIgnorePatterns: ignorePattern, - testEnvironment: "node", - collectCoverage: true, - coverageDirectory: ".nyc_output", - coverageReporters: ["json"], - coveragePathIgnorePatterns: ["/test/"], - transform: { - "^.+\\.(ts)?$": "ts-jest", - }, - testRegex: ["/test/.*\\.(test.js|test.ts)$"], - moduleFileExtensions: ["ts", "js", "json"], - snapshotResolver: "/scripts/snapshotResolver.js", - 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", - ], + testPathIgnorePatterns: ignorePattern, + testEnvironment: "node", + collectCoverage: true, + coverageDirectory: ".nyc_output", + coverageReporters: ["json"], + coveragePathIgnorePatterns: ["/test/"], + transform: { + "^.+\\.(ts)?$": "ts-jest", + }, + testRegex: ["/test/.*\\.(test.js|test.ts)$"], + moduleFileExtensions: ["ts", "js", "json"], + snapshotResolver: "/scripts/snapshotResolver.js", + 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/lint-staged.config.js b/lint-staged.config.js index e487d8f7c5a..297639a87b0 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -1,4 +1,4 @@ module.exports = { - "*.{json,md,yml,css}": ["prettier --write"], - "*.{js,ts}": ["eslint --fix", "prettier --write"], + "*.{json,md,yml,css}": ["prettier --write"], + "*.{js,ts}": ["eslint --fix", "prettier --write"], }; diff --git a/package.json b/package.json index 82347c0b686..315fa2963f9 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "build": "tsc --build", "build:ci": "tsc --build", "watch": "tsc --build --watch", - "lint:prettier": "prettier --list-different . \"!**/*.{js,ts}\" ", + "lint:prettier": "prettier --list-different .", "lint:eslint": "eslint --cache --ext .js --ext .ts .", "lint": "yarn lint:eslint && yarn lint:prettier", "fix": "yarn lint:eslint --fix && yarn lint:prettier --write", @@ -64,7 +64,6 @@ "eslint": "^7.12.1", "eslint-config-prettier": "^8.2.0", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^3.1.4", "execa": "^5.0.0", "get-port": "^5.1.1", "husky": "^6.0.0", diff --git a/packages/README.md b/packages/README.md index 680f46c8ff0..a6d60deb5a5 100644 --- a/packages/README.md +++ b/packages/README.md @@ -2,9 +2,9 @@ ## Table of content -- [Description](#description) -- [Packages](#packages) -- [Generic Installation](#generic-installation) +- [Description](#description) +- [Packages](#packages) +- [Generic Installation](#generic-installation) ## Description diff --git a/packages/configtest/CHANGELOG.md b/packages/configtest/CHANGELOG.md index 9ad04de301a..cc120c7d464 100644 --- a/packages/configtest/CHANGELOG.md +++ b/packages/configtest/CHANGELOG.md @@ -7,7 +7,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- prettier config ([#2719](https://github.com/webpack/webpack-cli/issues/2719)) ([181295f](https://github.com/webpack/webpack-cli/commit/181295fb1b1973c201c221813562219d85b845ae)) +- prettier config ([#2719](https://github.com/webpack/webpack-cli/issues/2719)) ([181295f](https://github.com/webpack/webpack-cli/commit/181295fb1b1973c201c221813562219d85b845ae)) ## [1.0.3](https://github.com/webpack/webpack-cli/compare/@webpack-cli/configtest@1.0.2...@webpack-cli/configtest@1.0.3) (2021-05-06) @@ -21,12 +21,12 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- improve description for 'configtest' command ([#2379](https://github.com/webpack/webpack-cli/issues/2379)) ([311bae3](https://github.com/webpack/webpack-cli/commit/311bae336d83424c800e553b6ef40242d967685c)) +- improve description for 'configtest' command ([#2379](https://github.com/webpack/webpack-cli/issues/2379)) ([311bae3](https://github.com/webpack/webpack-cli/commit/311bae336d83424c800e553b6ef40242d967685c)) # 1.0.0 (2021-01-19) ### Features -- `configtest` validate default configuration ([#2354](https://github.com/webpack/webpack-cli/issues/2354)) ([487691a](https://github.com/webpack/webpack-cli/commit/487691abc8d817f5b3c1ab87743d7235ff15d956)) -- added the `watch` command ([#2357](https://github.com/webpack/webpack-cli/issues/2357)) ([9693f7d](https://github.com/webpack/webpack-cli/commit/9693f7d9543a8fce610c4ef903ccca0d12d229a1)) -- new `configtest` command ([#2303](https://github.com/webpack/webpack-cli/issues/2303)) ([eb7b189](https://github.com/webpack/webpack-cli/commit/eb7b18937d045261a5b20ca8356e8b4ae4dfcaad)) +- `configtest` validate default configuration ([#2354](https://github.com/webpack/webpack-cli/issues/2354)) ([487691a](https://github.com/webpack/webpack-cli/commit/487691abc8d817f5b3c1ab87743d7235ff15d956)) +- added the `watch` command ([#2357](https://github.com/webpack/webpack-cli/issues/2357)) ([9693f7d](https://github.com/webpack/webpack-cli/commit/9693f7d9543a8fce610c4ef903ccca0d12d229a1)) +- new `configtest` command ([#2303](https://github.com/webpack/webpack-cli/issues/2303)) ([eb7b189](https://github.com/webpack/webpack-cli/commit/eb7b18937d045261a5b20ca8356e8b4ae4dfcaad)) diff --git a/packages/configtest/src/index.ts b/packages/configtest/src/index.ts index 025ef647d29..c9bd526716c 100644 --- a/packages/configtest/src/index.ts +++ b/packages/configtest/src/index.ts @@ -1,63 +1,61 @@ class ConfigTestCommand { - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any - async apply(cli: any): Promise { - const { logger, webpack } = cli; - - await cli.makeCommand( - { - name: "configtest [config-path]", - alias: "t", - description: "Validate a webpack configuration.", - pkg: "@webpack-cli/configtest", - }, - [], - async (configPath: string | undefined): Promise => { - const config = await cli.resolveConfig(configPath ? { config: [configPath] } : {}); - const configPaths = new Set(); - - if (Array.isArray(config.options)) { - config.options.forEach((options) => { - if (config.path.get(options)) { - configPaths.add(config.path.get(options)); - } - }); - } else { - if (config.path.get(config.options)) { - configPaths.add(config.path.get(config.options)); - } - } - - if (configPaths.size === 0) { - logger.error("No configuration found."); - process.exit(2); - } - - logger.info(`Validate '${Array.from(configPaths).join(" ,")}'.`); - - try { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const error: any = webpack.validate(config.options); - - // TODO remove this after drop webpack@4 - if (error && error.length > 0) { - throw new webpack.WebpackOptionsValidationError(error); - } - } catch (error) { - if (cli.isValidationError(error)) { - logger.error(error.message); - } else { - logger.error(error); - } - - process.exit(2); - } - - logger.success( - "There are no validation errors in the given webpack configuration.", - ); - }, - ); - } + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any + async apply(cli: any): Promise { + const { logger, webpack } = cli; + + await cli.makeCommand( + { + name: "configtest [config-path]", + alias: "t", + description: "Validate a webpack configuration.", + pkg: "@webpack-cli/configtest", + }, + [], + async (configPath: string | undefined): Promise => { + const config = await cli.resolveConfig(configPath ? { config: [configPath] } : {}); + const configPaths = new Set(); + + if (Array.isArray(config.options)) { + config.options.forEach((options) => { + if (config.path.get(options)) { + configPaths.add(config.path.get(options)); + } + }); + } else { + if (config.path.get(config.options)) { + configPaths.add(config.path.get(config.options)); + } + } + + if (configPaths.size === 0) { + logger.error("No configuration found."); + process.exit(2); + } + + logger.info(`Validate '${Array.from(configPaths).join(" ,")}'.`); + + try { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const error: any = webpack.validate(config.options); + + // TODO remove this after drop webpack@4 + if (error && error.length > 0) { + throw new webpack.WebpackOptionsValidationError(error); + } + } catch (error) { + if (cli.isValidationError(error)) { + logger.error(error.message); + } else { + logger.error(error); + } + + process.exit(2); + } + + logger.success("There are no validation errors in the given webpack configuration."); + }, + ); + } } export default ConfigTestCommand; diff --git a/packages/generators/CHANGELOG.md b/packages/generators/CHANGELOG.md index 7cd22479c6f..5bdb5c87a5b 100644 --- a/packages/generators/CHANGELOG.md +++ b/packages/generators/CHANGELOG.md @@ -7,63 +7,63 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Features -- add prompt to select a package manager of choice ([#2779](https://github.com/webpack/webpack-cli/issues/2779)) ([5bd0df4](https://github.com/webpack/webpack-cli/commit/5bd0df42dea72203f3042405d6ff35b4422df763)) -- **init-generator:** add ability to specify a package manager of choice ([#2769](https://github.com/webpack/webpack-cli/issues/2769)) ([e53f164](https://github.com/webpack/webpack-cli/commit/e53f1645c729c3bbcb27ffd41c999ed321f86f9d)) +- add prompt to select a package manager of choice ([#2779](https://github.com/webpack/webpack-cli/issues/2779)) ([5bd0df4](https://github.com/webpack/webpack-cli/commit/5bd0df42dea72203f3042405d6ff35b4422df763)) +- **init-generator:** add ability to specify a package manager of choice ([#2769](https://github.com/webpack/webpack-cli/issues/2769)) ([e53f164](https://github.com/webpack/webpack-cli/commit/e53f1645c729c3bbcb27ffd41c999ed321f86f9d)) # [2.2.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@2.1.0...@webpack-cli/generators@2.2.0) (2021-06-07) ### Bug Fixes -- prettier config ([#2719](https://github.com/webpack/webpack-cli/issues/2719)) ([181295f](https://github.com/webpack/webpack-cli/commit/181295fb1b1973c201c221813562219d85b845ae)) +- prettier config ([#2719](https://github.com/webpack/webpack-cli/issues/2719)) ([181295f](https://github.com/webpack/webpack-cli/commit/181295fb1b1973c201c221813562219d85b845ae)) ### Features -- **generators:** add aliases for options ([#2700](https://github.com/webpack/webpack-cli/issues/2700)) ([2172ad9](https://github.com/webpack/webpack-cli/commit/2172ad9f3e515b1b9a87558e80772bef1b6f42d6)) -- **init-generator:** configure workbox-webpack-plugin as opted ([#2722](https://github.com/webpack/webpack-cli/issues/2722)) ([f229e29](https://github.com/webpack/webpack-cli/commit/f229e29ace0acf88dafef51d86c9671efff52c72)) +- **generators:** add aliases for options ([#2700](https://github.com/webpack/webpack-cli/issues/2700)) ([2172ad9](https://github.com/webpack/webpack-cli/commit/2172ad9f3e515b1b9a87558e80772bef1b6f42d6)) +- **init-generator:** configure workbox-webpack-plugin as opted ([#2722](https://github.com/webpack/webpack-cli/issues/2722)) ([f229e29](https://github.com/webpack/webpack-cli/commit/f229e29ace0acf88dafef51d86c9671efff52c72)) # [2.1.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@2.0.0...@webpack-cli/generators@2.1.0) (2021-05-06) ### Bug Fixes -- add node env as prod in default template ([#2614](https://github.com/webpack/webpack-cli/issues/2614)) ([5ea478c](https://github.com/webpack/webpack-cli/commit/5ea478ca9e8fda691e37fdd6d0ad8d1df074e224)) -- broken URL in generated webpack.config.js ([#2600](https://github.com/webpack/webpack-cli/issues/2600)) ([6e207bc](https://github.com/webpack/webpack-cli/commit/6e207bc24886f7f8a87a19119924a682f66e575b)) -- comment typo in webpack.config.js template file ([#2639](https://github.com/webpack/webpack-cli/issues/2639)) ([d2ab57d](https://github.com/webpack/webpack-cli/commit/d2ab57d2268d8cc8df628f35d75774c88330a5f8)) -- correct webpack config for `babel-loader` and `ts-loader` ([#2577](https://github.com/webpack/webpack-cli/issues/2577)) ([177dca7](https://github.com/webpack/webpack-cli/commit/177dca7c20fff0708721426598fcd5a89384eb8e)) -- send warning regarding invalid template to stderr ([#2687](https://github.com/webpack/webpack-cli/issues/2687)) ([dc0481b](https://github.com/webpack/webpack-cli/commit/dc0481becfde5553fa95a393d1167539b2e14ec2)) -- update usage info ([#2594](https://github.com/webpack/webpack-cli/issues/2594)) ([9d07d67](https://github.com/webpack/webpack-cli/commit/9d07d67faf147cbaf0dddb95038403963e5f2afb)) -- **generators:** use correct exit code ([#2569](https://github.com/webpack/webpack-cli/issues/2569)) ([9a18e7f](https://github.com/webpack/webpack-cli/commit/9a18e7f6cdf8524ecee3cfaf09595983eebf35b9)) +- add node env as prod in default template ([#2614](https://github.com/webpack/webpack-cli/issues/2614)) ([5ea478c](https://github.com/webpack/webpack-cli/commit/5ea478ca9e8fda691e37fdd6d0ad8d1df074e224)) +- broken URL in generated webpack.config.js ([#2600](https://github.com/webpack/webpack-cli/issues/2600)) ([6e207bc](https://github.com/webpack/webpack-cli/commit/6e207bc24886f7f8a87a19119924a682f66e575b)) +- comment typo in webpack.config.js template file ([#2639](https://github.com/webpack/webpack-cli/issues/2639)) ([d2ab57d](https://github.com/webpack/webpack-cli/commit/d2ab57d2268d8cc8df628f35d75774c88330a5f8)) +- correct webpack config for `babel-loader` and `ts-loader` ([#2577](https://github.com/webpack/webpack-cli/issues/2577)) ([177dca7](https://github.com/webpack/webpack-cli/commit/177dca7c20fff0708721426598fcd5a89384eb8e)) +- send warning regarding invalid template to stderr ([#2687](https://github.com/webpack/webpack-cli/issues/2687)) ([dc0481b](https://github.com/webpack/webpack-cli/commit/dc0481becfde5553fa95a393d1167539b2e14ec2)) +- update usage info ([#2594](https://github.com/webpack/webpack-cli/issues/2594)) ([9d07d67](https://github.com/webpack/webpack-cli/commit/9d07d67faf147cbaf0dddb95038403963e5f2afb)) +- **generators:** use correct exit code ([#2569](https://github.com/webpack/webpack-cli/issues/2569)) ([9a18e7f](https://github.com/webpack/webpack-cli/commit/9a18e7f6cdf8524ecee3cfaf09595983eebf35b9)) ### Features -- add --template flag for addon generator ([#2576](https://github.com/webpack/webpack-cli/issues/2576)) ([c8f702a](https://github.com/webpack/webpack-cli/commit/c8f702ac399252b8e5da899e6014a2832321caa3)) -- add `create` and `new` alias for `init` ([#2616](https://github.com/webpack/webpack-cli/issues/2616)) ([5a9789d](https://github.com/webpack/webpack-cli/commit/5a9789db237b7696adfdc9826b0dda749fedfa9a)) -- add support for mini-css-extract-plugin on demand ([#2571](https://github.com/webpack/webpack-cli/issues/2571)) ([ed201c0](https://github.com/webpack/webpack-cli/commit/ed201c0744d08dc376a234ddafe32f6b5fe60082)) -- add support for mode specific config ([#2585](https://github.com/webpack/webpack-cli/issues/2585)) ([993a7f0](https://github.com/webpack/webpack-cli/commit/993a7f02ec1546a7aca1ee537366faa8ac18de84)) -- added support arguments description ([#2659](https://github.com/webpack/webpack-cli/issues/2659)) ([4dfd166](https://github.com/webpack/webpack-cli/commit/4dfd166f757ce94130bf9b7580f2dbe2868b8f4f)) -- allow setup extract plugin ([#2644](https://github.com/webpack/webpack-cli/issues/2644)) ([71bfaa8](https://github.com/webpack/webpack-cli/commit/71bfaa8ef5e9de4d4f0cbee4ba7e57a5b1b69d90)) -- make extention case insensitive ([#2572](https://github.com/webpack/webpack-cli/issues/2572)) ([67eeaaf](https://github.com/webpack/webpack-cli/commit/67eeaaf66ed5b6b3b705c2b595e3923f2cb725e6)) -- prettify generated config ([#2640](https://github.com/webpack/webpack-cli/issues/2640)) ([c3c069e](https://github.com/webpack/webpack-cli/commit/c3c069e1cc7958a6f7b5d4cdb74acb12bc25d8c7)) +- add --template flag for addon generator ([#2576](https://github.com/webpack/webpack-cli/issues/2576)) ([c8f702a](https://github.com/webpack/webpack-cli/commit/c8f702ac399252b8e5da899e6014a2832321caa3)) +- add `create` and `new` alias for `init` ([#2616](https://github.com/webpack/webpack-cli/issues/2616)) ([5a9789d](https://github.com/webpack/webpack-cli/commit/5a9789db237b7696adfdc9826b0dda749fedfa9a)) +- add support for mini-css-extract-plugin on demand ([#2571](https://github.com/webpack/webpack-cli/issues/2571)) ([ed201c0](https://github.com/webpack/webpack-cli/commit/ed201c0744d08dc376a234ddafe32f6b5fe60082)) +- add support for mode specific config ([#2585](https://github.com/webpack/webpack-cli/issues/2585)) ([993a7f0](https://github.com/webpack/webpack-cli/commit/993a7f02ec1546a7aca1ee537366faa8ac18de84)) +- added support arguments description ([#2659](https://github.com/webpack/webpack-cli/issues/2659)) ([4dfd166](https://github.com/webpack/webpack-cli/commit/4dfd166f757ce94130bf9b7580f2dbe2868b8f4f)) +- allow setup extract plugin ([#2644](https://github.com/webpack/webpack-cli/issues/2644)) ([71bfaa8](https://github.com/webpack/webpack-cli/commit/71bfaa8ef5e9de4d4f0cbee4ba7e57a5b1b69d90)) +- make extention case insensitive ([#2572](https://github.com/webpack/webpack-cli/issues/2572)) ([67eeaaf](https://github.com/webpack/webpack-cli/commit/67eeaaf66ed5b6b3b705c2b595e3923f2cb725e6)) +- prettify generated config ([#2640](https://github.com/webpack/webpack-cli/issues/2640)) ([c3c069e](https://github.com/webpack/webpack-cli/commit/c3c069e1cc7958a6f7b5d4cdb74acb12bc25d8c7)) # [2.0.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@1.3.1...@webpack-cli/generators@2.0.0) (2021-03-27) ### BREAKING CHANGES -- `--generation-path` option was removed, please use `webpack init ./path/to/generation` -- `--auto` option was removed in favor `--force` -- utils for ast transformations were removed +- `--generation-path` option was removed, please use `webpack init ./path/to/generation` +- `--auto` option was removed in favor `--force` +- utils for ast transformations were removed ### Bug Fixes -- description for `init` command ([#2528](https://github.com/webpack/webpack-cli/issues/2528)) ([0f0e403](https://github.com/webpack/webpack-cli/commit/0f0e403464711d5c7ddfe9537e00969fb3474685)) -- update prompt message ([#2523](https://github.com/webpack/webpack-cli/issues/2523)) ([7b87485](https://github.com/webpack/webpack-cli/commit/7b87485c6b161d472422e7f86680a7e221223ec1)) -- add serve script if opted for WDS with init ([#2424](https://github.com/webpack/webpack-cli/issues/2424)) ([78e2fa7](https://github.com/webpack/webpack-cli/commit/78e2fa7036e123beefe2010e0a6cc10697d14c4d)) -- improve prettier message ([#2419](https://github.com/webpack/webpack-cli/issues/2419)) ([21a1a30](https://github.com/webpack/webpack-cli/commit/21a1a30c687cd800396a1c13abefc57bf42886f3)) +- description for `init` command ([#2528](https://github.com/webpack/webpack-cli/issues/2528)) ([0f0e403](https://github.com/webpack/webpack-cli/commit/0f0e403464711d5c7ddfe9537e00969fb3474685)) +- update prompt message ([#2523](https://github.com/webpack/webpack-cli/issues/2523)) ([7b87485](https://github.com/webpack/webpack-cli/commit/7b87485c6b161d472422e7f86680a7e221223ec1)) +- add serve script if opted for WDS with init ([#2424](https://github.com/webpack/webpack-cli/issues/2424)) ([78e2fa7](https://github.com/webpack/webpack-cli/commit/78e2fa7036e123beefe2010e0a6cc10697d14c4d)) +- improve prettier message ([#2419](https://github.com/webpack/webpack-cli/issues/2419)) ([21a1a30](https://github.com/webpack/webpack-cli/commit/21a1a30c687cd800396a1c13abefc57bf42886f3)) ### Features -- add additional scripts to init template ([#2550](https://github.com/webpack/webpack-cli/issues/2550)) ([665d993](https://github.com/webpack/webpack-cli/commit/665d99378f272179e39236cb21773ef1b1907314)) -- add postcss support to default template ([#2526](https://github.com/webpack/webpack-cli/issues/2526)) ([2627d0f](https://github.com/webpack/webpack-cli/commit/2627d0f9490be35f21ed0f55134d7851dd2e5cd0)) -- allow all css possibilities for default template ([#2544](https://github.com/webpack/webpack-cli/issues/2544)) ([a141bbb](https://github.com/webpack/webpack-cli/commit/a141bbb1902ec9039d197f3b4b049e2e3eaff793)) +- add additional scripts to init template ([#2550](https://github.com/webpack/webpack-cli/issues/2550)) ([665d993](https://github.com/webpack/webpack-cli/commit/665d99378f272179e39236cb21773ef1b1907314)) +- add postcss support to default template ([#2526](https://github.com/webpack/webpack-cli/issues/2526)) ([2627d0f](https://github.com/webpack/webpack-cli/commit/2627d0f9490be35f21ed0f55134d7851dd2e5cd0)) +- allow all css possibilities for default template ([#2544](https://github.com/webpack/webpack-cli/issues/2544)) ([a141bbb](https://github.com/webpack/webpack-cli/commit/a141bbb1902ec9039d197f3b4b049e2e3eaff793)) ## [1.3.1](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@1.3.0...@webpack-cli/generators@1.3.1) (2021-02-02) @@ -73,64 +73,64 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- init generator ([#2324](https://github.com/webpack/webpack-cli/issues/2324)) ([016bb34](https://github.com/webpack/webpack-cli/commit/016bb348d7cc9cb299555ec8edd373130fb1b77c)) -- regression with webpack config ([#2319](https://github.com/webpack/webpack-cli/issues/2319)) ([50bbe56](https://github.com/webpack/webpack-cli/commit/50bbe56c0ae9d72301c4ac51fdc2b04df7b66451)) -- remove splitchunks ([#2310](https://github.com/webpack/webpack-cli/issues/2310)) ([e44e855](https://github.com/webpack/webpack-cli/commit/e44e855c7e302932a828fcedf7abfe205b47c716)) -- remove style-loader from the loader chain ([#2309](https://github.com/webpack/webpack-cli/issues/2309)) ([19a25cf](https://github.com/webpack/webpack-cli/commit/19a25cf83dc2f680a5028f4b449d7f79895231f0)) -- use worker from plugin and remove default ([#2340](https://github.com/webpack/webpack-cli/issues/2340)) ([9100137](https://github.com/webpack/webpack-cli/commit/9100137bc4e7d77915407aec554da25f0ae9e55c)) +- init generator ([#2324](https://github.com/webpack/webpack-cli/issues/2324)) ([016bb34](https://github.com/webpack/webpack-cli/commit/016bb348d7cc9cb299555ec8edd373130fb1b77c)) +- regression with webpack config ([#2319](https://github.com/webpack/webpack-cli/issues/2319)) ([50bbe56](https://github.com/webpack/webpack-cli/commit/50bbe56c0ae9d72301c4ac51fdc2b04df7b66451)) +- remove splitchunks ([#2310](https://github.com/webpack/webpack-cli/issues/2310)) ([e44e855](https://github.com/webpack/webpack-cli/commit/e44e855c7e302932a828fcedf7abfe205b47c716)) +- remove style-loader from the loader chain ([#2309](https://github.com/webpack/webpack-cli/issues/2309)) ([19a25cf](https://github.com/webpack/webpack-cli/commit/19a25cf83dc2f680a5028f4b449d7f79895231f0)) +- use worker from plugin and remove default ([#2340](https://github.com/webpack/webpack-cli/issues/2340)) ([9100137](https://github.com/webpack/webpack-cli/commit/9100137bc4e7d77915407aec554da25f0ae9e55c)) ### Features -- flexible init scaffolding ([#2311](https://github.com/webpack/webpack-cli/issues/2311)) ([9a74ad0](https://github.com/webpack/webpack-cli/commit/9a74ad08b984325a63d953c685496e48700a2caf)) +- flexible init scaffolding ([#2311](https://github.com/webpack/webpack-cli/issues/2311)) ([9a74ad0](https://github.com/webpack/webpack-cli/commit/9a74ad08b984325a63d953c685496e48700a2caf)) ## [1.2.1](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@1.2.0...@webpack-cli/generators@1.2.1) (2020-12-31) ### Bug Fixes -- the `--help` option is working without `webpack-dev-server` ([#2267](https://github.com/webpack/webpack-cli/issues/2267)) ([1dae54d](https://github.com/webpack/webpack-cli/commit/1dae54da94d3220437b9257efe512447023de1d3)) +- the `--help` option is working without `webpack-dev-server` ([#2267](https://github.com/webpack/webpack-cli/issues/2267)) ([1dae54d](https://github.com/webpack/webpack-cli/commit/1dae54da94d3220437b9257efe512447023de1d3)) # [1.2.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@1.1.0...@webpack-cli/generators@1.2.0) (2020-12-25) ### Bug Fixes -- typos in options +- typos in options ### Features -- union generators +- union generators # [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)) +- **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)) +- 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 -- output stacktrace on errors ([#1949](https://github.com/webpack/webpack-cli/issues/1949)) ([9ba9d6f](https://github.com/webpack/webpack-cli/commit/9ba9d6f460fb25fb79d52f4360239b8c4b471451)) +- output stacktrace on errors ([#1949](https://github.com/webpack/webpack-cli/issues/1949)) ([9ba9d6f](https://github.com/webpack/webpack-cli/commit/9ba9d6f460fb25fb79d52f4360239b8c4b471451)) ## [1.0.1](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@1.0.1-rc.1...@webpack-cli/generators@1.0.1) (2020-10-10) ### Bug Fixes -- cleanup `package-utils` package ([#1822](https://github.com/webpack/webpack-cli/issues/1822)) ([fd5b92b](https://github.com/webpack/webpack-cli/commit/fd5b92b3cd40361daec5bf4486e455a41f4c9738)) -- upgrade lock file ([#1885](https://github.com/webpack/webpack-cli/issues/1885)) ([8df291e](https://github.com/webpack/webpack-cli/commit/8df291eef0fad7c91d912b158b3c2915cddfacd1)) +- cleanup `package-utils` package ([#1822](https://github.com/webpack/webpack-cli/issues/1822)) ([fd5b92b](https://github.com/webpack/webpack-cli/commit/fd5b92b3cd40361daec5bf4486e455a41f4c9738)) +- upgrade lock file ([#1885](https://github.com/webpack/webpack-cli/issues/1885)) ([8df291e](https://github.com/webpack/webpack-cli/commit/8df291eef0fad7c91d912b158b3c2915cddfacd1)) ## [1.0.1-rc.1](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@1.0.1-alpha.5...@webpack-cli/generators@1.0.1-rc.1) (2020-10-06) ### Bug Fixes -- **generators:** fix and refactor entry util, add tests ([#1392](https://github.com/webpack/webpack-cli/issues/1392)) ([219c633](https://github.com/webpack/webpack-cli/commit/219c633e284518fe9c638d26a49d79394f0b6d68)) -- **generators:** fix generators init loader's test regex ([#1309](https://github.com/webpack/webpack-cli/issues/1309)) ([62e0314](https://github.com/webpack/webpack-cli/commit/62e03143ba3b8752665a5ff6ff134daadbe9c2bc)) -- **generators:** fix small issues with generators ([#1385](https://github.com/webpack/webpack-cli/issues/1385)) ([f62c60d](https://github.com/webpack/webpack-cli/commit/f62c60d0a52fd6294ead8e0ee9310d017fe21807)) -- add necessary peerDependencies ([#1825](https://github.com/webpack/webpack-cli/issues/1825)) ([0f13ab5](https://github.com/webpack/webpack-cli/commit/0f13ab5ddd9e28e5e7095721d086a58aebaf98a5)) -- generated loader template ([#1720](https://github.com/webpack/webpack-cli/issues/1720)) ([a380a78](https://github.com/webpack/webpack-cli/commit/a380a785c296208af7017f547cd34cf72517f9da)) +- **generators:** fix and refactor entry util, add tests ([#1392](https://github.com/webpack/webpack-cli/issues/1392)) ([219c633](https://github.com/webpack/webpack-cli/commit/219c633e284518fe9c638d26a49d79394f0b6d68)) +- **generators:** fix generators init loader's test regex ([#1309](https://github.com/webpack/webpack-cli/issues/1309)) ([62e0314](https://github.com/webpack/webpack-cli/commit/62e03143ba3b8752665a5ff6ff134daadbe9c2bc)) +- **generators:** fix small issues with generators ([#1385](https://github.com/webpack/webpack-cli/issues/1385)) ([f62c60d](https://github.com/webpack/webpack-cli/commit/f62c60d0a52fd6294ead8e0ee9310d017fe21807)) +- add necessary peerDependencies ([#1825](https://github.com/webpack/webpack-cli/issues/1825)) ([0f13ab5](https://github.com/webpack/webpack-cli/commit/0f13ab5ddd9e28e5e7095721d086a58aebaf98a5)) +- generated loader template ([#1720](https://github.com/webpack/webpack-cli/issues/1720)) ([a380a78](https://github.com/webpack/webpack-cli/commit/a380a785c296208af7017f547cd34cf72517f9da)) ## [1.0.1-alpha.5](https://github.com/ematipico/webpack-cli/compare/@webpack-cli/generators@1.0.1-alpha.4...@webpack-cli/generators@1.0.1-alpha.5) (2020-03-02) @@ -152,4 +152,4 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- **cli:** fix file resolution inside group helper ([#1221](https://github.com/webpack/webpack-cli/issues/1221)) ([76d2eb3](https://github.com/webpack/webpack-cli/commit/76d2eb316ab154c19ebf639b7d6c82df76dc0695)) +- **cli:** fix file resolution inside group helper ([#1221](https://github.com/webpack/webpack-cli/issues/1221)) ([76d2eb3](https://github.com/webpack/webpack-cli/commit/76d2eb316ab154c19ebf639b7d6c82df76dc0695)) diff --git a/packages/generators/INIT.md b/packages/generators/INIT.md index 3fde9c09e10..6961aba88d1 100644 --- a/packages/generators/INIT.md +++ b/packages/generators/INIT.md @@ -4,15 +4,15 @@ ## Table of Contents -- [Initial Setup](#initial-setup) - - [Local Setup](#local-setup) - - [Global Setup](#global-setup) -- [Usage](#usage) - - [Running Locally](#running-locally) - - [Running Globally](#running-globally) - - [CLI options](#cli-options) -- [Description of questions asked by the generator](#description-of-questions-asked-by-the-generator) - - [Default Template](#default-template) +- [Initial Setup](#initial-setup) + - [Local Setup](#local-setup) + - [Global Setup](#global-setup) +- [Usage](#usage) + - [Running Locally](#running-locally) + - [Running Globally](#running-globally) + - [CLI options](#cli-options) +- [Description of questions asked by the generator](#description-of-questions-asked-by-the-generator) + - [Default Template](#default-template) ## Setup diff --git a/packages/generators/README.md b/packages/generators/README.md index 22c00e6ba93..1aaa59dae5e 100644 --- a/packages/generators/README.md +++ b/packages/generators/README.md @@ -20,10 +20,10 @@ To run the package programmatically, install it as a dependency. When using the ```js const { - addonGenerator, - initGenerator, - loaderGenerator, - pluginGenerator, + addonGenerator, + initGenerator, + loaderGenerator, + pluginGenerator, } = require("@webpack-cli/generators"); // ... compose with yeoman env or add a generator to your own yeoman project @@ -31,10 +31,10 @@ const { ## Generators -- [**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 -- [**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 -- [**Init Generator**](https://github.com/webpack/webpack-cli/blob/master/packages/generators/src/init-generator.ts) : Generates new webpack 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` +- [**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 +- [**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 +- [**Init Generator**](https://github.com/webpack/webpack-cli/blob/master/packages/generators/src/init-generator.ts) : Generates new webpack 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/addon-template/package.json.js b/packages/generators/addon-template/package.json.js index 3a18def4000..7b008cba4be 100644 --- a/packages/generators/addon-template/package.json.js +++ b/packages/generators/addon-template/package.json.js @@ -1,7 +1,7 @@ module.exports = (name) => { - return { - version: "1.0.0", - description: "webpack loader", - name, - }; + return { + version: "1.0.0", + description: "webpack loader", + name, + }; }; diff --git a/packages/generators/init-template/default/.babelrc b/packages/generators/init-template/default/.babelrc index e3f952fd630..f2c9da3ae6e 100644 --- a/packages/generators/init-template/default/.babelrc +++ b/packages/generators/init-template/default/.babelrc @@ -1,11 +1,11 @@ { - "plugins": ["@babel/syntax-dynamic-import"], - "presets": [ - [ - "@babel/preset-env", - { - "modules": false - } - ] + "plugins": ["@babel/syntax-dynamic-import"], + "presets": [ + [ + "@babel/preset-env", + { + "modules": false + } ] + ] } diff --git a/packages/generators/init-template/default/package.json.js b/packages/generators/init-template/default/package.json.js index 3f45ce163f2..79d967ebe16 100644 --- a/packages/generators/init-template/default/package.json.js +++ b/packages/generators/init-template/default/package.json.js @@ -1,18 +1,18 @@ module.exports = (isUsingDevServer) => { - const scripts = { - build: "webpack --mode=production --node-env=production", - "build:dev": "webpack --mode=development", - "build:prod": "webpack --mode=production --node-env=production", - watch: "webpack --watch", - }; - if (isUsingDevServer) { - scripts.serve = "webpack serve"; - } + const scripts = { + build: "webpack --mode=production --node-env=production", + "build:dev": "webpack --mode=development", + "build:prod": "webpack --mode=production --node-env=production", + watch: "webpack --watch", + }; + if (isUsingDevServer) { + scripts.serve = "webpack serve"; + } - return { - version: "1.0.0", - description: "My webpack project", - name: "my-webpack-project", - scripts, - }; + return { + version: "1.0.0", + description: "My webpack project", + name: "my-webpack-project", + scripts, + }; }; diff --git a/packages/generators/init-template/default/postcss.config.js b/packages/generators/init-template/default/postcss.config.js index 8855b03e6ea..3fa4289052e 100644 --- a/packages/generators/init-template/default/postcss.config.js +++ b/packages/generators/init-template/default/postcss.config.js @@ -1,5 +1,5 @@ module.exports = { - // Add you postcss configuration here - // Learn more about it at https://github.com/webpack-contrib/postcss-loader#config-files - plugins: [["autoprefixer"]], + // Add you postcss configuration here + // Learn more about it at https://github.com/webpack-contrib/postcss-loader#config-files + plugins: [["autoprefixer"]], }; diff --git a/packages/generators/src/addon-generator.ts b/packages/generators/src/addon-generator.ts index 02720b5dbed..16934b8030a 100644 --- a/packages/generators/src/addon-generator.ts +++ b/packages/generators/src/addon-generator.ts @@ -7,11 +7,11 @@ import { getInstaller, getTemplate } from "./utils/helpers"; // Helper to get the template-directory content const getFiles = (dir) => { - return fs.readdirSync(dir).reduce((list, file) => { - const filePath = path.join(dir, file); - const isDir = fs.statSync(filePath).isDirectory(); - return list.concat(isDir ? getFiles(filePath) : filePath); - }, []); + return fs.readdirSync(dir).reduce((list, file) => { + const filePath = path.join(dir, file); + const isDir = fs.statSync(filePath).isDirectory(); + return list.concat(isDir ? getFiles(filePath) : filePath); + }, []); }; /** @@ -28,113 +28,109 @@ const getFiles = (dir) => { * @returns {Generator} A class extending Generator */ const addonGenerator = ( - prompts: Generator.Questions, - templateDir: string, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - templateFn: (instance: any) => Record, + prompts: Generator.Questions, + templateDir: string, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + templateFn: (instance: any) => Record, ): Generator.GeneratorConstructor => { - return class extends Generator { - public packageManager: string; - public resolvedTemplatePath: string; - public supportedTemplates: string[]; - public template: string; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - public utils: any; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - public constructor(args: any, opts: any) { - super(args, opts); - - const { cli = {}, options } = opts || {}; - - this.utils = cli && cli.utils; - this.template = options.template; - this.supportedTemplates = fs.readdirSync(templateDir); - } + return class extends Generator { + public packageManager: string; + public resolvedTemplatePath: string; + public supportedTemplates: string[]; + public template: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + public utils: any; - public props: Generator.Question; - public copy: (value: string, index: number, array: string[]) => void; - public copyTpl: (value: string, index: number, array: string[]) => void; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + public constructor(args: any, opts: any) { + super(args, opts); - public async prompting(): Promise { - this.template = await getTemplate.call(this); - this.resolvedTemplatePath = path.join(templateDir, this.template); + const { cli = {}, options } = opts || {}; - this.props = await this.prompt(prompts); + this.utils = cli && cli.utils; + this.template = options.template; + this.supportedTemplates = fs.readdirSync(templateDir); + } - this.packageManager = await getInstaller.call(this); - } + public props: Generator.Question; + public copy: (value: string, index: number, array: string[]) => void; + public copyTpl: (value: string, index: number, array: string[]) => void; - public default(): void { - const currentDirName = path.basename(this.destinationPath()); - if (currentDirName !== this.props.name) { - this.log(` - Your project must be inside a folder named ${this.props.name} - I will create this folder for you. - `); - const pathToProjectDir: string = this.destinationPath(this.props.name); - try { - fs.mkdirSync(pathToProjectDir, { recursive: true }); - } catch (error) { - this.utils.logger.error("Failed to create directory"); - this.utils.logger.error(error); - } - this.destinationRoot(pathToProjectDir); - } - } + public async prompting(): Promise { + this.template = await getTemplate.call(this); + this.resolvedTemplatePath = path.join(templateDir, this.template); - public writing(): void { - const packageJsonTemplatePath = "../addon-template/package.json.js"; - this.fs.extendJSON( - this.destinationPath("package.json"), - // eslint-disable-next-line @typescript-eslint/no-var-requires - require(packageJsonTemplatePath)(this.props.name), - ); - - let files = []; - try { - // An array of file paths (relative to `./templates`) of files to be copied to the generated project - files = getFiles(this.resolvedTemplatePath); - } catch (error) { - this.utils.logger.error(`Failed to generate starter template.\n ${error}`); - process.exit(2); - } - - // Template file paths should be of the form `path/to/_file.js.tpl` - const copyTemplateFiles = files.filter((filePath) => - path.basename(filePath).startsWith("_"), - ); - - // File paths should be of the form `path/to/file.js.tpl` - const copyFiles = files.filter((filePath) => !copyTemplateFiles.includes(filePath)); - - copyFiles.forEach((filePath) => { - // `absolute-path/to/file.js.tpl` -> `destination-path/file.js` - const destFilePath = path - .relative(this.resolvedTemplatePath, filePath) - .replace(".tpl", ""); - this.fs.copyTpl(filePath, this.destinationPath(destFilePath)); - }); - - copyTemplateFiles.forEach((filePath) => { - // `absolute-path/to/_file.js.tpl` -> `destination-path/file.js` - const destFilePath = path - .relative(this.resolvedTemplatePath, filePath) - .replace("_", "") - .replace(".tpl", ""); - this.fs.copyTpl(filePath, this.destinationPath(destFilePath), templateFn(this)); - }); - } + this.props = await this.prompt(prompts); - public install(): void { - const opts: { - dev?: boolean; - "save-dev"?: boolean; - } = this.packageManager === "yarn" ? { dev: true } : { "save-dev": true }; + this.packageManager = await getInstaller.call(this); + } - this.scheduleInstallTask(this.packageManager, ["webpack-defaults", "bluebird"], opts); + public default(): void { + const currentDirName = path.basename(this.destinationPath()); + if (currentDirName !== this.props.name) { + this.log(` + Your project must be inside a folder named ${this.props.name} + I will create this folder for you. + `); + const pathToProjectDir: string = this.destinationPath(this.props.name); + try { + fs.mkdirSync(pathToProjectDir, { recursive: true }); + } catch (error) { + this.utils.logger.error("Failed to create directory"); + this.utils.logger.error(error); } - }; + this.destinationRoot(pathToProjectDir); + } + } + + public writing(): void { + const packageJsonTemplatePath = "../addon-template/package.json.js"; + this.fs.extendJSON( + this.destinationPath("package.json"), + // eslint-disable-next-line @typescript-eslint/no-var-requires + require(packageJsonTemplatePath)(this.props.name), + ); + + let files = []; + try { + // An array of file paths (relative to `./templates`) of files to be copied to the generated project + files = getFiles(this.resolvedTemplatePath); + } catch (error) { + this.utils.logger.error(`Failed to generate starter template.\n ${error}`); + process.exit(2); + } + + // Template file paths should be of the form `path/to/_file.js.tpl` + const copyTemplateFiles = files.filter((filePath) => path.basename(filePath).startsWith("_")); + + // File paths should be of the form `path/to/file.js.tpl` + const copyFiles = files.filter((filePath) => !copyTemplateFiles.includes(filePath)); + + copyFiles.forEach((filePath) => { + // `absolute-path/to/file.js.tpl` -> `destination-path/file.js` + const destFilePath = path.relative(this.resolvedTemplatePath, filePath).replace(".tpl", ""); + this.fs.copyTpl(filePath, this.destinationPath(destFilePath)); + }); + + copyTemplateFiles.forEach((filePath) => { + // `absolute-path/to/_file.js.tpl` -> `destination-path/file.js` + const destFilePath = path + .relative(this.resolvedTemplatePath, filePath) + .replace("_", "") + .replace(".tpl", ""); + this.fs.copyTpl(filePath, this.destinationPath(destFilePath), templateFn(this)); + }); + } + + public install(): void { + const opts: { + dev?: boolean; + "save-dev"?: boolean; + } = this.packageManager === "yarn" ? { dev: true } : { "save-dev": true }; + + this.scheduleInstallTask(this.packageManager, ["webpack-defaults", "bluebird"], opts); + } + }; }; export default addonGenerator; diff --git a/packages/generators/src/handlers.ts b/packages/generators/src/handlers.ts index 5c5061b1f4c..9d3a213686f 100644 --- a/packages/generators/src/handlers.ts +++ b/packages/generators/src/handlers.ts @@ -1,5 +1,5 @@ import * as defaultHandler from "./handlers/default"; export default { - default: defaultHandler, + default: defaultHandler, }; diff --git a/packages/generators/src/handlers/default.ts b/packages/generators/src/handlers/default.ts index ee6a075965e..d025b0bce3b 100644 --- a/packages/generators/src/handlers/default.ts +++ b/packages/generators/src/handlers/default.ts @@ -3,7 +3,7 @@ import { CustomGenerator } from "../types"; const templatePath = path.resolve(__dirname, "../../init-template/default"); const resolveFile = (file: string): string => { - return path.resolve(templatePath, file); + return path.resolve(templatePath, file); }; /** @@ -13,154 +13,154 @@ const resolveFile = (file: string): string => { */ export async function questions( - self: CustomGenerator, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - Question: Record, + self: CustomGenerator, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Question: Record, ): Promise { - // Handle JS language solutions - const { langType } = await Question.List( - self, - "langType", - "Which of the following JS solutions do you want to use?", - ["none", "ES6", "Typescript"], - "none", - self.force, - ); - - switch (langType) { - case "ES6": - self.dependencies.push("babel-loader", "@babel/core", "@babel/preset-env"); - break; - case "Typescript": - self.dependencies.push("typescript", "ts-loader"); - break; - } - - // Configure devServer configuraion - const { devServer } = await Question.Confirm( - self, - "devServer", - "Do you want to use webpack-dev-server?", - true, - self.force, - ); - if (devServer) { - self.dependencies.push("webpack-dev-server"); - } - - // Handle addition of html-webpack-plugin - const { htmlWebpackPlugin } = await Question.Confirm( - self, - "htmlWebpackPlugin", - "Do you want to simplify the creation of HTML files for your bundle?", - true, - self.force, - ); - if (htmlWebpackPlugin) { - self.dependencies.push("html-webpack-plugin"); - } - - // Handle addition of workbox-webpack-plugin - const { workboxWebpackPlugin } = await Question.Confirm( - self, - "workboxWebpackPlugin", - "Do you want to add PWA support?", - true, - self.force, - ); - if (workboxWebpackPlugin) { - self.dependencies.push("workbox-webpack-plugin"); - } - - // Store all answers for generation + // Handle JS language solutions + const { langType } = await Question.List( + self, + "langType", + "Which of the following JS solutions do you want to use?", + ["none", "ES6", "Typescript"], + "none", + self.force, + ); + + switch (langType) { + case "ES6": + self.dependencies.push("babel-loader", "@babel/core", "@babel/preset-env"); + break; + case "Typescript": + self.dependencies.push("typescript", "ts-loader"); + break; + } + + // Configure devServer configuraion + const { devServer } = await Question.Confirm( + self, + "devServer", + "Do you want to use webpack-dev-server?", + true, + self.force, + ); + if (devServer) { + self.dependencies.push("webpack-dev-server"); + } + + // Handle addition of html-webpack-plugin + const { htmlWebpackPlugin } = await Question.Confirm( + self, + "htmlWebpackPlugin", + "Do you want to simplify the creation of HTML files for your bundle?", + true, + self.force, + ); + if (htmlWebpackPlugin) { + self.dependencies.push("html-webpack-plugin"); + } + + // Handle addition of workbox-webpack-plugin + const { workboxWebpackPlugin } = await Question.Confirm( + self, + "workboxWebpackPlugin", + "Do you want to add PWA support?", + true, + self.force, + ); + if (workboxWebpackPlugin) { + self.dependencies.push("workbox-webpack-plugin"); + } + + // Store all answers for generation + self.answers = { + ...self.answers, + langType, + devServer, + htmlWebpackPlugin, + workboxWebpackPlugin, + }; + + // Handle CSS solutions + const { cssType } = await Question.List( + self, + "cssType", + "Which of the following CSS solutions do you want to use?", + ["none", "CSS only", "SASS", "LESS", "Stylus"], + "none", + self.force, + ); + + if (cssType == "none") { self.answers = { - ...self.answers, - langType, - devServer, - htmlWebpackPlugin, - workboxWebpackPlugin, - }; - - // Handle CSS solutions - const { cssType } = await Question.List( - self, - "cssType", - "Which of the following CSS solutions do you want to use?", - ["none", "CSS only", "SASS", "LESS", "Stylus"], - "none", - self.force, - ); - - if (cssType == "none") { - self.answers = { - ...self.answers, - cssType, - isCSS: false, - isPostCSS: false, - extractPlugin: "No", - }; - return; - } - - const { isCSS } = - cssType != "CSS only" - ? await Question.Confirm( - self, - "isCSS", - `Will you be using CSS styles along with ${cssType} in your project?`, - true, - self.force, - ) - : { isCSS: true }; - - const { isPostCSS } = await Question.Confirm( - self, - "isPostCSS", - "Will you be using PostCSS in your project?", - cssType == "CSS only", - self.force, - ); - - const { extractPlugin } = await Question.List( - self, - "extractPlugin", - "Do you want to extract CSS for every file?", - ["No", "Only for Production", "Yes"], - "No", - self.force, - ); - - switch (cssType) { - case "SASS": - self.dependencies.push("sass-loader", "sass"); - break; - case "LESS": - self.dependencies.push("less-loader", "less"); - break; - case "Stylus": - self.dependencies.push("stylus-loader", "stylus"); - break; - } - - if (isCSS) { - self.dependencies.push("style-loader", "css-loader"); - } - - if (isPostCSS) { - self.dependencies.push("postcss-loader", "postcss", "autoprefixer"); - } - - if (extractPlugin !== "No") { - self.dependencies.push("mini-css-extract-plugin"); - } - - self.answers = { - ...self.answers, - cssType, - isCSS, - isPostCSS, - extractPlugin, + ...self.answers, + cssType, + isCSS: false, + isPostCSS: false, + extractPlugin: "No", }; + return; + } + + const { isCSS } = + cssType != "CSS only" + ? await Question.Confirm( + self, + "isCSS", + `Will you be using CSS styles along with ${cssType} in your project?`, + true, + self.force, + ) + : { isCSS: true }; + + const { isPostCSS } = await Question.Confirm( + self, + "isPostCSS", + "Will you be using PostCSS in your project?", + cssType == "CSS only", + self.force, + ); + + const { extractPlugin } = await Question.List( + self, + "extractPlugin", + "Do you want to extract CSS for every file?", + ["No", "Only for Production", "Yes"], + "No", + self.force, + ); + + switch (cssType) { + case "SASS": + self.dependencies.push("sass-loader", "sass"); + break; + case "LESS": + self.dependencies.push("less-loader", "less"); + break; + case "Stylus": + self.dependencies.push("stylus-loader", "stylus"); + break; + } + + if (isCSS) { + self.dependencies.push("style-loader", "css-loader"); + } + + if (isPostCSS) { + self.dependencies.push("postcss-loader", "postcss", "autoprefixer"); + } + + if (extractPlugin !== "No") { + self.dependencies.push("mini-css-extract-plugin"); + } + + self.answers = { + ...self.answers, + cssType, + isCSS, + isPostCSS, + extractPlugin, + }; } /** @@ -168,54 +168,50 @@ export async function questions( * @param self Generator values */ export function generate(self: CustomGenerator): void { - self.fs.extendJSON( - self.destinationPath("package.json"), - // eslint-disable-next-line @typescript-eslint/no-var-requires - require(resolveFile("package.json.js"))(self.answers.devServer), - ); - - // Generate entry file - let entry = "./src/index."; - if (self.answers.langType == "Typescript") { - entry += "ts"; - } else { - entry += "js"; - } - self.fs.copyTpl(resolveFile("index.js"), self.destinationPath(entry)); - - // Generate README - self.fs.copyTpl(resolveFile("README.md"), self.destinationPath("README.md"), {}); - - // Generate HTML file - self.fs.copyTpl( - resolveFile("template.html.tpl"), - self.destinationPath("index.html"), - self.answers, - ); - - // Generate webpack configuration - self.fs.copyTpl( - resolveFile("webpack.configjs.tpl"), - self.destinationPath("webpack.config.js"), - { ...self.answers, entry }, - ); - self.configurationPath = self.destinationPath("webpack.config.js"); - - // Generate JS language essentials - switch (self.answers.langType) { - case "ES6": - self.fs.copyTpl(resolveFile(".babelrc"), self.destinationPath(".babelrc")); - break; - case "Typescript": - self.fs.copyTpl(resolveFile("tsconfig.json"), self.destinationPath("tsconfig.json")); - break; - } - - // Generate postcss configuration - if (self.answers.isPostCSS) { - self.fs.copyTpl( - resolveFile("postcss.config.js"), - self.destinationPath("postcss.config.js"), - ); - } + self.fs.extendJSON( + self.destinationPath("package.json"), + // eslint-disable-next-line @typescript-eslint/no-var-requires + require(resolveFile("package.json.js"))(self.answers.devServer), + ); + + // Generate entry file + let entry = "./src/index."; + if (self.answers.langType == "Typescript") { + entry += "ts"; + } else { + entry += "js"; + } + self.fs.copyTpl(resolveFile("index.js"), self.destinationPath(entry)); + + // Generate README + self.fs.copyTpl(resolveFile("README.md"), self.destinationPath("README.md"), {}); + + // Generate HTML file + self.fs.copyTpl( + resolveFile("template.html.tpl"), + self.destinationPath("index.html"), + self.answers, + ); + + // Generate webpack configuration + self.fs.copyTpl(resolveFile("webpack.configjs.tpl"), self.destinationPath("webpack.config.js"), { + ...self.answers, + entry, + }); + self.configurationPath = self.destinationPath("webpack.config.js"); + + // Generate JS language essentials + switch (self.answers.langType) { + case "ES6": + self.fs.copyTpl(resolveFile(".babelrc"), self.destinationPath(".babelrc")); + break; + case "Typescript": + self.fs.copyTpl(resolveFile("tsconfig.json"), self.destinationPath("tsconfig.json")); + break; + } + + // Generate postcss configuration + if (self.answers.isPostCSS) { + self.fs.copyTpl(resolveFile("postcss.config.js"), self.destinationPath("postcss.config.js")); + } } diff --git a/packages/generators/src/index.ts b/packages/generators/src/index.ts index f6aa7b5f339..3faa3dd0a7f 100644 --- a/packages/generators/src/index.ts +++ b/packages/generators/src/index.ts @@ -5,121 +5,121 @@ import addonGenerator from "./addon-generator"; import initGenerator from "./init-generator"; class GeneratorsCommand { - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any - async apply(cli: any): Promise { - const { logger } = cli; + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any + async apply(cli: any): Promise { + const { logger } = cli; - await cli.makeCommand( + await cli.makeCommand( + { + name: "init [generation-path]", + alias: ["create", "new", "c", "n"], + description: "Initialize a new webpack project.", + argsDescription: { + "generation-path": "Path to the installation directory, e.g. ./projectName", + }, + usage: "[generation-path] [options]", + pkg: "@webpack-cli/generators", + }, + [ + { + name: "template", + alias: "t", + configs: [{ type: "string" }], + description: "Type of template", + defaultValue: "default", + }, + { + name: "force", + alias: "f", + configs: [ { - name: "init [generation-path]", - alias: ["create", "new", "c", "n"], - description: "Initialize a new webpack project.", - argsDescription: { - "generation-path": "Path to the installation directory, e.g. ./projectName", - }, - usage: "[generation-path] [options]", - pkg: "@webpack-cli/generators", + type: "enum", + values: [true], }, - [ - { - name: "template", - alias: "t", - configs: [{ type: "string" }], - description: "Type of template", - defaultValue: "default", - }, - { - name: "force", - alias: "f", - configs: [ - { - type: "enum", - values: [true], - }, - ], - description: "Generate without questions (ideally) using default answers", - }, - ], - async (generationPath, options) => { - options.generationPath = generationPath || "."; + ], + description: "Generate without questions (ideally) using default answers", + }, + ], + async (generationPath, options) => { + options.generationPath = generationPath || "."; - const env = yeoman.createEnv([], { - cwd: options.generationPath, - }); - const generatorName = "webpack-init-generator"; + const env = yeoman.createEnv([], { + cwd: options.generationPath, + }); + const generatorName = "webpack-init-generator"; - env.registerStub(initGenerator, generatorName); + env.registerStub(initGenerator, generatorName); - env.run(generatorName, { cli, options }, () => { - logger.success("Project has been initialised with webpack!"); - }); - }, - ); + env.run(generatorName, { cli, options }, () => { + logger.success("Project has been initialised with webpack!"); + }); + }, + ); - await cli.makeCommand( - { - name: "loader [output-path]", - alias: "l", - description: "Scaffold a loader.", - argsDescription: { - "output-path": "Path to the output directory, e.g. ./loaderName", - }, - usage: "[output-path] [options]", - pkg: "@webpack-cli/generators", - }, - [ - { - name: "template", - alias: "t", - configs: [{ type: "string" }], - description: "Type of template", - defaultValue: "default", - }, - ], - async (outputPath, options) => { - const env = yeoman.createEnv([], { cwd: outputPath }); - const generatorName = "webpack-loader-generator"; + await cli.makeCommand( + { + name: "loader [output-path]", + alias: "l", + description: "Scaffold a loader.", + argsDescription: { + "output-path": "Path to the output directory, e.g. ./loaderName", + }, + usage: "[output-path] [options]", + pkg: "@webpack-cli/generators", + }, + [ + { + name: "template", + alias: "t", + configs: [{ type: "string" }], + description: "Type of template", + defaultValue: "default", + }, + ], + async (outputPath, options) => { + const env = yeoman.createEnv([], { cwd: outputPath }); + const generatorName = "webpack-loader-generator"; - env.registerStub(loaderGenerator, generatorName); + env.registerStub(loaderGenerator, generatorName); - env.run(generatorName, { cli, options }, () => { - logger.success("Loader template has been successfully scaffolded."); - }); - }, - ); + env.run(generatorName, { cli, options }, () => { + logger.success("Loader template has been successfully scaffolded."); + }); + }, + ); - await cli.makeCommand( - { - name: "plugin [output-path]", - alias: "p", - description: "Scaffold a plugin.", - argsDescription: { - "output-path": "Path to the output directory, e.g. ./pluginName", - }, - usage: "[output-path] [options]", - pkg: "@webpack-cli/generators", - }, - [ - { - name: "template", - alias: "t", - configs: [{ type: "string" }], - description: "Type of template", - defaultValue: "default", - }, - ], - async (outputPath, options) => { - const env = yeoman.createEnv([], { cwd: outputPath }); - const generatorName = "webpack-plugin-generator"; + await cli.makeCommand( + { + name: "plugin [output-path]", + alias: "p", + description: "Scaffold a plugin.", + argsDescription: { + "output-path": "Path to the output directory, e.g. ./pluginName", + }, + usage: "[output-path] [options]", + pkg: "@webpack-cli/generators", + }, + [ + { + name: "template", + alias: "t", + configs: [{ type: "string" }], + description: "Type of template", + defaultValue: "default", + }, + ], + async (outputPath, options) => { + const env = yeoman.createEnv([], { cwd: outputPath }); + const generatorName = "webpack-plugin-generator"; - env.registerStub(pluginGenerator, generatorName); + env.registerStub(pluginGenerator, generatorName); - env.run(generatorName, { cli, options }, () => { - logger.success("Plugin template has been successfully scaffolded."); - }); - }, - ); - } + env.run(generatorName, { cli, options }, () => { + logger.success("Plugin template has been successfully scaffolded."); + }); + }, + ); + } } export default GeneratorsCommand; diff --git a/packages/generators/src/init-generator.ts b/packages/generators/src/init-generator.ts index 8196e104884..5e54686d808 100644 --- a/packages/generators/src/init-generator.ts +++ b/packages/generators/src/init-generator.ts @@ -17,110 +17,110 @@ import handlers from "./handlers"; * */ export default class InitGenerator extends CustomGenerator { - public answers: Record; - public configurationPath: string; - public force: boolean; - public generationPath: string; - public packageManager: string; - public resolvedGenerationPath: string; - public supportedTemplates: string[]; - public template: string; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - public utils: any; + public answers: Record; + public configurationPath: string; + public force: boolean; + public generationPath: string; + public packageManager: string; + public resolvedGenerationPath: string; + public supportedTemplates: string[]; + public template: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + public utils: any; - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any - public constructor(args: any, opts: any) { - super(args, opts); + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any + public constructor(args: any, opts: any) { + super(args, opts); - const { options } = opts; + const { options } = opts; - this.template = options.template; - this.generationPath = options.generationPath; - this.resolvedGenerationPath = path.resolve(process.cwd(), this.generationPath); - this.force = options.force; - this.dependencies = ["webpack", "webpack-cli"]; - this.supportedTemplates = Object.keys(handlers); - this.answers = {}; - const { cli } = opts; - this.utils = cli.utils; - } + this.template = options.template; + this.generationPath = options.generationPath; + this.resolvedGenerationPath = path.resolve(process.cwd(), this.generationPath); + this.force = options.force; + this.dependencies = ["webpack", "webpack-cli"]; + this.supportedTemplates = Object.keys(handlers); + this.answers = {}; + const { cli } = opts; + this.utils = cli.utils; + } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - public async prompting(): Promise { - if (!existsSync(this.resolvedGenerationPath)) { - this.utils.logger.log( - `${blue( - "ℹ INFO ", - )} supplied generation path doesn't exist, required folders will be created.`, - ); - try { - mkdirSync(this.resolvedGenerationPath, { recursive: true }); - } catch (error) { - this.utils.logger.error(`Failed to create directory.\n ${error}`); - process.exit(2); - } - } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + public async prompting(): Promise { + if (!existsSync(this.resolvedGenerationPath)) { + this.utils.logger.log( + `${blue( + "ℹ INFO ", + )} supplied generation path doesn't exist, required folders will be created.`, + ); + try { + mkdirSync(this.resolvedGenerationPath, { recursive: true }); + } catch (error) { + this.utils.logger.error(`Failed to create directory.\n ${error}`); + process.exit(2); + } + } - this.template = await getTemplate.call(this); + this.template = await getTemplate.call(this); - await handlers[this.template].questions(this, Question); + await handlers[this.template].questions(this, Question); - // Handle installation of prettier - try { - // eslint-disable-next-line node/no-extraneous-require - require.resolve("prettier"); - } catch (err) { - const { installPrettier } = await Question.Confirm( - this, - "installPrettier", - "Do you like to install prettier to format generated configuration?", - true, - false, - ); + // Handle installation of prettier + try { + // eslint-disable-next-line node/no-extraneous-require + require.resolve("prettier"); + } catch (err) { + const { installPrettier } = await Question.Confirm( + this, + "installPrettier", + "Do you like to install prettier to format generated configuration?", + true, + false, + ); - if (installPrettier) { - this.dependencies.push("prettier"); - } - } + if (installPrettier) { + this.dependencies.push("prettier"); + } } + } - public async installPlugins(): Promise { - this.packageManager = await getInstaller.call(this); + public async installPlugins(): Promise { + this.packageManager = await getInstaller.call(this); - const opts: { - dev?: boolean; - "save-dev"?: boolean; - } = this.packageManager === "yarn" ? { dev: true } : { "save-dev": true }; + const opts: { + dev?: boolean; + "save-dev"?: boolean; + } = this.packageManager === "yarn" ? { dev: true } : { "save-dev": true }; - this.scheduleInstallTask(this.packageManager, this.dependencies, opts, { - cwd: this.generationPath, - }); - } + this.scheduleInstallTask(this.packageManager, this.dependencies, opts, { + cwd: this.generationPath, + }); + } - public writing(): void { - this.utils.logger.log(`${blue("ℹ INFO ")} Initialising project...`); - handlers[this.template].generate(this); - } + public writing(): void { + this.utils.logger.log(`${blue("ℹ INFO ")} Initialising project...`); + handlers[this.template].generate(this); + } - public end(): void { - // Prettify configuration file if possible - try { - // eslint-disable-next-line node/no-extraneous-require, @typescript-eslint/no-var-requires - const prettier = require("prettier"); - const source = readFileSync(this.configurationPath, { - encoding: "utf8", - }); - const formattedSource = prettier.format(source, { - parser: "babel", - }); - writeFileSync(this.configurationPath, formattedSource); - } catch (err) { - this.utils.logger.log( - `${yellow( - `⚠ Generated configuration may not be properly formatted as prettier is not installed.`, - )}`, - ); - return; - } + public end(): void { + // Prettify configuration file if possible + try { + // eslint-disable-next-line node/no-extraneous-require, @typescript-eslint/no-var-requires + const prettier = require("prettier"); + const source = readFileSync(this.configurationPath, { + encoding: "utf8", + }); + const formattedSource = prettier.format(source, { + parser: "babel", + }); + writeFileSync(this.configurationPath, formattedSource); + } catch (err) { + this.utils.logger.log( + `${yellow( + `⚠ Generated configuration may not be properly formatted as prettier is not installed.`, + )}`, + ); + return; } + } } diff --git a/packages/generators/src/loader-generator.ts b/packages/generators/src/loader-generator.ts index fe4ce3c0722..6b39f468a37 100644 --- a/packages/generators/src/loader-generator.ts +++ b/packages/generators/src/loader-generator.ts @@ -10,13 +10,13 @@ import { toKebabCase } from "./utils/helpers"; * @returns {string} The formatted string */ export function makeLoaderName(name: string): string { - name = toKebabCase(name); + name = toKebabCase(name); - if (!/loader$/.test(name)) { - name += "-loader"; - } + if (!/loader$/.test(name)) { + name += "-loader"; + } - return name; + return name; } /** @@ -29,18 +29,18 @@ export function makeLoaderName(name: string): string { */ export const LoaderGenerator = addonGenerator( - [ - { - default: "my-loader", - filter: makeLoaderName, - message: "Loader name", - name: "name", - type: "input", - validate: (str: string): boolean => str.length > 0, - }, - ], - path.resolve(__dirname, "../loader-template"), - (gen): Record => ({ name: gen.props.name }), + [ + { + default: "my-loader", + filter: makeLoaderName, + message: "Loader name", + name: "name", + type: "input", + validate: (str: string): boolean => str.length > 0, + }, + ], + path.resolve(__dirname, "../loader-template"), + (gen): Record => ({ name: gen.props.name }), ); export default LoaderGenerator; diff --git a/packages/generators/src/plugin-generator.ts b/packages/generators/src/plugin-generator.ts index 3cb8e28f7c2..155bff965ad 100644 --- a/packages/generators/src/plugin-generator.ts +++ b/packages/generators/src/plugin-generator.ts @@ -11,20 +11,20 @@ import { toKebabCase, toUpperCamelCase } from "./utils/helpers"; * @extends {Generator} */ export const PluginGenerator = addonGenerator( - [ - { - default: "my-webpack-plugin", - filter: toKebabCase, - message: "Plugin name", - name: "name", - type: "input", - validate: (str: string): boolean => str.length > 0, - }, - ], - path.resolve(__dirname, "../plugin-template"), - (gen): Record => ({ - name: toUpperCamelCase(gen.props.name), - }), + [ + { + default: "my-webpack-plugin", + filter: toKebabCase, + message: "Plugin name", + name: "name", + type: "input", + validate: (str: string): boolean => str.length > 0, + }, + ], + path.resolve(__dirname, "../plugin-template"), + (gen): Record => ({ + name: toUpperCamelCase(gen.props.name), + }), ); export default PluginGenerator; diff --git a/packages/generators/src/types/index.ts b/packages/generators/src/types/index.ts index 142e74184ae..791abe1ae2f 100644 --- a/packages/generators/src/types/index.ts +++ b/packages/generators/src/types/index.ts @@ -1,8 +1,8 @@ import Generator from "yeoman-generator"; export class CustomGenerator extends Generator { - public force: boolean; - public dependencies: string[]; - public answers: Record; - public configurationPath: string; + public force: boolean; + public dependencies: string[]; + public answers: Record; + public configurationPath: string; } diff --git a/packages/generators/src/utils/helpers.ts b/packages/generators/src/utils/helpers.ts index 98f59794015..5f0aa6cd23a 100644 --- a/packages/generators/src/utils/helpers.ts +++ b/packages/generators/src/utils/helpers.ts @@ -8,7 +8,7 @@ const regex = /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+ * @returns output string */ export function toKebabCase(str: string): string { - return str.match(regex).join("-").toLowerCase(); + return str.match(regex).join("-").toLowerCase(); } /** @@ -17,49 +17,49 @@ export function toKebabCase(str: string): string { * @returns {string} output string */ export function toUpperCamelCase(str: string): string { - return str - .match(regex) - .map((x) => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase()) - .join(""); + return str + .match(regex) + .map((x) => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase()) + .join(""); } export async function getInstaller(): Promise { - const installers = this.utils.getAvailableInstallers(); + const installers = this.utils.getAvailableInstallers(); - if (installers.length === 1) { - return installers[0]; - } + if (installers.length === 1) { + return installers[0]; + } - // Prompt for the package manager of choice - const defaultPackager = this.utils.getPackageManager(); - const { packager } = await List( - this, - "packager", - "Pick a package manager:", - installers, - defaultPackager, - this.force, - ); - return packager; + // Prompt for the package manager of choice + const defaultPackager = this.utils.getPackageManager(); + const { packager } = await List( + this, + "packager", + "Pick a package manager:", + installers, + defaultPackager, + this.force, + ); + return packager; } export async function getTemplate(): Promise { - if (this.supportedTemplates.includes(this.template)) { - return this.template; - } + if (this.supportedTemplates.includes(this.template)) { + return this.template; + } - this.utils.logger.warn( - `⚠ ${this.template} is not a valid template, please select one from below`, - ); + this.utils.logger.warn( + `⚠ ${this.template} is not a valid template, please select one from below`, + ); - const { selectedTemplate } = await List( - this, - "selectedTemplate", - "Select a valid template from below:", - this.supportedTemplates, - "default", - false, - ); + const { selectedTemplate } = await List( + this, + "selectedTemplate", + "Select a valid template from below:", + this.supportedTemplates, + "default", + false, + ); - return selectedTemplate; + return selectedTemplate; } diff --git a/packages/generators/src/utils/scaffold-utils.ts b/packages/generators/src/utils/scaffold-utils.ts index 08babde5720..5c07b15513f 100644 --- a/packages/generators/src/utils/scaffold-utils.ts +++ b/packages/generators/src/utils/scaffold-utils.ts @@ -6,70 +6,70 @@ type CustomGeneratorBoolPrompt = { [x: string]: boolean } | Promise<{ [x: string /* eslint-disable @typescript-eslint/no-explicit-any */ export function List( - self: Generator, - name: string, - message: string, - choices: string[], - defaultChoice?: string, - skip = false, + self: Generator, + name: string, + message: string, + choices: string[], + defaultChoice?: string, + skip = false, ): CustomGeneratorStringPrompt { - if (skip) { - return { [name]: defaultChoice }; - } + if (skip) { + return { [name]: defaultChoice }; + } - return self.prompt([{ choices, message, name, type: "list", default: defaultChoice }]); + return self.prompt([{ choices, message, name, type: "list", default: defaultChoice }]); } export function Input( - self: Generator, - name: string, - message: string, - defaultChoice?: string, - skip = false, + self: Generator, + name: string, + message: string, + defaultChoice?: string, + skip = false, ): CustomGeneratorStringPrompt { - if (skip) { - return { [name]: defaultChoice }; - } + if (skip) { + return { [name]: defaultChoice }; + } - return self.prompt([{ default: defaultChoice, message, name, type: "input" }]); + return self.prompt([{ default: defaultChoice, message, name, type: "input" }]); } export function InputValidate( - self: Generator, - name: string, - message: string, - cb?: (input: string) => string | boolean, - defaultChoice?: string, - skip = false, + self: Generator, + name: string, + message: string, + cb?: (input: string) => string | boolean, + defaultChoice?: string, + skip = false, ): Record | any { - if (skip) { - return { [name]: defaultChoice }; - } + if (skip) { + return { [name]: defaultChoice }; + } - const input: Generator.Question = { - message, - name, - type: "input", - validate: cb, - }; + const input: Generator.Question = { + message, + name, + type: "input", + validate: cb, + }; - if (defaultChoice) { - input.default = defaultChoice; - } + if (defaultChoice) { + input.default = defaultChoice; + } - return self.prompt([input]); + return self.prompt([input]); } export function Confirm( - self: Generator, - name: string, - message: string, - defaultChoice = true, - skip = false, + self: Generator, + name: string, + message: string, + defaultChoice = true, + skip = false, ): CustomGeneratorBoolPrompt { - if (skip) { - return { [name]: defaultChoice }; - } + if (skip) { + return { [name]: defaultChoice }; + } - return self.prompt([{ default: defaultChoice, message, name, type: "confirm" }]); + return self.prompt([{ default: defaultChoice, message, name, type: "confirm" }]); } diff --git a/packages/info/CHANGELOG.md b/packages/info/CHANGELOG.md index b9fadf73a0d..f35f2557df3 100644 --- a/packages/info/CHANGELOG.md +++ b/packages/info/CHANGELOG.md @@ -7,11 +7,11 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- prettier config ([#2719](https://github.com/webpack/webpack-cli/issues/2719)) ([181295f](https://github.com/webpack/webpack-cli/commit/181295fb1b1973c201c221813562219d85b845ae)) +- prettier config ([#2719](https://github.com/webpack/webpack-cli/issues/2719)) ([181295f](https://github.com/webpack/webpack-cli/commit/181295fb1b1973c201c221813562219d85b845ae)) ### Features -- **info:** add alias for --output ([#2709](https://github.com/webpack/webpack-cli/issues/2709)) ([3453053](https://github.com/webpack/webpack-cli/commit/34530530f99750a5efc382293127753f05fc8064)) +- **info:** add alias for --output ([#2709](https://github.com/webpack/webpack-cli/issues/2709)) ([3453053](https://github.com/webpack/webpack-cli/commit/34530530f99750a5efc382293127753f05fc8064)) ## [1.2.4](https://github.com/webpack/webpack-cli/compare/@webpack-cli/info@1.2.3...@webpack-cli/info@1.2.4) (2021-05-06) @@ -21,7 +21,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- grammar in description of `--output` ([#2554](https://github.com/webpack/webpack-cli/issues/2554)) ([c6f781d](https://github.com/webpack/webpack-cli/commit/c6f781d741da3b07b25756c053427e5c358ad14f)) +- grammar in description of `--output` ([#2554](https://github.com/webpack/webpack-cli/issues/2554)) ([c6f781d](https://github.com/webpack/webpack-cli/commit/c6f781d741da3b07b25756c053427e5c358ad14f)) ## [1.2.2](https://github.com/webpack/webpack-cli/compare/@webpack-cli/info@1.2.1...@webpack-cli/info@1.2.2) (2021-02-02) @@ -31,23 +31,23 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- the `--help` option is working without `webpack-dev-server` ([#2267](https://github.com/webpack/webpack-cli/issues/2267)) ([1dae54d](https://github.com/webpack/webpack-cli/commit/1dae54da94d3220437b9257efe512447023de1d3)) +- the `--help` option is working without `webpack-dev-server` ([#2267](https://github.com/webpack/webpack-cli/issues/2267)) ([1dae54d](https://github.com/webpack/webpack-cli/commit/1dae54da94d3220437b9257efe512447023de1d3)) # [1.2.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/info@1.1.0...@webpack-cli/info@1.2.0) (2020-12-25) ### Features -- display monorepos in info output ([#2203](https://github.com/webpack/webpack-cli/issues/2203)) ([d0acf30](https://github.com/webpack/webpack-cli/commit/d0acf3072edd8182c95e37997ac91789da899d66)) +- display monorepos in info output ([#2203](https://github.com/webpack/webpack-cli/issues/2203)) ([d0acf30](https://github.com/webpack/webpack-cli/commit/d0acf3072edd8182c95e37997ac91789da899d66)) # [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)) +- **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)) +- 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) @@ -61,8 +61,8 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- **info:** throw an error if help or version is passed as an arg ([#1737](https://github.com/webpack/webpack-cli/issues/1737)) ([c8ca878](https://github.com/webpack/webpack-cli/commit/c8ca87858b81e0c23e161d227558d2f0aeac003a)) -- **packages:** make packages have correct main paths to index ([#1366](https://github.com/webpack/webpack-cli/issues/1366)) ([5dd7bd6](https://github.com/webpack/webpack-cli/commit/5dd7bd62046568481996e48328b15a335557f8ae)) +- **info:** throw an error if help or version is passed as an arg ([#1737](https://github.com/webpack/webpack-cli/issues/1737)) ([c8ca878](https://github.com/webpack/webpack-cli/commit/c8ca87858b81e0c23e161d227558d2f0aeac003a)) +- **packages:** make packages have correct main paths to index ([#1366](https://github.com/webpack/webpack-cli/issues/1366)) ([5dd7bd6](https://github.com/webpack/webpack-cli/commit/5dd7bd62046568481996e48328b15a335557f8ae)) ## [1.0.1-alpha.4](https://github.com/ematipico/webpack-cli/compare/@webpack-cli/info@1.0.1-alpha.3...@webpack-cli/info@1.0.1-alpha.4) (2020-03-02) diff --git a/packages/info/src/index.ts b/packages/info/src/index.ts index fddf308f01c..e8658970bfa 100644 --- a/packages/info/src/index.ts +++ b/packages/info/src/index.ts @@ -1,91 +1,90 @@ import envinfo from "envinfo"; interface Information { - Binaries?: string[]; - Browsers?: string[]; - Monorepos?: string[]; - System?: string[]; - npmGlobalPackages?: string[]; - npmPackages?: string | string[]; + Binaries?: string[]; + Browsers?: string[]; + Monorepos?: string[]; + System?: string[]; + npmGlobalPackages?: string[]; + npmPackages?: string | string[]; } const DEFAULT_DETAILS: Information = { - Binaries: ["Node", "Yarn", "npm"], - Browsers: [ - "Brave Browser", - "Chrome", - "Chrome Canary", - "Edge", - "Firefox", - "Firefox Developer Edition", - "Firefox Nightly", - "Internet Explorer", - "Safari", - "Safari Technology Preview", - ], - Monorepos: ["Yarn Workspaces", "Lerna"], - System: ["OS", "CPU", "Memory"], - npmGlobalPackages: ["webpack", "webpack-cli"], - npmPackages: "*webpack*", + Binaries: ["Node", "Yarn", "npm"], + Browsers: [ + "Brave Browser", + "Chrome", + "Chrome Canary", + "Edge", + "Firefox", + "Firefox Developer Edition", + "Firefox Nightly", + "Internet Explorer", + "Safari", + "Safari Technology Preview", + ], + Monorepos: ["Yarn Workspaces", "Lerna"], + System: ["OS", "CPU", "Memory"], + npmGlobalPackages: ["webpack", "webpack-cli"], + npmPackages: "*webpack*", }; class InfoCommand { - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any - async apply(cli: any): Promise { - const { logger } = cli; + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any + async apply(cli: any): Promise { + const { logger } = cli; - await cli.makeCommand( + await cli.makeCommand( + { + name: "info", + alias: "i", + description: "Outputs information about your system.", + usage: "[options]", + pkg: "@webpack-cli/info", + }, + [ + { + name: "output", + alias: "o", + configs: [ { - name: "info", - alias: "i", - description: "Outputs information about your system.", - usage: "[options]", - pkg: "@webpack-cli/info", + type: "string", }, - [ - { - name: "output", - alias: "o", - configs: [ - { - type: "string", - }, - ], - description: - "To get the output in a specified format ( accept json or markdown )", - }, - ], - async (options) => { - let { output } = options; + ], + description: "To get the output in a specified format ( accept json or markdown )", + }, + ], + async (options) => { + let { output } = options; - const envinfoConfig = {}; + const envinfoConfig = {}; - if (output) { - // Remove quotes if exist - output = output.replace(/['"]+/g, ""); + if (output) { + // Remove quotes if exist + output = output.replace(/['"]+/g, ""); - switch (output) { - case "markdown": - envinfoConfig["markdown"] = true; - break; - case "json": - envinfoConfig["json"] = true; - break; - default: - logger.error(`'${output}' is not a valid value for output`); - process.exit(2); - } - } + switch (output) { + case "markdown": + envinfoConfig["markdown"] = true; + break; + case "json": + envinfoConfig["json"] = true; + break; + default: + logger.error(`'${output}' is not a valid value for output`); + process.exit(2); + } + } - let info = await envinfo.run(DEFAULT_DETAILS, envinfoConfig); + let info = await envinfo.run(DEFAULT_DETAILS, envinfoConfig); - info = info.replace(/npmPackages/g, "Packages"); - info = info.replace(/npmGlobalPackages/g, "Global Packages"); + info = info.replace(/npmPackages/g, "Packages"); + info = info.replace(/npmGlobalPackages/g, "Global Packages"); - logger.raw(info); - }, - ); - } + logger.raw(info); + }, + ); + } } export default InfoCommand; diff --git a/packages/serve/CHANGELOG.md b/packages/serve/CHANGELOG.md index 5090464e3d4..e24429f2fc7 100644 --- a/packages/serve/CHANGELOG.md +++ b/packages/serve/CHANGELOG.md @@ -7,36 +7,36 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- ci for dev server next ([#2841](https://github.com/webpack/webpack-cli/issues/2841)) ([54d34b7](https://github.com/webpack/webpack-cli/commit/54d34b723cbeaf8cc13cff45398530be1db911e4)) -- respect dev server CLI options for multi compiler mode ([de48278](https://github.com/webpack/webpack-cli/commit/de482784a4f8cbb9eacbbe1c6b6f3c62ef60567a)) -- using new dev server API for v4 ([#2886](https://github.com/webpack/webpack-cli/issues/2886)) ([f66d01f](https://github.com/webpack/webpack-cli/commit/f66d01f0e382b0b3ffc753ac7549eb252e19e26c)) +- ci for dev server next ([#2841](https://github.com/webpack/webpack-cli/issues/2841)) ([54d34b7](https://github.com/webpack/webpack-cli/commit/54d34b723cbeaf8cc13cff45398530be1db911e4)) +- respect dev server CLI options for multi compiler mode ([de48278](https://github.com/webpack/webpack-cli/commit/de482784a4f8cbb9eacbbe1c6b6f3c62ef60567a)) +- using new dev server API for v4 ([#2886](https://github.com/webpack/webpack-cli/issues/2886)) ([f66d01f](https://github.com/webpack/webpack-cli/commit/f66d01f0e382b0b3ffc753ac7549eb252e19e26c)) ## [1.5.1](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.5.0...@webpack-cli/serve@1.5.1) (2021-06-07) ### Bug Fixes -- broken serve with new CLI API ([#2770](https://github.com/webpack/webpack-cli/issues/2770)) ([2d7ab35](https://github.com/webpack/webpack-cli/commit/2d7ab3549c429193b4ed5fbc6174153c847e0330)) +- broken serve with new CLI API ([#2770](https://github.com/webpack/webpack-cli/issues/2770)) ([2d7ab35](https://github.com/webpack/webpack-cli/commit/2d7ab3549c429193b4ed5fbc6174153c847e0330)) # [1.5.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.4.0...@webpack-cli/serve@1.5.0) (2021-06-07) ### Bug Fixes -- prettier config ([#2719](https://github.com/webpack/webpack-cli/issues/2719)) ([181295f](https://github.com/webpack/webpack-cli/commit/181295fb1b1973c201c221813562219d85b845ae)) +- prettier config ([#2719](https://github.com/webpack/webpack-cli/issues/2719)) ([181295f](https://github.com/webpack/webpack-cli/commit/181295fb1b1973c201c221813562219d85b845ae)) ### Features -- new CLI options API for serve ([#2754](https://github.com/webpack/webpack-cli/issues/2754)) ([bb7c9d3](https://github.com/webpack/webpack-cli/commit/bb7c9d3c9b0dca11242e2febcd41805c063e1317)) +- new CLI options API for serve ([#2754](https://github.com/webpack/webpack-cli/issues/2754)) ([bb7c9d3](https://github.com/webpack/webpack-cli/commit/bb7c9d3c9b0dca11242e2febcd41805c063e1317)) # [1.4.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.3.1...@webpack-cli/serve@1.4.0) (2021-05-06) ### Bug Fixes -- avoid unnecessary searching port ([#2648](https://github.com/webpack/webpack-cli/issues/2648)) ([5063ed7](https://github.com/webpack/webpack-cli/commit/5063ed7970cd12fd042308edfccca8dbf249f0fc)) -- **serve:** do not set port client port directly ([#2624](https://github.com/webpack/webpack-cli/issues/2624)) ([ec18b8e](https://github.com/webpack/webpack-cli/commit/ec18b8e478ff1a5f8d85bbddc599001dfd69eba3)) +- avoid unnecessary searching port ([#2648](https://github.com/webpack/webpack-cli/issues/2648)) ([5063ed7](https://github.com/webpack/webpack-cli/commit/5063ed7970cd12fd042308edfccca8dbf249f0fc)) +- **serve:** do not set port client port directly ([#2624](https://github.com/webpack/webpack-cli/issues/2624)) ([ec18b8e](https://github.com/webpack/webpack-cli/commit/ec18b8e478ff1a5f8d85bbddc599001dfd69eba3)) ### Features -- add `server` alias for `serve` command ([#2631](https://github.com/webpack/webpack-cli/issues/2631)) ([c9ee947](https://github.com/webpack/webpack-cli/commit/c9ee947618c06447bc1f949e4d401e63f737f38d)) +- add `server` alias for `serve` command ([#2631](https://github.com/webpack/webpack-cli/issues/2631)) ([c9ee947](https://github.com/webpack/webpack-cli/commit/c9ee947618c06447bc1f949e4d401e63f737f38d)) ## [1.3.1](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.3.0...@webpack-cli/serve@1.3.1) (2021-03-27) @@ -46,50 +46,50 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- avoid deprecation message ([9d6dbda](https://github.com/webpack/webpack-cli/commit/9d6dbda93da167a1aaad03f599105a4fe7849dc3)) -- error message on invalid plugin options ([#2380](https://github.com/webpack/webpack-cli/issues/2380)) ([f9ce1d3](https://github.com/webpack/webpack-cli/commit/f9ce1d30b83bf0e0b4d91498d012c13c208e6e67)) +- avoid deprecation message ([9d6dbda](https://github.com/webpack/webpack-cli/commit/9d6dbda93da167a1aaad03f599105a4fe7849dc3)) +- error message on invalid plugin options ([#2380](https://github.com/webpack/webpack-cli/issues/2380)) ([f9ce1d3](https://github.com/webpack/webpack-cli/commit/f9ce1d30b83bf0e0b4d91498d012c13c208e6e67)) ### Features -- entries syntax ([#2369](https://github.com/webpack/webpack-cli/issues/2369)) ([6b31614](https://github.com/webpack/webpack-cli/commit/6b3161479578f572f803f579c7e71073eb797184)) +- entries syntax ([#2369](https://github.com/webpack/webpack-cli/issues/2369)) ([6b31614](https://github.com/webpack/webpack-cli/commit/6b3161479578f572f803f579c7e71073eb797184)) ## [1.2.2](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.2.1...@webpack-cli/serve@1.2.2) (2021-01-19) ### Bug Fixes -- pass all `argv` to configurations when `serve` command used ([#2345](https://github.com/webpack/webpack-cli/issues/2345)) ([5070b9b](https://github.com/webpack/webpack-cli/commit/5070b9bcbd5bdac00088d0c21486ad181a4df000)) -- respect `--stats`, `--color` and `--no-color` option for serve c… ([#2312](https://github.com/webpack/webpack-cli/issues/2312)) ([73d3fec](https://github.com/webpack/webpack-cli/commit/73d3feced18b4e3708f958707326a6642a594cf2)) +- pass all `argv` to configurations when `serve` command used ([#2345](https://github.com/webpack/webpack-cli/issues/2345)) ([5070b9b](https://github.com/webpack/webpack-cli/commit/5070b9bcbd5bdac00088d0c21486ad181a4df000)) +- respect `--stats`, `--color` and `--no-color` option for serve c… ([#2312](https://github.com/webpack/webpack-cli/issues/2312)) ([73d3fec](https://github.com/webpack/webpack-cli/commit/73d3feced18b4e3708f958707326a6642a594cf2)) ## [1.2.1](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.2.0...@webpack-cli/serve@1.2.1) (2020-12-31) ### Bug Fixes -- do not apply HotModuleReplacement plugin twice ([#2269](https://github.com/webpack/webpack-cli/issues/2269)) ([bb16d44](https://github.com/webpack/webpack-cli/commit/bb16d4481414a5f3c0cbeb18af690084b2ae4215)) -- respect the `output.publicPath` option for the `serve`command ([#2271](https://github.com/webpack/webpack-cli/issues/2271)) ([a3092ef](https://github.com/webpack/webpack-cli/commit/a3092ef2b51ece30221f7dd7b30a686626c1fd7a)) -- the `--help` option is working without `webpack-dev-server` ([#2267](https://github.com/webpack/webpack-cli/issues/2267)) ([1dae54d](https://github.com/webpack/webpack-cli/commit/1dae54da94d3220437b9257efe512447023de1d3)) -- the `--progress` option with the `serve` command ([#2265](https://github.com/webpack/webpack-cli/issues/2265)) ([952a188](https://github.com/webpack/webpack-cli/commit/952a1883b1a18c4fb38e8eb7bbbdb2aefc7942f4)) +- do not apply HotModuleReplacement plugin twice ([#2269](https://github.com/webpack/webpack-cli/issues/2269)) ([bb16d44](https://github.com/webpack/webpack-cli/commit/bb16d4481414a5f3c0cbeb18af690084b2ae4215)) +- respect the `output.publicPath` option for the `serve`command ([#2271](https://github.com/webpack/webpack-cli/issues/2271)) ([a3092ef](https://github.com/webpack/webpack-cli/commit/a3092ef2b51ece30221f7dd7b30a686626c1fd7a)) +- the `--help` option is working without `webpack-dev-server` ([#2267](https://github.com/webpack/webpack-cli/issues/2267)) ([1dae54d](https://github.com/webpack/webpack-cli/commit/1dae54da94d3220437b9257efe512447023de1d3)) +- the `--progress` option with the `serve` command ([#2265](https://github.com/webpack/webpack-cli/issues/2265)) ([952a188](https://github.com/webpack/webpack-cli/commit/952a1883b1a18c4fb38e8eb7bbbdb2aefc7942f4)) # [1.2.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.1.0...@webpack-cli/serve@1.2.0) (2020-12-25) ### Bug Fixes -- respect `--watch-options-stdin` ([2d1e001](https://github.com/webpack/webpack-cli/commit/2d1e001e7f4f560c2b36607bd1b29dfe2aa32066)) -- do not default host in webpack-dev-server v4 ([#2141](https://github.com/webpack/webpack-cli/issues/2141)) ([dbbe4d4](https://github.com/webpack/webpack-cli/commit/dbbe4d4bc93ff9147ba43fae2d2352fa3583558d)) -- do not default port in webpack-dev-server v4 ([#2126](https://github.com/webpack/webpack-cli/issues/2126)) ([cda3047](https://github.com/webpack/webpack-cli/commit/cda30471f51db4631a0f54b852c553de270f7f64)) -- set client port when using default port ([#2147](https://github.com/webpack/webpack-cli/issues/2147)) ([4b97348](https://github.com/webpack/webpack-cli/commit/4b973488a42c4e12d86e0324a4c7051d1380a6fa)) -- catch dev server import during webpack serve ([#2070](https://github.com/webpack/webpack-cli/issues/2070)) ([70bf770](https://github.com/webpack/webpack-cli/commit/70bf7708c21dffe6521f1800b9dec2a62d21cfe2)) -- respect `--color`/`--no-color` options ([#2042](https://github.com/webpack/webpack-cli/issues/2042)) ([09bd812](https://github.com/webpack/webpack-cli/commit/09bd8126e95c9675b1f6862451f629cd4c439adb)) +- respect `--watch-options-stdin` ([2d1e001](https://github.com/webpack/webpack-cli/commit/2d1e001e7f4f560c2b36607bd1b29dfe2aa32066)) +- do not default host in webpack-dev-server v4 ([#2141](https://github.com/webpack/webpack-cli/issues/2141)) ([dbbe4d4](https://github.com/webpack/webpack-cli/commit/dbbe4d4bc93ff9147ba43fae2d2352fa3583558d)) +- do not default port in webpack-dev-server v4 ([#2126](https://github.com/webpack/webpack-cli/issues/2126)) ([cda3047](https://github.com/webpack/webpack-cli/commit/cda30471f51db4631a0f54b852c553de270f7f64)) +- set client port when using default port ([#2147](https://github.com/webpack/webpack-cli/issues/2147)) ([4b97348](https://github.com/webpack/webpack-cli/commit/4b973488a42c4e12d86e0324a4c7051d1380a6fa)) +- catch dev server import during webpack serve ([#2070](https://github.com/webpack/webpack-cli/issues/2070)) ([70bf770](https://github.com/webpack/webpack-cli/commit/70bf7708c21dffe6521f1800b9dec2a62d21cfe2)) +- respect `--color`/`--no-color` options ([#2042](https://github.com/webpack/webpack-cli/issues/2042)) ([09bd812](https://github.com/webpack/webpack-cli/commit/09bd8126e95c9675b1f6862451f629cd4c439adb)) # [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)) +- 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)) +- 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) @@ -99,15 +99,15 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- peer dependencies for `webpack serve` ([#1317](https://github.com/webpack/webpack-cli/issues/1317)) ([f8ec203](https://github.com/webpack/webpack-cli/commit/f8ec20382702450134032a65403894573b04be8d)) -- **packages:** make packages have correct main paths to index ([#1366](https://github.com/webpack/webpack-cli/issues/1366)) ([5dd7bd6](https://github.com/webpack/webpack-cli/commit/5dd7bd62046568481996e48328b15a335557f8ae)) -- **serve:** merge CLI and devServer options correctly ([#1649](https://github.com/webpack/webpack-cli/issues/1649)) ([2cdf5ce](https://github.com/webpack/webpack-cli/commit/2cdf5ce159f63ac65b33f4aca4c82fa1e959fef5)) -- **serve:** supplying help or version as an arg should throw error ([#1694](https://github.com/webpack/webpack-cli/issues/1694)) ([6eb7883](https://github.com/webpack/webpack-cli/commit/6eb78833f910135ca798c0c28f8d236ef234a76c)) +- peer dependencies for `webpack serve` ([#1317](https://github.com/webpack/webpack-cli/issues/1317)) ([f8ec203](https://github.com/webpack/webpack-cli/commit/f8ec20382702450134032a65403894573b04be8d)) +- **packages:** make packages have correct main paths to index ([#1366](https://github.com/webpack/webpack-cli/issues/1366)) ([5dd7bd6](https://github.com/webpack/webpack-cli/commit/5dd7bd62046568481996e48328b15a335557f8ae)) +- **serve:** merge CLI and devServer options correctly ([#1649](https://github.com/webpack/webpack-cli/issues/1649)) ([2cdf5ce](https://github.com/webpack/webpack-cli/commit/2cdf5ce159f63ac65b33f4aca4c82fa1e959fef5)) +- **serve:** supplying help or version as an arg should throw error ([#1694](https://github.com/webpack/webpack-cli/issues/1694)) ([6eb7883](https://github.com/webpack/webpack-cli/commit/6eb78833f910135ca798c0c28f8d236ef234a76c)) ### Features -- allow multiple targets ([#1799](https://github.com/webpack/webpack-cli/issues/1799)) ([1724ddb](https://github.com/webpack/webpack-cli/commit/1724ddb9067d5c5ba2654d4e5473ee9de5610825)) -- serve integration ([#1712](https://github.com/webpack/webpack-cli/issues/1712)) ([d3e2936](https://github.com/webpack/webpack-cli/commit/d3e29368c40ee47e4f7a07c41281714645e20ea7)) +- allow multiple targets ([#1799](https://github.com/webpack/webpack-cli/issues/1799)) ([1724ddb](https://github.com/webpack/webpack-cli/commit/1724ddb9067d5c5ba2654d4e5473ee9de5610825)) +- serve integration ([#1712](https://github.com/webpack/webpack-cli/issues/1712)) ([d3e2936](https://github.com/webpack/webpack-cli/commit/d3e29368c40ee47e4f7a07c41281714645e20ea7)) ## [1.0.1-alpha.5](https://github.com/ematipico/webpack-cli/compare/@webpack-cli/serve@1.0.1-alpha.4...@webpack-cli/serve@1.0.1-alpha.5) (2020-03-02) @@ -129,4 +129,4 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- **init:** fix webpack config scaffold ([#1231](https://github.com/webpack/webpack-cli/issues/1231)) ([2dc495a](https://github.com/webpack/webpack-cli/commit/2dc495a8d050d28478c6c2533d7839e9ff78d76c)), closes [#1230](https://github.com/webpack/webpack-cli/issues/1230) +- **init:** fix webpack config scaffold ([#1231](https://github.com/webpack/webpack-cli/issues/1231)) ([2dc495a](https://github.com/webpack/webpack-cli/commit/2dc495a8d050d28478c6c2533d7839e9ff78d76c)), closes [#1230](https://github.com/webpack/webpack-cli/issues/1230) diff --git a/packages/serve/src/index.ts b/packages/serve/src/index.ts index 99aa17473c2..a76cf412896 100644 --- a/packages/serve/src/index.ts +++ b/packages/serve/src/index.ts @@ -1,372 +1,351 @@ import { devServerOptionsType } from "./types"; class ServeCommand { - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any - async apply(cli: any): Promise { - const { logger, webpack } = cli; - - const loadDevServerOptions = () => { - // TODO simplify this after drop webpack v4 and webpack-dev-server v3 - // eslint-disable-next-line @typescript-eslint/no-var-requires, node/no-extraneous-require - const devServer = require("webpack-dev-server"); - const isNewDevServerCLIAPI = typeof devServer.schema !== "undefined"; - - let options = {}; - - if (isNewDevServerCLIAPI) { - if (webpack.cli && typeof webpack.cli.getArguments === "function") { - options = webpack.cli.getArguments(devServer.schema); - } else { - options = devServer.cli.getArguments(); - } - } else { - // eslint-disable-next-line node/no-extraneous-require - options = require("webpack-dev-server/bin/cli-flags"); + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any + async apply(cli: any): Promise { + const { logger, webpack } = cli; + + const loadDevServerOptions = () => { + // TODO simplify this after drop webpack v4 and webpack-dev-server v3 + // eslint-disable-next-line @typescript-eslint/no-var-requires, node/no-extraneous-require + const devServer = require("webpack-dev-server"); + const isNewDevServerCLIAPI = typeof devServer.schema !== "undefined"; + + let options = {}; + + if (isNewDevServerCLIAPI) { + if (webpack.cli && typeof webpack.cli.getArguments === "function") { + options = webpack.cli.getArguments(devServer.schema); + } else { + options = devServer.cli.getArguments(); + } + } else { + // eslint-disable-next-line node/no-extraneous-require + options = require("webpack-dev-server/bin/cli-flags"); + } + + // Old options format + // { devServer: [{...}, {}...] } + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + if (options.devServer) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + return options.devServer; + } + + // New options format + // { flag1: {}, flag2: {} } + return Object.keys(options).map((key) => { + options[key].name = key; + + return options[key]; + }); + }; + + await cli.makeCommand( + { + name: "serve [entries...]", + alias: ["server", "s"], + description: "Run the webpack dev server.", + usage: "[entries...] [options]", + pkg: "@webpack-cli/serve", + dependencies: ["webpack-dev-server"], + }, + () => { + let devServerFlags = []; + + try { + devServerFlags = loadDevServerOptions(); + } catch (error) { + logger.error( + `You need to install 'webpack-dev-server' for running 'webpack serve'.\n${error}`, + ); + process.exit(2); + } + + const builtInOptions = cli.getBuiltInOptions().filter((option) => option.name !== "watch"); + + return [...builtInOptions, ...devServerFlags]; + }, + async (entries, options) => { + const builtInOptions = cli.getBuiltInOptions(); + let devServerFlags = []; + + try { + devServerFlags = loadDevServerOptions(); + } catch (error) { + // Nothing, to prevent future updates + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const webpackCLIOptions: Record = {}; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const devServerCLIOptions: Record = {}; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const processors: Array<(opts: Record) => void> = []; + + for (const optionName in options) { + const kebabedOption = cli.utils.toKebabCase(optionName); + // `webpack-dev-server` has own logic for the `--hot` option + const isBuiltInOption = + kebabedOption !== "hot" && + builtInOptions.find((builtInOption) => builtInOption.name === kebabedOption); + + if (isBuiltInOption) { + webpackCLIOptions[optionName] = options[optionName]; + } else { + const needToProcess = devServerFlags.find( + (devServerOption) => + devServerOption.name === kebabedOption && devServerOption.processor, + ); + + if (needToProcess) { + processors.push(needToProcess.processor); } - // Old options format - // { devServer: [{...}, {}...] } - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - if (options.devServer) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - return options.devServer; - } + devServerCLIOptions[optionName] = options[optionName]; + } + } - // New options format - // { flag1: {}, flag2: {} } - return Object.keys(options).map((key) => { - options[key].name = key; + for (const processor of processors) { + processor(devServerCLIOptions); + } - return options[key]; - }); + if (entries.length > 0) { + webpackCLIOptions.entry = [...entries, ...(webpackCLIOptions.entry || [])]; + } + + webpackCLIOptions.argv = { + ...options, + env: { WEBPACK_SERVE: true, ...options.env }, }; - await cli.makeCommand( - { - name: "serve [entries...]", - alias: ["server", "s"], - description: "Run the webpack dev server.", - usage: "[entries...] [options]", - pkg: "@webpack-cli/serve", - dependencies: ["webpack-dev-server"], - }, - () => { - let devServerFlags = []; - - try { - devServerFlags = loadDevServerOptions(); - } catch (error) { - logger.error( - `You need to install 'webpack-dev-server' for running 'webpack serve'.\n${error}`, - ); - process.exit(2); - } + const compiler = await cli.createCompiler(webpackCLIOptions); - const builtInOptions = cli - .getBuiltInOptions() - .filter((option) => option.name !== "watch"); + if (!compiler) { + return; + } - return [...builtInOptions, ...devServerFlags]; - }, - async (entries, options) => { - const builtInOptions = cli.getBuiltInOptions(); - let devServerFlags = []; + const servers = []; - try { - devServerFlags = loadDevServerOptions(); - } catch (error) { - // Nothing, to prevent future updates - } + if (cli.needWatchStdin(compiler) || devServerCLIOptions.stdin) { + // TODO remove in the next major release + // Compatibility with old `stdin` option for `webpack-dev-server` + // Should be removed for the next major release on both sides + if (devServerCLIOptions.stdin) { + delete devServerCLIOptions.stdin; + } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const webpackCLIOptions: Record = {}; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const devServerCLIOptions: Record = {}; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const processors: Array<(opts: Record) => void> = []; - - for (const optionName in options) { - const kebabedOption = cli.utils.toKebabCase(optionName); - // `webpack-dev-server` has own logic for the `--hot` option - const isBuiltInOption = - kebabedOption !== "hot" && - builtInOptions.find( - (builtInOption) => builtInOption.name === kebabedOption, - ); - - if (isBuiltInOption) { - webpackCLIOptions[optionName] = options[optionName]; - } else { - const needToProcess = devServerFlags.find( - (devServerOption) => - devServerOption.name === kebabedOption && devServerOption.processor, - ); - - if (needToProcess) { - processors.push(needToProcess.processor); - } - - devServerCLIOptions[optionName] = options[optionName]; - } + process.stdin.on("end", () => { + Promise.all( + servers.map((server) => { + if (typeof server.stop === "function") { + return server.stop(); } - for (const processor of processors) { - processor(devServerCLIOptions); - } - - if (entries.length > 0) { - webpackCLIOptions.entry = [...entries, ...(webpackCLIOptions.entry || [])]; - } + // TODO remove in the next major release + return new Promise((resolve) => { + server.close(() => { + resolve(); + }); + }); + }), + ).then(() => { + process.exit(0); + }); + }); + process.stdin.resume(); + } + + // eslint-disable-next-line @typescript-eslint/no-var-requires, node/no-extraneous-require + const DevServer = require("webpack-dev-server"); + const isNewDevServerCLIAPI = typeof DevServer.schema !== "undefined"; + + let devServerVersion; + + try { + // eslint-disable-next-line node/no-extraneous-require, @typescript-eslint/no-var-requires + 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); + } + + const compilers = + typeof compiler.compilers !== "undefined" ? compiler.compilers : [compiler]; + const possibleCompilers = compilers.filter((compiler) => compiler.options.devServer); + const compilersForDevServer = + possibleCompilers.length > 0 ? possibleCompilers : [compilers[0]]; + const isDevServer4 = devServerVersion.startsWith("4"); + const usedPorts = []; + + for (const compilerForDevServer of compilersForDevServer) { + let devServerOptions: devServerOptionsType; + + if (isNewDevServerCLIAPI) { + const args = devServerFlags.reduce((accumulator, flag) => { + accumulator[flag.name] = flag; + return accumulator; + }, {}); + const values = Object.keys(devServerCLIOptions).reduce((accumulator, name) => { + const kebabName = cli.utils.toKebabCase(name); + if (args[kebabName]) { + accumulator[kebabName] = options[name]; + } + return accumulator; + }, {}); + const result = { ...(compilerForDevServer.options.devServer || {}) }; + const problems = ( + webpack.cli && typeof webpack.cli.processArguments === "function" + ? webpack.cli + : DevServer.cli + ).processArguments(args, result, values); + + if (problems) { + const groupBy = (xs, key) => { + return xs.reduce((rv, x) => { + (rv[x[key]] = rv[x[key]] || []).push(x); + + return rv; + }, {}); + }; + + const problemsByPath = groupBy(problems, "path"); + + for (const path in problemsByPath) { + const problems = problemsByPath[path]; + problems.forEach((problem) => { + cli.logger.error( + `${cli.utils.capitalizeFirstLetter(problem.type.replace(/-/g, " "))}${ + problem.value ? ` '${problem.value}'` : "" + } for the '--${problem.argument}' option${ + problem.index ? ` by index '${problem.index}'` : "" + }`, + ); + + if (problem.expected) { + cli.logger.error(`Expected: '${problem.expected}'`); + } + }); + } + + process.exit(2); + } - webpackCLIOptions.argv = { - ...options, - env: { WEBPACK_SERVE: true, ...options.env }, + devServerOptions = result; + } else { + // TODO remove in the next major release + const mergeOptions = ( + devServerOptions: devServerOptionsType, + devServerCliOptions: devServerOptionsType, + ): devServerOptionsType => { + // CLI options should take precedence over devServer options, + // and CLI options should have no default values included + const options = { ...devServerOptions, ...devServerCliOptions }; + + if (devServerOptions.client && devServerCliOptions.client) { + // the user could set some client options in their devServer config, + // then also specify client options on the CLI + options.client = { + ...devServerOptions.client, + ...devServerCliOptions.client, }; + } + + return options; + }; + + devServerOptions = mergeOptions( + compilerForDevServer.options.devServer || {}, + devServerCLIOptions, + ); + } + + // TODO remove in the next major release + if (!isDevServer4) { + const getPublicPathOption = (): string => { + const normalizePublicPath = (publicPath): string => + typeof publicPath === "undefined" || publicPath === "auto" ? "/" : publicPath; + + if (options.outputPublicPath) { + return normalizePublicPath(compilerForDevServer.options.output.publicPath); + } + + if (devServerOptions.publicPath) { + return normalizePublicPath(devServerOptions.publicPath); + } + + return normalizePublicPath(compilerForDevServer.options.output.publicPath); + }; + const getStatsOption = (): string | boolean => { + if (options.stats) { + return options.stats; + } + + if (devServerOptions.stats) { + return devServerOptions.stats; + } + + return compilerForDevServer.options.stats; + }; + + devServerOptions.host = devServerOptions.host || "localhost"; + devServerOptions.port = devServerOptions.port || 8080; + devServerOptions.stats = getStatsOption(); + devServerOptions.publicPath = getPublicPathOption(); + } + + if (devServerOptions.port) { + const portNumber = Number(devServerOptions.port); + + if (usedPorts.find((port) => portNumber === port)) { + throw new Error( + "Unique ports must be specified for each devServer option in your webpack configuration. Alternatively, run only 1 devServer config using the --config-name flag to specify your desired config.", + ); + } - const compiler = await cli.createCompiler(webpackCLIOptions); - - if (!compiler) { - return; - } - - const servers = []; - - if (cli.needWatchStdin(compiler) || devServerCLIOptions.stdin) { - // TODO remove in the next major release - // Compatibility with old `stdin` option for `webpack-dev-server` - // Should be removed for the next major release on both sides - if (devServerCLIOptions.stdin) { - delete devServerCLIOptions.stdin; - } - - process.stdin.on("end", () => { - Promise.all( - servers.map((server) => { - if (typeof server.stop === "function") { - return server.stop(); - } - - // TODO remove in the next major release - return new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); - }), - ).then(() => { - process.exit(0); - }); - }); - process.stdin.resume(); - } + usedPorts.push(portNumber); + } - // eslint-disable-next-line @typescript-eslint/no-var-requires, node/no-extraneous-require - const DevServer = require("webpack-dev-server"); - const isNewDevServerCLIAPI = typeof DevServer.schema !== "undefined"; + try { + let server; - let devServerVersion; + // TODO: remove after dropping webpack-dev-server@v3 + if (isDevServer4) { + server = new DevServer(devServerOptions, compiler); + } else { + server = new DevServer(compiler, devServerOptions); + } - try { - // eslint-disable-next-line node/no-extraneous-require, @typescript-eslint/no-var-requires - 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); + if (typeof server.start === "function") { + await server.start(); + } else { + // TODO remove in the next major release + server.listen(devServerOptions.port, devServerOptions.host, (error): void => { + if (error) { + throw error; } + }); + } - const compilers = - typeof compiler.compilers !== "undefined" ? compiler.compilers : [compiler]; - const possibleCompilers = compilers.filter( - (compiler) => compiler.options.devServer, - ); - const compilersForDevServer = - possibleCompilers.length > 0 ? possibleCompilers : [compilers[0]]; - const isDevServer4 = devServerVersion.startsWith("4"); - const usedPorts = []; - - for (const compilerForDevServer of compilersForDevServer) { - let devServerOptions: devServerOptionsType; - - if (isNewDevServerCLIAPI) { - const args = devServerFlags.reduce((accumulator, flag) => { - accumulator[flag.name] = flag; - return accumulator; - }, {}); - const values = Object.keys(devServerCLIOptions).reduce( - (accumulator, name) => { - const kebabName = cli.utils.toKebabCase(name); - if (args[kebabName]) { - accumulator[kebabName] = options[name]; - } - return accumulator; - }, - {}, - ); - const result = { ...(compilerForDevServer.options.devServer || {}) }; - const problems = ( - webpack.cli && typeof webpack.cli.processArguments === "function" - ? webpack.cli - : DevServer.cli - ).processArguments(args, result, values); - - if (problems) { - const groupBy = (xs, key) => { - return xs.reduce((rv, x) => { - (rv[x[key]] = rv[x[key]] || []).push(x); - - return rv; - }, {}); - }; - - const problemsByPath = groupBy(problems, "path"); - - for (const path in problemsByPath) { - const problems = problemsByPath[path]; - problems.forEach((problem) => { - cli.logger.error( - `${cli.utils.capitalizeFirstLetter( - problem.type.replace(/-/g, " "), - )}${ - problem.value ? ` '${problem.value}'` : "" - } for the '--${problem.argument}' option${ - problem.index ? ` by index '${problem.index}'` : "" - }`, - ); - - if (problem.expected) { - cli.logger.error(`Expected: '${problem.expected}'`); - } - }); - } - - process.exit(2); - } - - devServerOptions = result; - } else { - // TODO remove in the next major release - const mergeOptions = ( - devServerOptions: devServerOptionsType, - devServerCliOptions: devServerOptionsType, - ): devServerOptionsType => { - // CLI options should take precedence over devServer options, - // and CLI options should have no default values included - const options = { ...devServerOptions, ...devServerCliOptions }; - - if (devServerOptions.client && devServerCliOptions.client) { - // the user could set some client options in their devServer config, - // then also specify client options on the CLI - options.client = { - ...devServerOptions.client, - ...devServerCliOptions.client, - }; - } - - return options; - }; - - devServerOptions = mergeOptions( - compilerForDevServer.options.devServer || {}, - devServerCLIOptions, - ); - } - - // TODO remove in the next major release - if (!isDevServer4) { - const getPublicPathOption = (): string => { - const normalizePublicPath = (publicPath): string => - typeof publicPath === "undefined" || publicPath === "auto" - ? "/" - : publicPath; - - if (options.outputPublicPath) { - return normalizePublicPath( - compilerForDevServer.options.output.publicPath, - ); - } - - if (devServerOptions.publicPath) { - return normalizePublicPath(devServerOptions.publicPath); - } - - return normalizePublicPath( - compilerForDevServer.options.output.publicPath, - ); - }; - const getStatsOption = (): string | boolean => { - if (options.stats) { - return options.stats; - } - - if (devServerOptions.stats) { - return devServerOptions.stats; - } - - return compilerForDevServer.options.stats; - }; - - devServerOptions.host = devServerOptions.host || "localhost"; - devServerOptions.port = devServerOptions.port || 8080; - devServerOptions.stats = getStatsOption(); - devServerOptions.publicPath = getPublicPathOption(); - } - - if (devServerOptions.port) { - const portNumber = Number(devServerOptions.port); - - if (usedPorts.find((port) => portNumber === port)) { - throw new Error( - "Unique ports must be specified for each devServer option in your webpack configuration. Alternatively, run only 1 devServer config using the --config-name flag to specify your desired config.", - ); - } - - usedPorts.push(portNumber); - } - - try { - let server; - - // TODO: remove after dropping webpack-dev-server@v3 - if (isDevServer4) { - server = new DevServer(devServerOptions, compiler); - } else { - server = new DevServer(compiler, devServerOptions); - } - - if (typeof server.start === "function") { - await server.start(); - } else { - // TODO remove in the next major release - server.listen( - devServerOptions.port, - devServerOptions.host, - (error): void => { - if (error) { - throw error; - } - }, - ); - } - - servers.push(server); - } catch (error) { - if (cli.isValidationError(error)) { - logger.error(error.message); - } else { - logger.error(error); - } - - process.exit(2); - } - } - }, - ); - } + servers.push(server); + } catch (error) { + if (cli.isValidationError(error)) { + logger.error(error.message); + } else { + logger.error(error); + } + + process.exit(2); + } + } + }, + ); + } } export default ServeCommand; diff --git a/packages/serve/src/types.ts b/packages/serve/src/types.ts index b3b9ce7e3b0..a786425961c 100644 --- a/packages/serve/src/types.ts +++ b/packages/serve/src/types.ts @@ -1,111 +1,111 @@ export type devServerOptionsType = { - allowedHosts?: string[] | allowedHostsEnum; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - bonjour?: boolean | Record; - client?: false | devServerClientOptions; - compress?: boolean; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - dev?: Record; // drop in dev-server v4 - // eslint-disable-next-line @typescript-eslint/no-explicit-any - devMiddleware?: Record; - firewall?: boolean | string[]; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - headers?: - | Record - | ((request: any, response: any, middlewareContext: any) => Record); - historyApiFallback?: boolean | Record; - host?: string | null | hostEnum; - hot?: boolean | hotOptionEnum; - http2?: boolean; - https?: boolean | Record; - injectClient?: boolean | (() => void); - injectHot?: boolean | (() => void); - ipc?: string | true; - liveReload?: boolean; - onAfterSetupMiddleware?: () => void; - onBeforeSetupMiddleware?: () => void; - onListening?: () => void; - open?: string | boolean | openOptionObject; - openPage?: string | string[]; - overlay?: boolean | Record; - port?: number | string | null; - profile?: boolean; - progress?: boolean; - proxy?: Record | (Record | (() => void))[]; - public?: string; - setupExitSignals?: boolean; - static?: boolean | string | Record | (string | Record)[]; - transportMode?: Record | string; - useLocalIp?: boolean; - publicPath?: string | (() => void); - stats?: string | boolean; - watchFiles?: string | Record; - webSocketServer?: - | false - | string - | transportModeEnum - | (() => any) - | Record - | (Record | (() => void))[]; + allowedHosts?: string[] | allowedHostsEnum; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + bonjour?: boolean | Record; + client?: false | devServerClientOptions; + compress?: boolean; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + dev?: Record; // drop in dev-server v4 + // eslint-disable-next-line @typescript-eslint/no-explicit-any + devMiddleware?: Record; + firewall?: boolean | string[]; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + headers?: + | Record + | ((request: any, response: any, middlewareContext: any) => Record); + historyApiFallback?: boolean | Record; + host?: string | null | hostEnum; + hot?: boolean | hotOptionEnum; + http2?: boolean; + https?: boolean | Record; + injectClient?: boolean | (() => void); + injectHot?: boolean | (() => void); + ipc?: string | true; + liveReload?: boolean; + onAfterSetupMiddleware?: () => void; + onBeforeSetupMiddleware?: () => void; + onListening?: () => void; + open?: string | boolean | openOptionObject; + openPage?: string | string[]; + overlay?: boolean | Record; + port?: number | string | null; + profile?: boolean; + progress?: boolean; + proxy?: Record | (Record | (() => void))[]; + public?: string; + setupExitSignals?: boolean; + static?: boolean | string | Record | (string | Record)[]; + transportMode?: Record | string; + useLocalIp?: boolean; + publicPath?: string | (() => void); + stats?: string | boolean; + watchFiles?: string | Record; + webSocketServer?: + | false + | string + | transportModeEnum + | (() => any) + | Record + | (Record | (() => void))[]; }; enum hotOptionEnum { - only = "only", + only = "only", } enum hostEnum { - LocalIp = "local-ip", - LocalIpv4 = "local-ipv4", - LocalIpv6 = "local-ipv6", + LocalIp = "local-ip", + LocalIpv4 = "local-ipv4", + LocalIpv6 = "local-ipv6", } enum allowedHostsEnum { - Auto = "auto", - All = "all", + Auto = "auto", + All = "all", } enum transportModeEnum { - SockJS = "sockjs", - Ws = "ws", + SockJS = "sockjs", + Ws = "ws", } type devServerClientOptions = { - host?: string; - path?: string; - port?: string | number | null; - needClientEntry?: boolean | (() => void); - needHotEntry?: boolean | (() => void); - logging?: devServerClientLogging; - overlay?: boolean | clientOverlay; - progress?: boolean; - webSocketTransport?: string | transportModeEnum; - webSocketURL?: string | webSocketURLOptions; + host?: string; + path?: string; + port?: string | number | null; + needClientEntry?: boolean | (() => void); + needHotEntry?: boolean | (() => void); + logging?: devServerClientLogging; + overlay?: boolean | clientOverlay; + progress?: boolean; + webSocketTransport?: string | transportModeEnum; + webSocketURL?: string | webSocketURLOptions; }; type webSocketURLOptions = { - hostname?: string; - pathname?: string; - port?: string | number; - password?: string; - protocol?: string | "auto"; - username?: string; + hostname?: string; + pathname?: string; + port?: string | number; + password?: string; + protocol?: string | "auto"; + username?: string; }; type openOptionObject = { - target?: string; - app?: string; + target?: string; + app?: string; }; type clientOverlay = { - errors?: boolean; - warnings?: boolean; + errors?: boolean; + warnings?: boolean; }; enum devServerClientLogging { - none = "none", - error = "error", - warn = "warn", - info = "info", - log = "log", - verbose = "verbose", + none = "none", + error = "error", + warn = "warn", + info = "info", + log = "log", + verbose = "verbose", } diff --git a/packages/webpack-cli/CHANGELOG.md b/packages/webpack-cli/CHANGELOG.md index d241162ff7a..ddf6f612f3c 100644 --- a/packages/webpack-cli/CHANGELOG.md +++ b/packages/webpack-cli/CHANGELOG.md @@ -7,13 +7,13 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- show default value in help output if available ([#2814](https://github.com/webpack/webpack-cli/issues/2814)) ([7f50948](https://github.com/webpack/webpack-cli/commit/7f50948bb984821449277d6b5632b98a695eb029)) -- support top multi compiler options ([#2874](https://github.com/webpack/webpack-cli/issues/2874)) ([82b1fb7](https://github.com/webpack/webpack-cli/commit/82b1fb7441f04595ac90626235d506f29e5bb107)) +- show default value in help output if available ([#2814](https://github.com/webpack/webpack-cli/issues/2814)) ([7f50948](https://github.com/webpack/webpack-cli/commit/7f50948bb984821449277d6b5632b98a695eb029)) +- support top multi compiler options ([#2874](https://github.com/webpack/webpack-cli/issues/2874)) ([82b1fb7](https://github.com/webpack/webpack-cli/commit/82b1fb7441f04595ac90626235d506f29e5bb107)) ### Features -- show possible values for option in help output ([#2819](https://github.com/webpack/webpack-cli/issues/2819)) ([828e5c9](https://github.com/webpack/webpack-cli/commit/828e5c923719982dfc828f9935f65384d6ede2d1)) -- **init-generator:** add ability to specify a package manager of choice ([#2769](https://github.com/webpack/webpack-cli/issues/2769)) ([e53f164](https://github.com/webpack/webpack-cli/commit/e53f1645c729c3bbcb27ffd41c999ed321f86f9d)) +- show possible values for option in help output ([#2819](https://github.com/webpack/webpack-cli/issues/2819)) ([828e5c9](https://github.com/webpack/webpack-cli/commit/828e5c923719982dfc828f9935f65384d6ede2d1)) +- **init-generator:** add ability to specify a package manager of choice ([#2769](https://github.com/webpack/webpack-cli/issues/2769)) ([e53f164](https://github.com/webpack/webpack-cli/commit/e53f1645c729c3bbcb27ffd41c999ed321f86f9d)) ## [4.7.2](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.7.1...webpack-cli@4.7.2) (2021-06-07) @@ -23,256 +23,256 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ### Bug Fixes -- not found module after ask installation ([#2761](https://github.com/webpack/webpack-cli/issues/2761)) ([557ad05](https://github.com/webpack/webpack-cli/commit/557ad05ae8168255b57698bdd2d98cbc7b53812d)) -- prettier config ([#2719](https://github.com/webpack/webpack-cli/issues/2719)) ([181295f](https://github.com/webpack/webpack-cli/commit/181295fb1b1973c201c221813562219d85b845ae)) +- not found module after ask installation ([#2761](https://github.com/webpack/webpack-cli/issues/2761)) ([557ad05](https://github.com/webpack/webpack-cli/commit/557ad05ae8168255b57698bdd2d98cbc7b53812d)) +- prettier config ([#2719](https://github.com/webpack/webpack-cli/issues/2719)) ([181295f](https://github.com/webpack/webpack-cli/commit/181295fb1b1973c201c221813562219d85b845ae)) # [4.7.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.6.0...webpack-cli@4.7.0) (2021-05-06) ### Bug Fixes -- parsing of empty `--env` flags ([#2643](https://github.com/webpack/webpack-cli/issues/2643)) ([bc12f1a](https://github.com/webpack/webpack-cli/commit/bc12f1a2a833f09a0585050a0f5dd854da188f1d)) -- update usage info ([#2594](https://github.com/webpack/webpack-cli/issues/2594)) ([9d07d67](https://github.com/webpack/webpack-cli/commit/9d07d67faf147cbaf0dddb95038403963e5f2afb)) +- parsing of empty `--env` flags ([#2643](https://github.com/webpack/webpack-cli/issues/2643)) ([bc12f1a](https://github.com/webpack/webpack-cli/commit/bc12f1a2a833f09a0585050a0f5dd854da188f1d)) +- update usage info ([#2594](https://github.com/webpack/webpack-cli/issues/2594)) ([9d07d67](https://github.com/webpack/webpack-cli/commit/9d07d67faf147cbaf0dddb95038403963e5f2afb)) ### Features -- add `create` and `new` alias for `init` ([#2616](https://github.com/webpack/webpack-cli/issues/2616)) ([5a9789d](https://github.com/webpack/webpack-cli/commit/5a9789db237b7696adfdc9826b0dda749fedfa9a)) -- add `server` alias for `serve` command ([#2631](https://github.com/webpack/webpack-cli/issues/2631)) ([c9ee947](https://github.com/webpack/webpack-cli/commit/c9ee947618c06447bc1f949e4d401e63f737f38d)) -- add flag to force start finish log ([#2566](https://github.com/webpack/webpack-cli/issues/2566)) ([281aad3](https://github.com/webpack/webpack-cli/commit/281aad3ee4961f1643453eb1a926e88e0b7f019c)) -- added `--no-devtool` to webpack v4([#2603](https://github.com/webpack/webpack-cli/issues/2603)) ([7c6f390](https://github.com/webpack/webpack-cli/commit/7c6f390a1d64d562065ffc31d8b23d833813ee9d)) -- added support arguments description ([#2659](https://github.com/webpack/webpack-cli/issues/2659)) ([4dfd166](https://github.com/webpack/webpack-cli/commit/4dfd166f757ce94130bf9b7580f2dbe2868b8f4f)) +- add `create` and `new` alias for `init` ([#2616](https://github.com/webpack/webpack-cli/issues/2616)) ([5a9789d](https://github.com/webpack/webpack-cli/commit/5a9789db237b7696adfdc9826b0dda749fedfa9a)) +- add `server` alias for `serve` command ([#2631](https://github.com/webpack/webpack-cli/issues/2631)) ([c9ee947](https://github.com/webpack/webpack-cli/commit/c9ee947618c06447bc1f949e4d401e63f737f38d)) +- add flag to force start finish log ([#2566](https://github.com/webpack/webpack-cli/issues/2566)) ([281aad3](https://github.com/webpack/webpack-cli/commit/281aad3ee4961f1643453eb1a926e88e0b7f019c)) +- added `--no-devtool` to webpack v4([#2603](https://github.com/webpack/webpack-cli/issues/2603)) ([7c6f390](https://github.com/webpack/webpack-cli/commit/7c6f390a1d64d562065ffc31d8b23d833813ee9d)) +- added support arguments description ([#2659](https://github.com/webpack/webpack-cli/issues/2659)) ([4dfd166](https://github.com/webpack/webpack-cli/commit/4dfd166f757ce94130bf9b7580f2dbe2868b8f4f)) # [4.6.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.5.0...webpack-cli@4.6.0) (2021-03-27) ### Bug Fixes -- `negative` options ([#2555](https://github.com/webpack/webpack-cli/issues/2555)) ([f26ebc1](https://github.com/webpack/webpack-cli/commit/f26ebc105e140992639864fa01950454abd716ac)) -- improve error message for help ([#2482](https://github.com/webpack/webpack-cli/issues/2482)) ([99ae2a3](https://github.com/webpack/webpack-cli/commit/99ae2a3b9f7ad8c1807839357360a1b4607865b1)) -- show `--node-env` in minimum help output ([#2411](https://github.com/webpack/webpack-cli/issues/2411)) ([f5fc302](https://github.com/webpack/webpack-cli/commit/f5fc3023121f4d952a166879a46b2653c20b6349)) +- `negative` options ([#2555](https://github.com/webpack/webpack-cli/issues/2555)) ([f26ebc1](https://github.com/webpack/webpack-cli/commit/f26ebc105e140992639864fa01950454abd716ac)) +- improve error message for help ([#2482](https://github.com/webpack/webpack-cli/issues/2482)) ([99ae2a3](https://github.com/webpack/webpack-cli/commit/99ae2a3b9f7ad8c1807839357360a1b4607865b1)) +- show `--node-env` in minimum help output ([#2411](https://github.com/webpack/webpack-cli/issues/2411)) ([f5fc302](https://github.com/webpack/webpack-cli/commit/f5fc3023121f4d952a166879a46b2653c20b6349)) ### Features -- added `WEBPACK_PACKAGE` env var to use custom `webpack` package ([#2556](https://github.com/webpack/webpack-cli/issues/2556)) ([3d1e485](https://github.com/webpack/webpack-cli/commit/3d1e4855c55a6601d8a89dcb50d9d842009e3cda)) -- added `WEBPACK_CLI_SKIP_IMPORT_LOCAL` env var to skip local import ([#2546](https://github.com/webpack/webpack-cli/issues/2546)) ([e130822](https://github.com/webpack/webpack-cli/commit/e13082221c2da01d8b8215ebc936474bf3ca1582)) -- allow string value for the `--hot` option ([#2444](https://github.com/webpack/webpack-cli/issues/2444)) ([8656e78](https://github.com/webpack/webpack-cli/commit/8656e78d788bc8a504258d4dcc609767f63d60c4)) -- display used config path when logging level=log ([#2431](https://github.com/webpack/webpack-cli/issues/2431)) ([f8406e1](https://github.com/webpack/webpack-cli/commit/f8406e1c5253849fad741eb45f1ece23a7c603f4)) +- added `WEBPACK_PACKAGE` env var to use custom `webpack` package ([#2556](https://github.com/webpack/webpack-cli/issues/2556)) ([3d1e485](https://github.com/webpack/webpack-cli/commit/3d1e4855c55a6601d8a89dcb50d9d842009e3cda)) +- added `WEBPACK_CLI_SKIP_IMPORT_LOCAL` env var to skip local import ([#2546](https://github.com/webpack/webpack-cli/issues/2546)) ([e130822](https://github.com/webpack/webpack-cli/commit/e13082221c2da01d8b8215ebc936474bf3ca1582)) +- allow string value for the `--hot` option ([#2444](https://github.com/webpack/webpack-cli/issues/2444)) ([8656e78](https://github.com/webpack/webpack-cli/commit/8656e78d788bc8a504258d4dcc609767f63d60c4)) +- display used config path when logging level=log ([#2431](https://github.com/webpack/webpack-cli/issues/2431)) ([f8406e1](https://github.com/webpack/webpack-cli/commit/f8406e1c5253849fad741eb45f1ece23a7c603f4)) # [4.5.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.4.0...webpack-cli@4.5.0) (2021-02-02) ### Bug Fixes -- avoid deprecation message ([9d6dbda](https://github.com/webpack/webpack-cli/commit/9d6dbda93da167a1aaad03f599105a4fe7849dc3)) -- error message on invalid plugin options ([#2380](https://github.com/webpack/webpack-cli/issues/2380)) ([f9ce1d3](https://github.com/webpack/webpack-cli/commit/f9ce1d30b83bf0e0b4d91498d012c13c208e6e67)) -- improve description for 'configtest' command ([#2379](https://github.com/webpack/webpack-cli/issues/2379)) ([311bae3](https://github.com/webpack/webpack-cli/commit/311bae336d83424c800e553b6ef40242d967685c)) +- avoid deprecation message ([9d6dbda](https://github.com/webpack/webpack-cli/commit/9d6dbda93da167a1aaad03f599105a4fe7849dc3)) +- error message on invalid plugin options ([#2380](https://github.com/webpack/webpack-cli/issues/2380)) ([f9ce1d3](https://github.com/webpack/webpack-cli/commit/f9ce1d30b83bf0e0b4d91498d012c13c208e6e67)) +- improve description for 'configtest' command ([#2379](https://github.com/webpack/webpack-cli/issues/2379)) ([311bae3](https://github.com/webpack/webpack-cli/commit/311bae336d83424c800e553b6ef40242d967685c)) ### Features -- add the `--node-env` flag ([#2388](https://github.com/webpack/webpack-cli/issues/2388)) ([e5126f1](https://github.com/webpack/webpack-cli/commit/e5126f10b6622437c0541c25be2a610a82c1df04)) -- entries syntax ([#2369](https://github.com/webpack/webpack-cli/issues/2369)) ([6b31614](https://github.com/webpack/webpack-cli/commit/6b3161479578f572f803f579c7e71073eb797184)) -- support ES module configuration format ([#2381](https://github.com/webpack/webpack-cli/issues/2381)) ([aebdbbc](https://github.com/webpack/webpack-cli/commit/aebdbbc1f6e2761e7821cb3660bea686cce7b587)) +- add the `--node-env` flag ([#2388](https://github.com/webpack/webpack-cli/issues/2388)) ([e5126f1](https://github.com/webpack/webpack-cli/commit/e5126f10b6622437c0541c25be2a610a82c1df04)) +- entries syntax ([#2369](https://github.com/webpack/webpack-cli/issues/2369)) ([6b31614](https://github.com/webpack/webpack-cli/commit/6b3161479578f572f803f579c7e71073eb797184)) +- support ES module configuration format ([#2381](https://github.com/webpack/webpack-cli/issues/2381)) ([aebdbbc](https://github.com/webpack/webpack-cli/commit/aebdbbc1f6e2761e7821cb3660bea686cce7b587)) # [4.4.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.3.1...webpack-cli@4.4.0) (2021-01-19) ### Bug Fixes -- better description for --no-watch-options-stdin ([#2288](https://github.com/webpack/webpack-cli/issues/2288)) ([4ee8665](https://github.com/webpack/webpack-cli/commit/4ee8665e01e8dce16448e0a4d3dd2293731695ab)) -- double commands output in help ([#2298](https://github.com/webpack/webpack-cli/issues/2298)) ([efe81e9](https://github.com/webpack/webpack-cli/commit/efe81e986a6dca5cc9b72a5c9312dc21409f65b1)) -- pass all `argv` to configurations when `serve` command used ([#2345](https://github.com/webpack/webpack-cli/issues/2345)) ([5070b9b](https://github.com/webpack/webpack-cli/commit/5070b9bcbd5bdac00088d0c21486ad181a4df000)) -- respect `--stats`, `--color` and `--no-color` option for serve c… ([#2312](https://github.com/webpack/webpack-cli/issues/2312)) ([73d3fec](https://github.com/webpack/webpack-cli/commit/73d3feced18b4e3708f958707326a6642a594cf2)) -- show exact package name while prompting for installation ([#2338](https://github.com/webpack/webpack-cli/issues/2338)) ([ffc93e5](https://github.com/webpack/webpack-cli/commit/ffc93e556d784e2d4409cb0d3a92d737850996f4)) -- webpack installation prompt message ([#2316](https://github.com/webpack/webpack-cli/issues/2316)) ([3659c5e](https://github.com/webpack/webpack-cli/commit/3659c5e529fe1319251ef1c713d6cc758f7f5353)) +- better description for --no-watch-options-stdin ([#2288](https://github.com/webpack/webpack-cli/issues/2288)) ([4ee8665](https://github.com/webpack/webpack-cli/commit/4ee8665e01e8dce16448e0a4d3dd2293731695ab)) +- double commands output in help ([#2298](https://github.com/webpack/webpack-cli/issues/2298)) ([efe81e9](https://github.com/webpack/webpack-cli/commit/efe81e986a6dca5cc9b72a5c9312dc21409f65b1)) +- pass all `argv` to configurations when `serve` command used ([#2345](https://github.com/webpack/webpack-cli/issues/2345)) ([5070b9b](https://github.com/webpack/webpack-cli/commit/5070b9bcbd5bdac00088d0c21486ad181a4df000)) +- respect `--stats`, `--color` and `--no-color` option for serve c… ([#2312](https://github.com/webpack/webpack-cli/issues/2312)) ([73d3fec](https://github.com/webpack/webpack-cli/commit/73d3feced18b4e3708f958707326a6642a594cf2)) +- show exact package name while prompting for installation ([#2338](https://github.com/webpack/webpack-cli/issues/2338)) ([ffc93e5](https://github.com/webpack/webpack-cli/commit/ffc93e556d784e2d4409cb0d3a92d737850996f4)) +- webpack installation prompt message ([#2316](https://github.com/webpack/webpack-cli/issues/2316)) ([3659c5e](https://github.com/webpack/webpack-cli/commit/3659c5e529fe1319251ef1c713d6cc758f7f5353)) ### Features -- `configtest` validate default configuration ([#2354](https://github.com/webpack/webpack-cli/issues/2354)) ([487691a](https://github.com/webpack/webpack-cli/commit/487691abc8d817f5b3c1ab87743d7235ff15d956)) -- added `build` command (aliases - 'bundle' and 'b') ([7590f66](https://github.com/webpack/webpack-cli/commit/7590f66663ce701d52d9276c3adf9dbdfd1a0fa4)) -- added the `watch` command ([#2357](https://github.com/webpack/webpack-cli/issues/2357)) ([9693f7d](https://github.com/webpack/webpack-cli/commit/9693f7d9543a8fce610c4ef903ccca0d12d229a1)) -- allow to pass parseOption to CLI class ([#2299](https://github.com/webpack/webpack-cli/issues/2299)) ([2af0801](https://github.com/webpack/webpack-cli/commit/2af08013852a95c6f6462c56a9994a4ee28c6ea1)) -- allow to use `help` command to show option information ([#2353](https://github.com/webpack/webpack-cli/issues/2353)) ([15eb411](https://github.com/webpack/webpack-cli/commit/15eb411237dcdcf0db7a501c103fe53f9b82903f)) -- new `configtest` command ([#2303](https://github.com/webpack/webpack-cli/issues/2303)) ([eb7b189](https://github.com/webpack/webpack-cli/commit/eb7b18937d045261a5b20ca8356e8b4ae4dfcaad)) -- show multiple suggestions on unknown options ([#2349](https://github.com/webpack/webpack-cli/issues/2349)) ([7314d6c](https://github.com/webpack/webpack-cli/commit/7314d6ca927473da2f355a7d356a943471488606)) +- `configtest` validate default configuration ([#2354](https://github.com/webpack/webpack-cli/issues/2354)) ([487691a](https://github.com/webpack/webpack-cli/commit/487691abc8d817f5b3c1ab87743d7235ff15d956)) +- added `build` command (aliases - 'bundle' and 'b') ([7590f66](https://github.com/webpack/webpack-cli/commit/7590f66663ce701d52d9276c3adf9dbdfd1a0fa4)) +- added the `watch` command ([#2357](https://github.com/webpack/webpack-cli/issues/2357)) ([9693f7d](https://github.com/webpack/webpack-cli/commit/9693f7d9543a8fce610c4ef903ccca0d12d229a1)) +- allow to pass parseOption to CLI class ([#2299](https://github.com/webpack/webpack-cli/issues/2299)) ([2af0801](https://github.com/webpack/webpack-cli/commit/2af08013852a95c6f6462c56a9994a4ee28c6ea1)) +- allow to use `help` command to show option information ([#2353](https://github.com/webpack/webpack-cli/issues/2353)) ([15eb411](https://github.com/webpack/webpack-cli/commit/15eb411237dcdcf0db7a501c103fe53f9b82903f)) +- new `configtest` command ([#2303](https://github.com/webpack/webpack-cli/issues/2303)) ([eb7b189](https://github.com/webpack/webpack-cli/commit/eb7b18937d045261a5b20ca8356e8b4ae4dfcaad)) +- show multiple suggestions on unknown options ([#2349](https://github.com/webpack/webpack-cli/issues/2349)) ([7314d6c](https://github.com/webpack/webpack-cli/commit/7314d6ca927473da2f355a7d356a943471488606)) ## [4.3.1](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.3.0...webpack-cli@4.3.1) (2020-12-31) ### Bug Fixes -- error message on not installed module loaders for configuration ([#2282](https://github.com/webpack/webpack-cli/issues/2282)) ([29eaa8e](https://github.com/webpack/webpack-cli/commit/29eaa8e843510e020ac4b57a13622df40713fe27)) -- peer dependencies ([#2284](https://github.com/webpack/webpack-cli/issues/2284)) ([083f2a0](https://github.com/webpack/webpack-cli/commit/083f2a069d6dc0a3b9492eb3f205474ba843acfd)) -- provide useful error on unknown command ([d6380bb](https://github.com/webpack/webpack-cli/commit/d6380bb6c6756d2a00ac20f2ffc454481d97e4d3)) -- the `--help` option is working without `webpack-dev-server` ([#2267](https://github.com/webpack/webpack-cli/issues/2267)) ([1dae54d](https://github.com/webpack/webpack-cli/commit/1dae54da94d3220437b9257efe512447023de1d3)) -- the `--progress` option is working with `--json` ([#2276](https://github.com/webpack/webpack-cli/issues/2276)) ([0595603](https://github.com/webpack/webpack-cli/commit/05956030cbb1491a2e9313732470bcd4ebe5a36d)) +- error message on not installed module loaders for configuration ([#2282](https://github.com/webpack/webpack-cli/issues/2282)) ([29eaa8e](https://github.com/webpack/webpack-cli/commit/29eaa8e843510e020ac4b57a13622df40713fe27)) +- peer dependencies ([#2284](https://github.com/webpack/webpack-cli/issues/2284)) ([083f2a0](https://github.com/webpack/webpack-cli/commit/083f2a069d6dc0a3b9492eb3f205474ba843acfd)) +- provide useful error on unknown command ([d6380bb](https://github.com/webpack/webpack-cli/commit/d6380bb6c6756d2a00ac20f2ffc454481d97e4d3)) +- the `--help` option is working without `webpack-dev-server` ([#2267](https://github.com/webpack/webpack-cli/issues/2267)) ([1dae54d](https://github.com/webpack/webpack-cli/commit/1dae54da94d3220437b9257efe512447023de1d3)) +- the `--progress` option is working with `--json` ([#2276](https://github.com/webpack/webpack-cli/issues/2276)) ([0595603](https://github.com/webpack/webpack-cli/commit/05956030cbb1491a2e9313732470bcd4ebe5a36d)) # [4.3.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.2.0...webpack-cli@4.3.0) (2020-12-25) ### Bug Fixes -- fix problems with `--mode` and config resolution, there are situations when we resolve an invalid config file, the `--mode` option does not affect on config resolution, if you faced with an error after updating, please use the `--config` option -- correct usage of cli-flags ([#2205](https://github.com/webpack/webpack-cli/issues/2205)) ([c8fc7d1](https://github.com/webpack/webpack-cli/commit/c8fc7d1f195800c4fbe54ed6533e694f40fa7a1b)) -- defer setting default mode to core ([#2095](https://github.com/webpack/webpack-cli/issues/2095)) ([3eb410e](https://github.com/webpack/webpack-cli/commit/3eb410e5d8f8e2149910b65f4a028c85f8af5d28)) -- respect the `--watch-options-stdin` option ([2d1e001](https://github.com/webpack/webpack-cli/commit/2d1e001e7f4f560c2b36607bd1b29dfe2aa32066)) -- respect `--color`/`--no-color` option ([#2042](https://github.com/webpack/webpack-cli/issues/2042)) ([09bd812](https://github.com/webpack/webpack-cli/commit/09bd8126e95c9675b1f6862451f629cd4c439adb)) -- stringify stats using streaming approach ([#2190](https://github.com/webpack/webpack-cli/issues/2190)) ([9bf4e92](https://github.com/webpack/webpack-cli/commit/9bf4e925757b02f7252073501562c95e762dc59b)) -- use logger for error with proper exit code ([#2076](https://github.com/webpack/webpack-cli/issues/2076)) ([2c9069f](https://github.com/webpack/webpack-cli/commit/2c9069fd1f7c0fb70f019900e4b841c5ea33975e)) -- reduce spammy logs ([#2206](https://github.com/webpack/webpack-cli/issues/2206)) ([9b3cc28](https://github.com/webpack/webpack-cli/commit/9b3cc283d7b74aa3bb26fe36c6110436b016e0d9)) -- respect the `infrastructureLogging.level` option (logger uses `stderr`) ([#2144](https://github.com/webpack/webpack-cli/issues/2144)) ([7daccc7](https://github.com/webpack/webpack-cli/commit/7daccc786a0eb4eeae4c5b3632fc28240a696170)) -- respect all options from command line for the `server` command -- `help` and `version` output -- respect `stats` from the config (webpack@4) ([#2098](https://github.com/webpack/webpack-cli/issues/2098)) ([2d6e5c6](https://github.com/webpack/webpack-cli/commit/2d6e5c6f4ed967368a81742bf347e39f24ee16c8)) -- fixed colors work with multi compiler mode (webpack@4) +- fix problems with `--mode` and config resolution, there are situations when we resolve an invalid config file, the `--mode` option does not affect on config resolution, if you faced with an error after updating, please use the `--config` option +- correct usage of cli-flags ([#2205](https://github.com/webpack/webpack-cli/issues/2205)) ([c8fc7d1](https://github.com/webpack/webpack-cli/commit/c8fc7d1f195800c4fbe54ed6533e694f40fa7a1b)) +- defer setting default mode to core ([#2095](https://github.com/webpack/webpack-cli/issues/2095)) ([3eb410e](https://github.com/webpack/webpack-cli/commit/3eb410e5d8f8e2149910b65f4a028c85f8af5d28)) +- respect the `--watch-options-stdin` option ([2d1e001](https://github.com/webpack/webpack-cli/commit/2d1e001e7f4f560c2b36607bd1b29dfe2aa32066)) +- respect `--color`/`--no-color` option ([#2042](https://github.com/webpack/webpack-cli/issues/2042)) ([09bd812](https://github.com/webpack/webpack-cli/commit/09bd8126e95c9675b1f6862451f629cd4c439adb)) +- stringify stats using streaming approach ([#2190](https://github.com/webpack/webpack-cli/issues/2190)) ([9bf4e92](https://github.com/webpack/webpack-cli/commit/9bf4e925757b02f7252073501562c95e762dc59b)) +- use logger for error with proper exit code ([#2076](https://github.com/webpack/webpack-cli/issues/2076)) ([2c9069f](https://github.com/webpack/webpack-cli/commit/2c9069fd1f7c0fb70f019900e4b841c5ea33975e)) +- reduce spammy logs ([#2206](https://github.com/webpack/webpack-cli/issues/2206)) ([9b3cc28](https://github.com/webpack/webpack-cli/commit/9b3cc283d7b74aa3bb26fe36c6110436b016e0d9)) +- respect the `infrastructureLogging.level` option (logger uses `stderr`) ([#2144](https://github.com/webpack/webpack-cli/issues/2144)) ([7daccc7](https://github.com/webpack/webpack-cli/commit/7daccc786a0eb4eeae4c5b3632fc28240a696170)) +- respect all options from command line for the `server` command +- `help` and `version` output +- respect `stats` from the config (webpack@4) ([#2098](https://github.com/webpack/webpack-cli/issues/2098)) ([2d6e5c6](https://github.com/webpack/webpack-cli/commit/2d6e5c6f4ed967368a81742bf347e39f24ee16c8)) +- fixed colors work with multi compiler mode (webpack@4) ### Features -- add `bundle` command (alias for `webpack [options]`) -- add `pnpm` support for package installation ([#2040](https://github.com/webpack/webpack-cli/issues/2040)) ([46cba36](https://github.com/webpack/webpack-cli/commit/46cba367f06a6354fe98fcb15e7771e819feeac0)) +- add `bundle` command (alias for `webpack [options]`) +- add `pnpm` support for package installation ([#2040](https://github.com/webpack/webpack-cli/issues/2040)) ([46cba36](https://github.com/webpack/webpack-cli/commit/46cba367f06a6354fe98fcb15e7771e819feeac0)) # [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)) +- --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)) +- 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 -- avoid unnecessary stringify ([#1920](https://github.com/webpack/webpack-cli/issues/1920)) ([5ef1e7b](https://github.com/webpack/webpack-cli/commit/5ef1e7b074390406b76cb3e25dd90f045e1bd8a2)) -- colored output ([#1944](https://github.com/webpack/webpack-cli/issues/1944)) ([2bbbb14](https://github.com/webpack/webpack-cli/commit/2bbbb14ca9a404f2205c0f5a5515e73832ee6173)) -- move init command to separate package ([#1950](https://github.com/webpack/webpack-cli/issues/1950)) ([92ad475](https://github.com/webpack/webpack-cli/commit/92ad475d4b9606b5db7c31dd3666658301c95597)) -- output stacktrace on errors ([#1949](https://github.com/webpack/webpack-cli/issues/1949)) ([9ba9d6f](https://github.com/webpack/webpack-cli/commit/9ba9d6f460fb25fb79d52f4360239b8c4b471451)) -- run CLI after webpack installation ([#1951](https://github.com/webpack/webpack-cli/issues/1951)) ([564279e](https://github.com/webpack/webpack-cli/commit/564279e5b634a399647bcdb21449e5e6a7f0637e)) -- support any config name ([#1926](https://github.com/webpack/webpack-cli/issues/1926)) ([6f95b26](https://github.com/webpack/webpack-cli/commit/6f95b267bf6a3a3e71360f4de176a4ebbec3afa1)) -- support array of functions and promises ([#1946](https://github.com/webpack/webpack-cli/issues/1946)) ([2ace39b](https://github.com/webpack/webpack-cli/commit/2ace39b06117f558c0d8528cea9248253cbdf593)) -- watch mode and options ([#1931](https://github.com/webpack/webpack-cli/issues/1931)) ([258219a](https://github.com/webpack/webpack-cli/commit/258219a3bb606b228636e6373a3d20413c1f660e)) +- avoid unnecessary stringify ([#1920](https://github.com/webpack/webpack-cli/issues/1920)) ([5ef1e7b](https://github.com/webpack/webpack-cli/commit/5ef1e7b074390406b76cb3e25dd90f045e1bd8a2)) +- colored output ([#1944](https://github.com/webpack/webpack-cli/issues/1944)) ([2bbbb14](https://github.com/webpack/webpack-cli/commit/2bbbb14ca9a404f2205c0f5a5515e73832ee6173)) +- move init command to separate package ([#1950](https://github.com/webpack/webpack-cli/issues/1950)) ([92ad475](https://github.com/webpack/webpack-cli/commit/92ad475d4b9606b5db7c31dd3666658301c95597)) +- output stacktrace on errors ([#1949](https://github.com/webpack/webpack-cli/issues/1949)) ([9ba9d6f](https://github.com/webpack/webpack-cli/commit/9ba9d6f460fb25fb79d52f4360239b8c4b471451)) +- run CLI after webpack installation ([#1951](https://github.com/webpack/webpack-cli/issues/1951)) ([564279e](https://github.com/webpack/webpack-cli/commit/564279e5b634a399647bcdb21449e5e6a7f0637e)) +- support any config name ([#1926](https://github.com/webpack/webpack-cli/issues/1926)) ([6f95b26](https://github.com/webpack/webpack-cli/commit/6f95b267bf6a3a3e71360f4de176a4ebbec3afa1)) +- support array of functions and promises ([#1946](https://github.com/webpack/webpack-cli/issues/1946)) ([2ace39b](https://github.com/webpack/webpack-cli/commit/2ace39b06117f558c0d8528cea9248253cbdf593)) +- watch mode and options ([#1931](https://github.com/webpack/webpack-cli/issues/1931)) ([258219a](https://github.com/webpack/webpack-cli/commit/258219a3bb606b228636e6373a3d20413c1f660e)) ### Features -- allow passing strings in env flag ([#1939](https://github.com/webpack/webpack-cli/issues/1939)) ([cc081a2](https://github.com/webpack/webpack-cli/commit/cc081a256181e34137a89d2e9d37b04280b3f180)) +- allow passing strings in env flag ([#1939](https://github.com/webpack/webpack-cli/issues/1939)) ([cc081a2](https://github.com/webpack/webpack-cli/commit/cc081a256181e34137a89d2e9d37b04280b3f180)) # [4.0.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.0.0-rc.1...webpack-cli@4.0.0) (2020-10-10) ### Bug Fixes -- add compilation lifecycle in watch instance ([#1903](https://github.com/webpack/webpack-cli/issues/1903)) ([02b6d21](https://github.com/webpack/webpack-cli/commit/02b6d21eaa20166a7ed37816de716b8fc22b756a)) -- cleanup `package-utils` package ([#1822](https://github.com/webpack/webpack-cli/issues/1822)) ([fd5b92b](https://github.com/webpack/webpack-cli/commit/fd5b92b3cd40361daec5bf4486e455a41f4c9738)) -- cli-executer supplies args further up ([#1904](https://github.com/webpack/webpack-cli/issues/1904)) ([097564a](https://github.com/webpack/webpack-cli/commit/097564a851b36b63e0a6bf88144997ef65aa057a)) -- exit code for validation errors ([59f6303](https://github.com/webpack/webpack-cli/commit/59f63037fcbdbb8934b578b9adf5725bc4ae1235)) -- exit process in case of schema errors ([71e89b4](https://github.com/webpack/webpack-cli/commit/71e89b4092d953ea587cc4f606451ab78cbcdb93)) +- add compilation lifecycle in watch instance ([#1903](https://github.com/webpack/webpack-cli/issues/1903)) ([02b6d21](https://github.com/webpack/webpack-cli/commit/02b6d21eaa20166a7ed37816de716b8fc22b756a)) +- cleanup `package-utils` package ([#1822](https://github.com/webpack/webpack-cli/issues/1822)) ([fd5b92b](https://github.com/webpack/webpack-cli/commit/fd5b92b3cd40361daec5bf4486e455a41f4c9738)) +- cli-executer supplies args further up ([#1904](https://github.com/webpack/webpack-cli/issues/1904)) ([097564a](https://github.com/webpack/webpack-cli/commit/097564a851b36b63e0a6bf88144997ef65aa057a)) +- exit code for validation errors ([59f6303](https://github.com/webpack/webpack-cli/commit/59f63037fcbdbb8934b578b9adf5725bc4ae1235)) +- exit process in case of schema errors ([71e89b4](https://github.com/webpack/webpack-cli/commit/71e89b4092d953ea587cc4f606451ab78cbcdb93)) ### Features -- assign config paths in build dependencies in cache config ([#1900](https://github.com/webpack/webpack-cli/issues/1900)) ([7e90f11](https://github.com/webpack/webpack-cli/commit/7e90f110b119f36ef9def4f66cf4e17ccf1438cd)) +- assign config paths in build dependencies in cache config ([#1900](https://github.com/webpack/webpack-cli/issues/1900)) ([7e90f11](https://github.com/webpack/webpack-cli/commit/7e90f110b119f36ef9def4f66cf4e17ccf1438cd)) # [4.0.0-rc.1](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.0.0-beta.8...webpack-cli@4.0.0-rc.1) (2020-10-06) ### Bug Fixes -- cache issue ([#1862](https://github.com/webpack/webpack-cli/issues/1862)) ([305c188](https://github.com/webpack/webpack-cli/commit/305c18816ca6c4275c2755ae6b48d90a8cc85bd1)) -- check webpack installation before running cli ([#1827](https://github.com/webpack/webpack-cli/issues/1827)) ([be509fa](https://github.com/webpack/webpack-cli/commit/be509fac9a03e202e062229484bb10af7876968f)) -- defer setting default entry to core ([#1856](https://github.com/webpack/webpack-cli/issues/1856)) ([5da1f81](https://github.com/webpack/webpack-cli/commit/5da1f81ed101b024249c5cd4e043ec1397338782)) -- log error if --config-name is used without multiple configs ([#1874](https://github.com/webpack/webpack-cli/issues/1874)) ([f653409](https://github.com/webpack/webpack-cli/commit/f653409e3468849970dab354f84c5213da01122d)) -- mode behaviour ([#1824](https://github.com/webpack/webpack-cli/issues/1824)) ([9e9c70b](https://github.com/webpack/webpack-cli/commit/9e9c70bc1f30d90cebd91341e865abb46f9c269e)) -- only set output path on passing flag ([#1855](https://github.com/webpack/webpack-cli/issues/1855)) ([2f36b9d](https://github.com/webpack/webpack-cli/commit/2f36b9d858faedaf3a6adca10a529d9837c0dd24)) -- show warning if bail and watch are used together ([#1804](https://github.com/webpack/webpack-cli/issues/1804)) ([6140b24](https://github.com/webpack/webpack-cli/commit/6140b24d08990aa807070f105d46a92e18855c9e)) -- warning should not result in non-zero exit code ([#1872](https://github.com/webpack/webpack-cli/issues/1872)) ([ae9539d](https://github.com/webpack/webpack-cli/commit/ae9539d20eab2172118f61f7a9ba7e26541e16a2)) +- cache issue ([#1862](https://github.com/webpack/webpack-cli/issues/1862)) ([305c188](https://github.com/webpack/webpack-cli/commit/305c18816ca6c4275c2755ae6b48d90a8cc85bd1)) +- check webpack installation before running cli ([#1827](https://github.com/webpack/webpack-cli/issues/1827)) ([be509fa](https://github.com/webpack/webpack-cli/commit/be509fac9a03e202e062229484bb10af7876968f)) +- defer setting default entry to core ([#1856](https://github.com/webpack/webpack-cli/issues/1856)) ([5da1f81](https://github.com/webpack/webpack-cli/commit/5da1f81ed101b024249c5cd4e043ec1397338782)) +- log error if --config-name is used without multiple configs ([#1874](https://github.com/webpack/webpack-cli/issues/1874)) ([f653409](https://github.com/webpack/webpack-cli/commit/f653409e3468849970dab354f84c5213da01122d)) +- mode behaviour ([#1824](https://github.com/webpack/webpack-cli/issues/1824)) ([9e9c70b](https://github.com/webpack/webpack-cli/commit/9e9c70bc1f30d90cebd91341e865abb46f9c269e)) +- only set output path on passing flag ([#1855](https://github.com/webpack/webpack-cli/issues/1855)) ([2f36b9d](https://github.com/webpack/webpack-cli/commit/2f36b9d858faedaf3a6adca10a529d9837c0dd24)) +- show warning if bail and watch are used together ([#1804](https://github.com/webpack/webpack-cli/issues/1804)) ([6140b24](https://github.com/webpack/webpack-cli/commit/6140b24d08990aa807070f105d46a92e18855c9e)) +- warning should not result in non-zero exit code ([#1872](https://github.com/webpack/webpack-cli/issues/1872)) ([ae9539d](https://github.com/webpack/webpack-cli/commit/ae9539d20eab2172118f61f7a9ba7e26541e16a2)) ### Features -- add --analyze flag ([#1853](https://github.com/webpack/webpack-cli/issues/1853)) ([e6d210a](https://github.com/webpack/webpack-cli/commit/e6d210a66b899023b1f39bb33cce7a9b83a5b803)) -- allow users to store stats as json to a file ([#1835](https://github.com/webpack/webpack-cli/issues/1835)) ([3907517](https://github.com/webpack/webpack-cli/commit/3907517b6afff46ddab51e32ada0357fc9763117)) +- add --analyze flag ([#1853](https://github.com/webpack/webpack-cli/issues/1853)) ([e6d210a](https://github.com/webpack/webpack-cli/commit/e6d210a66b899023b1f39bb33cce7a9b83a5b803)) +- allow users to store stats as json to a file ([#1835](https://github.com/webpack/webpack-cli/issues/1835)) ([3907517](https://github.com/webpack/webpack-cli/commit/3907517b6afff46ddab51e32ada0357fc9763117)) # 4.0.0-beta.9 (2020-09-19) ### Bug Fixes -- **serve:** merge CLI and devServer options correctly ([#1649](https://github.com/webpack/webpack-cli/issues/1649)) ([2cdf5ce](https://github.com/webpack/webpack-cli/commit/2cdf5ce159f63ac65b33f4aca4c82fa1e959fef5)) -- **utils:** respect package-lock.json ([#1375](https://github.com/webpack/webpack-cli/issues/1375)) ([ce8ec5a](https://github.com/webpack/webpack-cli/commit/ce8ec5a9f56ab5c1ce30742dced56dcbea237600)) -- **webpack-cli:** add configuration for mode option none ([#1303](https://github.com/webpack/webpack-cli/issues/1303)) ([a6930ac](https://github.com/webpack/webpack-cli/commit/a6930ac7aeea39d4b23480b1dfc05baff7b73460)) -- **webpack-cli:** add value none in mode usage ([#1411](https://github.com/webpack/webpack-cli/issues/1411)) ([66ac5b2](https://github.com/webpack/webpack-cli/commit/66ac5b239cfad99b84754c512e5982dc0902e9dd)) -- **webpack-cli:** correct cli-flags usage ([#1441](https://github.com/webpack/webpack-cli/issues/1441)) ([fb3660d](https://github.com/webpack/webpack-cli/commit/fb3660dd5cab8c596607110de14cacd98f255e34)) -- **webpack-cli:** handle promise rejection with package installation ([#1284](https://github.com/webpack/webpack-cli/issues/1284)) ([eb1112e](https://github.com/webpack/webpack-cli/commit/eb1112edf05b0a1bc83dced0e83987e4f459174c)) -- **webpack-cli:** prefer import local ([#1345](https://github.com/webpack/webpack-cli/issues/1345)) ([1af3bef](https://github.com/webpack/webpack-cli/commit/1af3befa6e680d8ee8e58dff8162ebb343755997)) -- **webpack-cli:** prefetch flag implementation ([#1583](https://github.com/webpack/webpack-cli/issues/1583)) ([d5d7682](https://github.com/webpack/webpack-cli/commit/d5d76828e29acf209ae665a91c61d849fd616d9e)) -- **webpack-cli:** remove invalid stats warning with json flag ([#1587](https://github.com/webpack/webpack-cli/issues/1587)) ([1fe4674](https://github.com/webpack/webpack-cli/commit/1fe4674b7bcca06fed9c55b34c9ee141703567f6)) -- 🐛 do not apply own defaults while setting mode ([#1565](https://github.com/webpack/webpack-cli/issues/1565)) ([4ca25bc](https://github.com/webpack/webpack-cli/commit/4ca25bc01d8ea51fdcb5aea15fd13aefd6a1aa71)) -- allow unknown files to use default require as fallback ([#1747](https://github.com/webpack/webpack-cli/issues/1747)) ([b071623](https://github.com/webpack/webpack-cli/commit/b071623ae67a9f9528b02e07376044d851ad378a)) -- **webpack-cli:** verbose flag functionality ([#1549](https://github.com/webpack/webpack-cli/issues/1549)) ([e15d9cd](https://github.com/webpack/webpack-cli/commit/e15d9cdc42627b87c9e666509f008826e0032358)) -- ci for webpack@beta.30 ([#1801](https://github.com/webpack/webpack-cli/issues/1801)) ([cb38d63](https://github.com/webpack/webpack-cli/commit/cb38d6311f59679a0680344e0eecf39803ebc5a1)) -- compatibility with webpack@next ([#1779](https://github.com/webpack/webpack-cli/issues/1779)) ([fc8c18d](https://github.com/webpack/webpack-cli/commit/fc8c18dcdae28b4d5b0b65d02b0a2b916b40bae4)) -- consistent webpack plugin name ([#1480](https://github.com/webpack/webpack-cli/issues/1480)) ([145c552](https://github.com/webpack/webpack-cli/commit/145c552d1ace3303607fe4d204106fe9437e24a0)) -- json flag, enable tests ([#1460](https://github.com/webpack/webpack-cli/issues/1460)) ([d268e13](https://github.com/webpack/webpack-cli/commit/d268e13aeca3321be6dfad29612645fde954a5db)) -- prevent info from running unnecessarily ([#1650](https://github.com/webpack/webpack-cli/issues/1650)) ([ddee5ad](https://github.com/webpack/webpack-cli/commit/ddee5ad01eee0a261881348e4de013cfa5942e55)) -- promise support in config ([#1666](https://github.com/webpack/webpack-cli/issues/1666)) ([7489e63](https://github.com/webpack/webpack-cli/commit/7489e639d13e8b89690a50595eb48214e9cdb1d9)) -- rename sourcemap flag to devtool ([#1723](https://github.com/webpack/webpack-cli/issues/1723)) ([8623343](https://github.com/webpack/webpack-cli/commit/8623343c4a375be35860735c507e44548295d4e5)) -- set mode=production by default ([#1688](https://github.com/webpack/webpack-cli/issues/1688)) ([8360df7](https://github.com/webpack/webpack-cli/commit/8360df76474bf7923ae201b895e0ae98266d6893)) -- show version information for plugin and loader ([#1661](https://github.com/webpack/webpack-cli/issues/1661)) ([1ad71e4](https://github.com/webpack/webpack-cli/commit/1ad71e4aa838e4b4655e12bddca64e1c0ef2044e)) -- **webpack-cli:** to void defaultEntry override the webpack config entry ([#1289](https://github.com/webpack/webpack-cli/issues/1289)) ([99ff047](https://github.com/webpack/webpack-cli/commit/99ff04779cad1a90d8ac47345db5f8540c6ddc23)), closes [#1288](https://github.com/webpack/webpack-cli/issues/1288) [#1288](https://github.com/webpack/webpack-cli/issues/1288) [#1288](https://github.com/webpack/webpack-cli/issues/1288) -- supply argv to config with functions ([#1721](https://github.com/webpack/webpack-cli/issues/1721)) ([2f05940](https://github.com/webpack/webpack-cli/commit/2f0594084a2d676dfe0675e54e967099c201f30c)) -- throw err when supplied config is absent ([#1760](https://github.com/webpack/webpack-cli/issues/1760)) ([86dfe51](https://github.com/webpack/webpack-cli/commit/86dfe514a5b5de38f631a02e5211d10f32c536b9)) -- throw error for invalid args ([#1462](https://github.com/webpack/webpack-cli/issues/1462)) ([25b3e04](https://github.com/webpack/webpack-cli/commit/25b3e04637db64b7f584e9badf9f8e59de978b7f)) -- typo in Compiler.js ([#1580](https://github.com/webpack/webpack-cli/issues/1580)) ([e1ccad4](https://github.com/webpack/webpack-cli/commit/e1ccad453cefb9e6a115bb87ae472843e14fb8aa)) -- use appropriate exit codes ([#1755](https://github.com/webpack/webpack-cli/issues/1755)) ([83f73b0](https://github.com/webpack/webpack-cli/commit/83f73b056e224301b871bee5e9b7254e64e84e95)) -- use compiler.apply for Progress Plugin ([#1772](https://github.com/webpack/webpack-cli/issues/1772)) ([e8f2f20](https://github.com/webpack/webpack-cli/commit/e8f2f207159ad74cfa0f3a4bc9f97bf12a9b9836)) -- use fileTypes from interpret ([#1690](https://github.com/webpack/webpack-cli/issues/1690)) ([d8f028e](https://github.com/webpack/webpack-cli/commit/d8f028edc98f28c354bfd48f7069bb52244d35da)) -- warn about merge config resolution cases ([#1674](https://github.com/webpack/webpack-cli/issues/1674)) ([bb5c7b0](https://github.com/webpack/webpack-cli/commit/bb5c7b0ed4005d523572e69c6bc924fdb5cf7306)) +- **serve:** merge CLI and devServer options correctly ([#1649](https://github.com/webpack/webpack-cli/issues/1649)) ([2cdf5ce](https://github.com/webpack/webpack-cli/commit/2cdf5ce159f63ac65b33f4aca4c82fa1e959fef5)) +- **utils:** respect package-lock.json ([#1375](https://github.com/webpack/webpack-cli/issues/1375)) ([ce8ec5a](https://github.com/webpack/webpack-cli/commit/ce8ec5a9f56ab5c1ce30742dced56dcbea237600)) +- **webpack-cli:** add configuration for mode option none ([#1303](https://github.com/webpack/webpack-cli/issues/1303)) ([a6930ac](https://github.com/webpack/webpack-cli/commit/a6930ac7aeea39d4b23480b1dfc05baff7b73460)) +- **webpack-cli:** add value none in mode usage ([#1411](https://github.com/webpack/webpack-cli/issues/1411)) ([66ac5b2](https://github.com/webpack/webpack-cli/commit/66ac5b239cfad99b84754c512e5982dc0902e9dd)) +- **webpack-cli:** correct cli-flags usage ([#1441](https://github.com/webpack/webpack-cli/issues/1441)) ([fb3660d](https://github.com/webpack/webpack-cli/commit/fb3660dd5cab8c596607110de14cacd98f255e34)) +- **webpack-cli:** handle promise rejection with package installation ([#1284](https://github.com/webpack/webpack-cli/issues/1284)) ([eb1112e](https://github.com/webpack/webpack-cli/commit/eb1112edf05b0a1bc83dced0e83987e4f459174c)) +- **webpack-cli:** prefer import local ([#1345](https://github.com/webpack/webpack-cli/issues/1345)) ([1af3bef](https://github.com/webpack/webpack-cli/commit/1af3befa6e680d8ee8e58dff8162ebb343755997)) +- **webpack-cli:** prefetch flag implementation ([#1583](https://github.com/webpack/webpack-cli/issues/1583)) ([d5d7682](https://github.com/webpack/webpack-cli/commit/d5d76828e29acf209ae665a91c61d849fd616d9e)) +- **webpack-cli:** remove invalid stats warning with json flag ([#1587](https://github.com/webpack/webpack-cli/issues/1587)) ([1fe4674](https://github.com/webpack/webpack-cli/commit/1fe4674b7bcca06fed9c55b34c9ee141703567f6)) +- 🐛 do not apply own defaults while setting mode ([#1565](https://github.com/webpack/webpack-cli/issues/1565)) ([4ca25bc](https://github.com/webpack/webpack-cli/commit/4ca25bc01d8ea51fdcb5aea15fd13aefd6a1aa71)) +- allow unknown files to use default require as fallback ([#1747](https://github.com/webpack/webpack-cli/issues/1747)) ([b071623](https://github.com/webpack/webpack-cli/commit/b071623ae67a9f9528b02e07376044d851ad378a)) +- **webpack-cli:** verbose flag functionality ([#1549](https://github.com/webpack/webpack-cli/issues/1549)) ([e15d9cd](https://github.com/webpack/webpack-cli/commit/e15d9cdc42627b87c9e666509f008826e0032358)) +- ci for webpack@beta.30 ([#1801](https://github.com/webpack/webpack-cli/issues/1801)) ([cb38d63](https://github.com/webpack/webpack-cli/commit/cb38d6311f59679a0680344e0eecf39803ebc5a1)) +- compatibility with webpack@next ([#1779](https://github.com/webpack/webpack-cli/issues/1779)) ([fc8c18d](https://github.com/webpack/webpack-cli/commit/fc8c18dcdae28b4d5b0b65d02b0a2b916b40bae4)) +- consistent webpack plugin name ([#1480](https://github.com/webpack/webpack-cli/issues/1480)) ([145c552](https://github.com/webpack/webpack-cli/commit/145c552d1ace3303607fe4d204106fe9437e24a0)) +- json flag, enable tests ([#1460](https://github.com/webpack/webpack-cli/issues/1460)) ([d268e13](https://github.com/webpack/webpack-cli/commit/d268e13aeca3321be6dfad29612645fde954a5db)) +- prevent info from running unnecessarily ([#1650](https://github.com/webpack/webpack-cli/issues/1650)) ([ddee5ad](https://github.com/webpack/webpack-cli/commit/ddee5ad01eee0a261881348e4de013cfa5942e55)) +- promise support in config ([#1666](https://github.com/webpack/webpack-cli/issues/1666)) ([7489e63](https://github.com/webpack/webpack-cli/commit/7489e639d13e8b89690a50595eb48214e9cdb1d9)) +- rename sourcemap flag to devtool ([#1723](https://github.com/webpack/webpack-cli/issues/1723)) ([8623343](https://github.com/webpack/webpack-cli/commit/8623343c4a375be35860735c507e44548295d4e5)) +- set mode=production by default ([#1688](https://github.com/webpack/webpack-cli/issues/1688)) ([8360df7](https://github.com/webpack/webpack-cli/commit/8360df76474bf7923ae201b895e0ae98266d6893)) +- show version information for plugin and loader ([#1661](https://github.com/webpack/webpack-cli/issues/1661)) ([1ad71e4](https://github.com/webpack/webpack-cli/commit/1ad71e4aa838e4b4655e12bddca64e1c0ef2044e)) +- **webpack-cli:** to void defaultEntry override the webpack config entry ([#1289](https://github.com/webpack/webpack-cli/issues/1289)) ([99ff047](https://github.com/webpack/webpack-cli/commit/99ff04779cad1a90d8ac47345db5f8540c6ddc23)), closes [#1288](https://github.com/webpack/webpack-cli/issues/1288) [#1288](https://github.com/webpack/webpack-cli/issues/1288) [#1288](https://github.com/webpack/webpack-cli/issues/1288) +- supply argv to config with functions ([#1721](https://github.com/webpack/webpack-cli/issues/1721)) ([2f05940](https://github.com/webpack/webpack-cli/commit/2f0594084a2d676dfe0675e54e967099c201f30c)) +- throw err when supplied config is absent ([#1760](https://github.com/webpack/webpack-cli/issues/1760)) ([86dfe51](https://github.com/webpack/webpack-cli/commit/86dfe514a5b5de38f631a02e5211d10f32c536b9)) +- throw error for invalid args ([#1462](https://github.com/webpack/webpack-cli/issues/1462)) ([25b3e04](https://github.com/webpack/webpack-cli/commit/25b3e04637db64b7f584e9badf9f8e59de978b7f)) +- typo in Compiler.js ([#1580](https://github.com/webpack/webpack-cli/issues/1580)) ([e1ccad4](https://github.com/webpack/webpack-cli/commit/e1ccad453cefb9e6a115bb87ae472843e14fb8aa)) +- use appropriate exit codes ([#1755](https://github.com/webpack/webpack-cli/issues/1755)) ([83f73b0](https://github.com/webpack/webpack-cli/commit/83f73b056e224301b871bee5e9b7254e64e84e95)) +- use compiler.apply for Progress Plugin ([#1772](https://github.com/webpack/webpack-cli/issues/1772)) ([e8f2f20](https://github.com/webpack/webpack-cli/commit/e8f2f207159ad74cfa0f3a4bc9f97bf12a9b9836)) +- use fileTypes from interpret ([#1690](https://github.com/webpack/webpack-cli/issues/1690)) ([d8f028e](https://github.com/webpack/webpack-cli/commit/d8f028edc98f28c354bfd48f7069bb52244d35da)) +- warn about merge config resolution cases ([#1674](https://github.com/webpack/webpack-cli/issues/1674)) ([bb5c7b0](https://github.com/webpack/webpack-cli/commit/bb5c7b0ed4005d523572e69c6bc924fdb5cf7306)) ### Code Refactoring -- remove plugin flag ([#1571](https://github.com/webpack/webpack-cli/issues/1571)) ([e4a6b7b](https://github.com/webpack/webpack-cli/commit/e4a6b7bf94776832afb948389b4ec7bf63f9911d)) -- 💡 remove defaults flag ([#1543](https://github.com/webpack/webpack-cli/issues/1543)) ([a905590](https://github.com/webpack/webpack-cli/commit/a9055902ea27c3b3ea66c334e6a8aa2f1848b6be)) +- remove plugin flag ([#1571](https://github.com/webpack/webpack-cli/issues/1571)) ([e4a6b7b](https://github.com/webpack/webpack-cli/commit/e4a6b7bf94776832afb948389b4ec7bf63f9911d)) +- 💡 remove defaults flag ([#1543](https://github.com/webpack/webpack-cli/issues/1543)) ([a905590](https://github.com/webpack/webpack-cli/commit/a9055902ea27c3b3ea66c334e6a8aa2f1848b6be)) ### Features -- **webpack-cli:** --version for external packages ([#1421](https://github.com/webpack/webpack-cli/issues/1421)) ([756a8ff](https://github.com/webpack/webpack-cli/commit/756a8ff9640f3d65b49c14fe782dac9f2936d7d5)) -- **webpack-cli:** add --no-hot flag ([#1591](https://github.com/webpack/webpack-cli/issues/1591)) ([31fcaf3](https://github.com/webpack/webpack-cli/commit/31fcaf3ed64794a449a23588a37440d32d7e6baa)) -- **webpack-cli:** add --no-stats flag ([#1654](https://github.com/webpack/webpack-cli/issues/1654)) ([597eff7](https://github.com/webpack/webpack-cli/commit/597eff731830f62adce82661612e5fdcdad7b4cd)) -- **webpack-cli:** add alias for version ([#1405](https://github.com/webpack/webpack-cli/issues/1405)) ([6b9461e](https://github.com/webpack/webpack-cli/commit/6b9461ecf6148933ec643ae9b8315fd2b2b0dccb)) -- **webpack-cli:** add mode argument validation ([#1290](https://github.com/webpack/webpack-cli/issues/1290)) ([e273303](https://github.com/webpack/webpack-cli/commit/e2733038b11715c5f93399a3d3d72b6755781d26)) -- allow multiple types for --stats ([ca2d593](https://github.com/webpack/webpack-cli/commit/ca2d593badfb8b5884d42d2e36a7ba6fa5a540df)) -- **webpack-cli:** add no-mode flag ([#1276](https://github.com/webpack/webpack-cli/issues/1276)) ([a069d73](https://github.com/webpack/webpack-cli/commit/a069d73fe420151f97a39cc50bc3865b981595e1)) -- 🎸 add support for env flag ([#1598](https://github.com/webpack/webpack-cli/issues/1598)) ([7249153](https://github.com/webpack/webpack-cli/commit/72491539bb06986d28bd55a1b112760435cade9d)) -- add --config-name flag ([#1753](https://github.com/webpack/webpack-cli/issues/1753)) ([d3ed19a](https://github.com/webpack/webpack-cli/commit/d3ed19a96811b98caa0ea0de0f8d7e76fe06879d)) -- add aliases to all available commands ([#1644](https://github.com/webpack/webpack-cli/issues/1644)) ([9352027](https://github.com/webpack/webpack-cli/commit/93520270f4bfdbf1b70ed3f02e8fe34fae51e246)) -- add init to webpack-cli ([#1609](https://github.com/webpack/webpack-cli/issues/1609)) ([5f4f3ea](https://github.com/webpack/webpack-cli/commit/5f4f3ea44a8e71ffb964a31948264623a6a75e2b)) -- add name flag ([#1757](https://github.com/webpack/webpack-cli/issues/1757)) ([ad0779f](https://github.com/webpack/webpack-cli/commit/ad0779fc53776cbd9048d033d54b7a8e9de43e8a)) -- add stats detailed option ([#1359](https://github.com/webpack/webpack-cli/issues/1359)) ([3e649e9](https://github.com/webpack/webpack-cli/commit/3e649e9796fd6756aed1b30aae9be63518db4dc5)) -- **webpack-cli:** allow multiple entry files ([#1619](https://github.com/webpack/webpack-cli/issues/1619)) ([ac2e52c](https://github.com/webpack/webpack-cli/commit/ac2e52c2ef8aa74aa795476be94ce7c968b8d1c5)) -- add support for .cjs config ([#1727](https://github.com/webpack/webpack-cli/issues/1727)) ([55ab016](https://github.com/webpack/webpack-cli/commit/55ab016c0a8ff1be1ccf8d36673e4391918647ba)) -- add support for merging multiple configurations ([#1768](https://github.com/webpack/webpack-cli/issues/1768)) ([b1e7024](https://github.com/webpack/webpack-cli/commit/b1e70244a625098633d09b04d7f772cfe18272ec)) -- add support for none config in dotfolder ([#1637](https://github.com/webpack/webpack-cli/issues/1637)) ([28526a6](https://github.com/webpack/webpack-cli/commit/28526a6b9a45e9b577a243782f14ef5a279739aa)) -- add support to spawn multiple compilers with different configs ([#1765](https://github.com/webpack/webpack-cli/issues/1765)) ([c63ab29](https://github.com/webpack/webpack-cli/commit/c63ab29e896c0d0fa3df0d26215172651e7edee8)) -- allow multiple targets ([#1799](https://github.com/webpack/webpack-cli/issues/1799)) ([1724ddb](https://github.com/webpack/webpack-cli/commit/1724ddb9067d5c5ba2654d4e5473ee9de5610825)) -- allow only specified negated flags ([#1613](https://github.com/webpack/webpack-cli/issues/1613)) ([885e0a2](https://github.com/webpack/webpack-cli/commit/885e0a222fca9622908c9314fd802c771b9f2b91)) -- allow using cjs as default config ([#1775](https://github.com/webpack/webpack-cli/issues/1775)) ([aaaa07b](https://github.com/webpack/webpack-cli/commit/aaaa07bd510cdd3d0b30cb69eb622d8798bd15eb)) -- parse Number flags ([#1652](https://github.com/webpack/webpack-cli/issues/1652)) ([b319c3a](https://github.com/webpack/webpack-cli/commit/b319c3ac209582546f30a248a94c10eede6da50e)) -- **webpack-cli:** allow negative property for cli-flags ([#1668](https://github.com/webpack/webpack-cli/issues/1668)) ([e7b46c2](https://github.com/webpack/webpack-cli/commit/e7b46c24514d77fcdd67067cded3154aaa98e48a)) -- **webpack-cli:** import flags from webpack core ([#1630](https://github.com/webpack/webpack-cli/issues/1630)) ([f478cc9](https://github.com/webpack/webpack-cli/commit/f478cc9810a17e828d96a5c9439992ecac86fc26)) -- **webpack-cli:** webpack stats ([#1299](https://github.com/webpack/webpack-cli/issues/1299)) ([0cbb270](https://github.com/webpack/webpack-cli/commit/0cbb2702a1e581150bb8e38dc9f361331179c406)) -- serve integration ([#1712](https://github.com/webpack/webpack-cli/issues/1712)) ([d3e2936](https://github.com/webpack/webpack-cli/commit/d3e29368c40ee47e4f7a07c41281714645e20ea7)) -- show up cli flag aliases with webpack help ([#1647](https://github.com/webpack/webpack-cli/issues/1647)) ([d087c61](https://github.com/webpack/webpack-cli/commit/d087c61a8a64359a8f520b4c3916948cb846a55c)) -- support command aliases with webpack-cli version ([#1664](https://github.com/webpack/webpack-cli/issues/1664)) ([a637801](https://github.com/webpack/webpack-cli/commit/a6378015ef1c51a7eb3eb85858f8109dd8c2a50a)) -- support multiple env params ([#1715](https://github.com/webpack/webpack-cli/issues/1715)) ([d315443](https://github.com/webpack/webpack-cli/commit/d3154431e559f736d8beaf6ca98b12a59b80e9bd)) -- validate user input ([#1610](https://github.com/webpack/webpack-cli/issues/1610)) ([3842a49](https://github.com/webpack/webpack-cli/commit/3842a49a64b65865720e75f8967daf56528abc8d)) +- **webpack-cli:** --version for external packages ([#1421](https://github.com/webpack/webpack-cli/issues/1421)) ([756a8ff](https://github.com/webpack/webpack-cli/commit/756a8ff9640f3d65b49c14fe782dac9f2936d7d5)) +- **webpack-cli:** add --no-hot flag ([#1591](https://github.com/webpack/webpack-cli/issues/1591)) ([31fcaf3](https://github.com/webpack/webpack-cli/commit/31fcaf3ed64794a449a23588a37440d32d7e6baa)) +- **webpack-cli:** add --no-stats flag ([#1654](https://github.com/webpack/webpack-cli/issues/1654)) ([597eff7](https://github.com/webpack/webpack-cli/commit/597eff731830f62adce82661612e5fdcdad7b4cd)) +- **webpack-cli:** add alias for version ([#1405](https://github.com/webpack/webpack-cli/issues/1405)) ([6b9461e](https://github.com/webpack/webpack-cli/commit/6b9461ecf6148933ec643ae9b8315fd2b2b0dccb)) +- **webpack-cli:** add mode argument validation ([#1290](https://github.com/webpack/webpack-cli/issues/1290)) ([e273303](https://github.com/webpack/webpack-cli/commit/e2733038b11715c5f93399a3d3d72b6755781d26)) +- allow multiple types for --stats ([ca2d593](https://github.com/webpack/webpack-cli/commit/ca2d593badfb8b5884d42d2e36a7ba6fa5a540df)) +- **webpack-cli:** add no-mode flag ([#1276](https://github.com/webpack/webpack-cli/issues/1276)) ([a069d73](https://github.com/webpack/webpack-cli/commit/a069d73fe420151f97a39cc50bc3865b981595e1)) +- 🎸 add support for env flag ([#1598](https://github.com/webpack/webpack-cli/issues/1598)) ([7249153](https://github.com/webpack/webpack-cli/commit/72491539bb06986d28bd55a1b112760435cade9d)) +- add --config-name flag ([#1753](https://github.com/webpack/webpack-cli/issues/1753)) ([d3ed19a](https://github.com/webpack/webpack-cli/commit/d3ed19a96811b98caa0ea0de0f8d7e76fe06879d)) +- add aliases to all available commands ([#1644](https://github.com/webpack/webpack-cli/issues/1644)) ([9352027](https://github.com/webpack/webpack-cli/commit/93520270f4bfdbf1b70ed3f02e8fe34fae51e246)) +- add init to webpack-cli ([#1609](https://github.com/webpack/webpack-cli/issues/1609)) ([5f4f3ea](https://github.com/webpack/webpack-cli/commit/5f4f3ea44a8e71ffb964a31948264623a6a75e2b)) +- add name flag ([#1757](https://github.com/webpack/webpack-cli/issues/1757)) ([ad0779f](https://github.com/webpack/webpack-cli/commit/ad0779fc53776cbd9048d033d54b7a8e9de43e8a)) +- add stats detailed option ([#1359](https://github.com/webpack/webpack-cli/issues/1359)) ([3e649e9](https://github.com/webpack/webpack-cli/commit/3e649e9796fd6756aed1b30aae9be63518db4dc5)) +- **webpack-cli:** allow multiple entry files ([#1619](https://github.com/webpack/webpack-cli/issues/1619)) ([ac2e52c](https://github.com/webpack/webpack-cli/commit/ac2e52c2ef8aa74aa795476be94ce7c968b8d1c5)) +- add support for .cjs config ([#1727](https://github.com/webpack/webpack-cli/issues/1727)) ([55ab016](https://github.com/webpack/webpack-cli/commit/55ab016c0a8ff1be1ccf8d36673e4391918647ba)) +- add support for merging multiple configurations ([#1768](https://github.com/webpack/webpack-cli/issues/1768)) ([b1e7024](https://github.com/webpack/webpack-cli/commit/b1e70244a625098633d09b04d7f772cfe18272ec)) +- add support for none config in dotfolder ([#1637](https://github.com/webpack/webpack-cli/issues/1637)) ([28526a6](https://github.com/webpack/webpack-cli/commit/28526a6b9a45e9b577a243782f14ef5a279739aa)) +- add support to spawn multiple compilers with different configs ([#1765](https://github.com/webpack/webpack-cli/issues/1765)) ([c63ab29](https://github.com/webpack/webpack-cli/commit/c63ab29e896c0d0fa3df0d26215172651e7edee8)) +- allow multiple targets ([#1799](https://github.com/webpack/webpack-cli/issues/1799)) ([1724ddb](https://github.com/webpack/webpack-cli/commit/1724ddb9067d5c5ba2654d4e5473ee9de5610825)) +- allow only specified negated flags ([#1613](https://github.com/webpack/webpack-cli/issues/1613)) ([885e0a2](https://github.com/webpack/webpack-cli/commit/885e0a222fca9622908c9314fd802c771b9f2b91)) +- allow using cjs as default config ([#1775](https://github.com/webpack/webpack-cli/issues/1775)) ([aaaa07b](https://github.com/webpack/webpack-cli/commit/aaaa07bd510cdd3d0b30cb69eb622d8798bd15eb)) +- parse Number flags ([#1652](https://github.com/webpack/webpack-cli/issues/1652)) ([b319c3a](https://github.com/webpack/webpack-cli/commit/b319c3ac209582546f30a248a94c10eede6da50e)) +- **webpack-cli:** allow negative property for cli-flags ([#1668](https://github.com/webpack/webpack-cli/issues/1668)) ([e7b46c2](https://github.com/webpack/webpack-cli/commit/e7b46c24514d77fcdd67067cded3154aaa98e48a)) +- **webpack-cli:** import flags from webpack core ([#1630](https://github.com/webpack/webpack-cli/issues/1630)) ([f478cc9](https://github.com/webpack/webpack-cli/commit/f478cc9810a17e828d96a5c9439992ecac86fc26)) +- **webpack-cli:** webpack stats ([#1299](https://github.com/webpack/webpack-cli/issues/1299)) ([0cbb270](https://github.com/webpack/webpack-cli/commit/0cbb2702a1e581150bb8e38dc9f361331179c406)) +- serve integration ([#1712](https://github.com/webpack/webpack-cli/issues/1712)) ([d3e2936](https://github.com/webpack/webpack-cli/commit/d3e29368c40ee47e4f7a07c41281714645e20ea7)) +- show up cli flag aliases with webpack help ([#1647](https://github.com/webpack/webpack-cli/issues/1647)) ([d087c61](https://github.com/webpack/webpack-cli/commit/d087c61a8a64359a8f520b4c3916948cb846a55c)) +- support command aliases with webpack-cli version ([#1664](https://github.com/webpack/webpack-cli/issues/1664)) ([a637801](https://github.com/webpack/webpack-cli/commit/a6378015ef1c51a7eb3eb85858f8109dd8c2a50a)) +- support multiple env params ([#1715](https://github.com/webpack/webpack-cli/issues/1715)) ([d315443](https://github.com/webpack/webpack-cli/commit/d3154431e559f736d8beaf6ca98b12a59b80e9bd)) +- validate user input ([#1610](https://github.com/webpack/webpack-cli/issues/1610)) ([3842a49](https://github.com/webpack/webpack-cli/commit/3842a49a64b65865720e75f8967daf56528abc8d)) ### Performance Improvements -- do not spawn new process for running webpack ([#1741](https://github.com/webpack/webpack-cli/issues/1741)) ([e06392a](https://github.com/webpack/webpack-cli/commit/e06392ae531d111dab9603c785001338740f42ab)) +- do not spawn new process for running webpack ([#1741](https://github.com/webpack/webpack-cli/issues/1741)) ([e06392a](https://github.com/webpack/webpack-cli/commit/e06392ae531d111dab9603c785001338740f42ab)) ### BREAKING CHANGES -- 🧨 removed --plugin without any replacement +- 🧨 removed --plugin without any replacement Co-authored-by: Anshuman Verma -- the `defaults` options was removed without replacement +- the `defaults` options was removed without replacement # [4.0.0-beta.8](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.0.0-beta.7...webpack-cli@4.0.0-beta.8) (2020-03-02) @@ -282,12 +282,12 @@ Co-authored-by: Anshuman Verma ### Bug Fixes -- **webpack-cli:** fixed support for SCSS entry points ([#1271](https://github.com/webpack/webpack-cli/issues/1271)) ([321bbe5](https://github.com/webpack/webpack-cli/commit/321bbe5d5da9b3c7781ce751133432952998aaa5)) -- **webpack-cli:** handle promise rejection happening with cli-executor ([#1269](https://github.com/webpack/webpack-cli/issues/1269)) ([afe97f6](https://github.com/webpack/webpack-cli/commit/afe97f69eac2540db94897c39c5bb467cf137e3c)) +- **webpack-cli:** fixed support for SCSS entry points ([#1271](https://github.com/webpack/webpack-cli/issues/1271)) ([321bbe5](https://github.com/webpack/webpack-cli/commit/321bbe5d5da9b3c7781ce751133432952998aaa5)) +- **webpack-cli:** handle promise rejection happening with cli-executor ([#1269](https://github.com/webpack/webpack-cli/issues/1269)) ([afe97f6](https://github.com/webpack/webpack-cli/commit/afe97f69eac2540db94897c39c5bb467cf137e3c)) ### Features -- **webpack-cli:** create a cli executer ([#1255](https://github.com/webpack/webpack-cli/issues/1255)) ([c74574b](https://github.com/webpack/webpack-cli/commit/c74574b8015362def7463c3de9adff0e839735a3)) +- **webpack-cli:** create a cli executer ([#1255](https://github.com/webpack/webpack-cli/issues/1255)) ([c74574b](https://github.com/webpack/webpack-cli/commit/c74574b8015362def7463c3de9adff0e839735a3)) # [4.0.0-beta.6](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.0.0-beta.5...webpack-cli@4.0.0-beta.6) (2020-02-23) @@ -301,254 +301,254 @@ Co-authored-by: Anshuman Verma ### Features -- **webpack-cli:** add progress bar for progress flag ([#1238](https://github.com/webpack/webpack-cli/issues/1238)) ([06129a1](https://github.com/webpack/webpack-cli/commit/06129a19a39495f54cbf1b123d24f1216b4cc0d9)) -- **webpack-cli:** added mode argument ([#1253](https://github.com/webpack/webpack-cli/issues/1253)) ([7a5b33d](https://github.com/webpack/webpack-cli/commit/7a5b33dcd5aa5a8ea37062ae93d1fc38cdb5464c)) +- **webpack-cli:** add progress bar for progress flag ([#1238](https://github.com/webpack/webpack-cli/issues/1238)) ([06129a1](https://github.com/webpack/webpack-cli/commit/06129a19a39495f54cbf1b123d24f1216b4cc0d9)) +- **webpack-cli:** added mode argument ([#1253](https://github.com/webpack/webpack-cli/issues/1253)) ([7a5b33d](https://github.com/webpack/webpack-cli/commit/7a5b33dcd5aa5a8ea37062ae93d1fc38cdb5464c)) ## [4.0.0-beta.2](https://github.com/webpack/webpack-cli/compare/v3.3.5...v4.0.0-beta.2) (2020-02-11) ### Features -- 0cjs for array configs ([e233ed6](https://github.com/webpack/webpack-cli/commit/e233ed6661ea6453d7e6b005b73c6ecd05c871ac)) -- **chore:** refactor code to eliminate redundancy ([12cf389](https://github.com/webpack/webpack-cli/commit/12cf389f4550298c4646d99c9ac431658bb8ba8e)) -- **cli:** add helper to check if arg is the command name or alias ([28d303b](https://github.com/webpack/webpack-cli/commit/28d303bced6810a18a4f7bc6d8a0dba487f79433)) -- remove unneeded color ([b4cd29f](https://github.com/webpack/webpack-cli/commit/b4cd29fbad26e291687e90d10b3087331193b9f4)) -- **cli:** adds standard output flag ([#1206](https://github.com/webpack/webpack-cli/issues/1206)) ([b05e5eb](https://github.com/webpack/webpack-cli/commit/b05e5ebf918576ddd5a304dc86be0aed02352bfa)) -- add codeowners file ([1070038](https://github.com/webpack/webpack-cli/commit/10700386046bb1be908dfc48384d77aad44bf93f)) -- add mjs support ([5f38764](https://github.com/webpack/webpack-cli/commit/5f387641839419d3f536bb99ad6741f701b953de)) -- add-badge ([751ae5a](https://github.com/webpack/webpack-cli/commit/751ae5a4d3fb4895ffb8d28ef61b99c8454a438c)) -- always spawn a process for cli ([#1198](https://github.com/webpack/webpack-cli/issues/1198)) ([06171b3](https://github.com/webpack/webpack-cli/commit/06171b3c7c030985d4c6cf32e7512cb3795f73ba)) -- better defaults, cleanup ([1a467b6](https://github.com/webpack/webpack-cli/commit/1a467b67d937ac564a7f32f324107e1e1cdfd812)) -- create commands.js ([2c0c221](https://github.com/webpack/webpack-cli/commit/2c0c221e5f8774efa98cffb279abff164fe4898a)) -- drop extraneous block ([fa3aa2b](https://github.com/webpack/webpack-cli/commit/fa3aa2b86a2d938477b1b66b95614cd54cc95c9b)) -- env based config defaults ([be28c78](https://github.com/webpack/webpack-cli/commit/be28c782fb0b8f357acc6e41264d0d04c8b4236d)) -- help for commands ([0feefb3](https://github.com/webpack/webpack-cli/commit/0feefb3a77fd9452ee747e6f6fcc2d6405619f67)) -- help for core flags ([#1141](https://github.com/webpack/webpack-cli/issues/1141)) ([8f92cb9](https://github.com/webpack/webpack-cli/commit/8f92cb97f5877893c4f962855801e808bfe4f17b)), closes [#1168](https://github.com/webpack/webpack-cli/issues/1168) -- merge ouputCommand into outputHelp ([5ab0024](https://github.com/webpack/webpack-cli/commit/5ab0024a8397bc681524727cbc2edc6bd59d33f2)) -- minor tweak ([7c273dc](https://github.com/webpack/webpack-cli/commit/7c273dc3ad786ba4b806ab55ddabc6be19f253dd)) -- refactor ([0505d05](https://github.com/webpack/webpack-cli/commit/0505d052ec41942efcf0b5f42f4ceed5cd9449d8)) -- refactor ([002a785](https://github.com/webpack/webpack-cli/commit/002a78576ee7f209042e7a49afbb76795e609422)) -- refactor ([ad7fe98](https://github.com/webpack/webpack-cli/commit/ad7fe986b9e556d2e52a025b77755cd860a0992c)) -- refactor ([cb8968d](https://github.com/webpack/webpack-cli/commit/cb8968d8a0f0d154aa50b9108be42910f3b73ea7)) -- refactor ([16c368f](https://github.com/webpack/webpack-cli/commit/16c368f9a88198ff497afee4598553cb1f800d23)) -- refactor ([07a2961](https://github.com/webpack/webpack-cli/commit/07a2961c1b0eedb80f49535ab52030d619761a1c)) -- refactor ([c991733](https://github.com/webpack/webpack-cli/commit/c991733dba068d1c397d09ab3dcc99e9bf21de74)) -- refactor ([4858fde](https://github.com/webpack/webpack-cli/commit/4858fdef6c42220b518e6fd412a34c03c8ccacbf)) -- refactor ([2b1ea4c](https://github.com/webpack/webpack-cli/commit/2b1ea4c3ba85d6c43d628b4141b51fd2b70d9ce1)) -- refactor ([dee2884](https://github.com/webpack/webpack-cli/commit/dee288441c7de4c117addc53876e8864e2c4a14f)) -- refactor group-helper ([807bcb4](https://github.com/webpack/webpack-cli/commit/807bcb426b2fb2fbb781cae871cd0a0f234c5a55)) -- refactor groups-config ([4bf86bc](https://github.com/webpack/webpack-cli/commit/4bf86bc196b3ee6334ccc3f32fdeedf5857b9491)) -- refactor groups-config ([00acc50](https://github.com/webpack/webpack-cli/commit/00acc50514b1782dc3c91a62d7214b2b6e9c022f)) -- refactor logic ([3efe4bb](https://github.com/webpack/webpack-cli/commit/3efe4bbb52c5db6876c33b2f68d04d5e09052ee4)) -- refactor test-utils ([d4873ad](https://github.com/webpack/webpack-cli/commit/d4873ad149bb4c90ba2077db7c1311d1f9c7931b)) -- Support `export default` from configuration files. ([0f23d03](https://github.com/webpack/webpack-cli/commit/0f23d03e6832a8571ed65044a50271f5fe253671)) -- support array-configs ([fa9d5c2](https://github.com/webpack/webpack-cli/commit/fa9d5c22b41458a71b91e73bfe48924a61ba6e3e)) -- support array-configs ([76ced4a](https://github.com/webpack/webpack-cli/commit/76ced4ab3324745a09237957e21e278cbdc7f0dc)) -- support negated flags ([239a67e](https://github.com/webpack/webpack-cli/commit/239a67ea4fa32b3da180f374732d4c4a761dc4ac)) -- **interpret:** use interpret ([31c856f](https://github.com/webpack/webpack-cli/commit/31c856f1c9db7a186a4ae32fa1f70396999b41cd)) -- tweak ([79021e3](https://github.com/webpack/webpack-cli/commit/79021e347d616df277484d79927085a0e08fc9a4)) -- update notify period ([0d83e49](https://github.com/webpack/webpack-cli/commit/0d83e493def6d5515b3f3537e73cbacd4c4a4516)) -- **init:** add as req dep ([fec5b25](https://github.com/webpack/webpack-cli/commit/fec5b25453d8035712e1ec2c81a8f10bc27e76be)) -- update outputCommand ([4f19ad4](https://github.com/webpack/webpack-cli/commit/4f19ad4fbf3d12cd46f6dd7faaea1d6db02ec197)) -- **cli:** make serve use webpack cli compiler ([ab862d2](https://github.com/webpack/webpack-cli/commit/ab862d2ab72be3e0c73d1a35e31c81cde3d3e006)) -- **defaults:** set entry obj defaults and add default flag ([4608167](https://github.com/webpack/webpack-cli/commit/4608167fd5ff7a9b201843bd050294da9eccfbdf)) -- **init:** write file correct, better defaults and write babelrc file ([3814d44](https://github.com/webpack/webpack-cli/commit/3814d44d97d519f0b0eae2cc5e400b1899848e37)) -- **serve:** add all flags, improve args parsing ([46ca4de](https://github.com/webpack/webpack-cli/commit/46ca4de11b16a3b29d800a150edf90b7562455ea)) -- **serve:** pass socket or port if no socket ([4668ea7](https://github.com/webpack/webpack-cli/commit/4668ea78e125a698e0988ead30c82bec0f9bb8e3)) -- **silent:** add new flag ([fcdc3f4](https://github.com/webpack/webpack-cli/commit/fcdc3f41f3aa55681b18fb5083279dbd91441d68)) -- Update README.md ([b3dc27e](https://github.com/webpack/webpack-cli/commit/b3dc27e8b9d93221ef57ff013018a532254dc989)) -- use jspluginswebpack ([da8fce2](https://github.com/webpack/webpack-cli/commit/da8fce23894315fc9921c51dfb58d77fbf35e8c9)) +- 0cjs for array configs ([e233ed6](https://github.com/webpack/webpack-cli/commit/e233ed6661ea6453d7e6b005b73c6ecd05c871ac)) +- **chore:** refactor code to eliminate redundancy ([12cf389](https://github.com/webpack/webpack-cli/commit/12cf389f4550298c4646d99c9ac431658bb8ba8e)) +- **cli:** add helper to check if arg is the command name or alias ([28d303b](https://github.com/webpack/webpack-cli/commit/28d303bced6810a18a4f7bc6d8a0dba487f79433)) +- remove unneeded color ([b4cd29f](https://github.com/webpack/webpack-cli/commit/b4cd29fbad26e291687e90d10b3087331193b9f4)) +- **cli:** adds standard output flag ([#1206](https://github.com/webpack/webpack-cli/issues/1206)) ([b05e5eb](https://github.com/webpack/webpack-cli/commit/b05e5ebf918576ddd5a304dc86be0aed02352bfa)) +- add codeowners file ([1070038](https://github.com/webpack/webpack-cli/commit/10700386046bb1be908dfc48384d77aad44bf93f)) +- add mjs support ([5f38764](https://github.com/webpack/webpack-cli/commit/5f387641839419d3f536bb99ad6741f701b953de)) +- add-badge ([751ae5a](https://github.com/webpack/webpack-cli/commit/751ae5a4d3fb4895ffb8d28ef61b99c8454a438c)) +- always spawn a process for cli ([#1198](https://github.com/webpack/webpack-cli/issues/1198)) ([06171b3](https://github.com/webpack/webpack-cli/commit/06171b3c7c030985d4c6cf32e7512cb3795f73ba)) +- better defaults, cleanup ([1a467b6](https://github.com/webpack/webpack-cli/commit/1a467b67d937ac564a7f32f324107e1e1cdfd812)) +- create commands.js ([2c0c221](https://github.com/webpack/webpack-cli/commit/2c0c221e5f8774efa98cffb279abff164fe4898a)) +- drop extraneous block ([fa3aa2b](https://github.com/webpack/webpack-cli/commit/fa3aa2b86a2d938477b1b66b95614cd54cc95c9b)) +- env based config defaults ([be28c78](https://github.com/webpack/webpack-cli/commit/be28c782fb0b8f357acc6e41264d0d04c8b4236d)) +- help for commands ([0feefb3](https://github.com/webpack/webpack-cli/commit/0feefb3a77fd9452ee747e6f6fcc2d6405619f67)) +- help for core flags ([#1141](https://github.com/webpack/webpack-cli/issues/1141)) ([8f92cb9](https://github.com/webpack/webpack-cli/commit/8f92cb97f5877893c4f962855801e808bfe4f17b)), closes [#1168](https://github.com/webpack/webpack-cli/issues/1168) +- merge ouputCommand into outputHelp ([5ab0024](https://github.com/webpack/webpack-cli/commit/5ab0024a8397bc681524727cbc2edc6bd59d33f2)) +- minor tweak ([7c273dc](https://github.com/webpack/webpack-cli/commit/7c273dc3ad786ba4b806ab55ddabc6be19f253dd)) +- refactor ([0505d05](https://github.com/webpack/webpack-cli/commit/0505d052ec41942efcf0b5f42f4ceed5cd9449d8)) +- refactor ([002a785](https://github.com/webpack/webpack-cli/commit/002a78576ee7f209042e7a49afbb76795e609422)) +- refactor ([ad7fe98](https://github.com/webpack/webpack-cli/commit/ad7fe986b9e556d2e52a025b77755cd860a0992c)) +- refactor ([cb8968d](https://github.com/webpack/webpack-cli/commit/cb8968d8a0f0d154aa50b9108be42910f3b73ea7)) +- refactor ([16c368f](https://github.com/webpack/webpack-cli/commit/16c368f9a88198ff497afee4598553cb1f800d23)) +- refactor ([07a2961](https://github.com/webpack/webpack-cli/commit/07a2961c1b0eedb80f49535ab52030d619761a1c)) +- refactor ([c991733](https://github.com/webpack/webpack-cli/commit/c991733dba068d1c397d09ab3dcc99e9bf21de74)) +- refactor ([4858fde](https://github.com/webpack/webpack-cli/commit/4858fdef6c42220b518e6fd412a34c03c8ccacbf)) +- refactor ([2b1ea4c](https://github.com/webpack/webpack-cli/commit/2b1ea4c3ba85d6c43d628b4141b51fd2b70d9ce1)) +- refactor ([dee2884](https://github.com/webpack/webpack-cli/commit/dee288441c7de4c117addc53876e8864e2c4a14f)) +- refactor group-helper ([807bcb4](https://github.com/webpack/webpack-cli/commit/807bcb426b2fb2fbb781cae871cd0a0f234c5a55)) +- refactor groups-config ([4bf86bc](https://github.com/webpack/webpack-cli/commit/4bf86bc196b3ee6334ccc3f32fdeedf5857b9491)) +- refactor groups-config ([00acc50](https://github.com/webpack/webpack-cli/commit/00acc50514b1782dc3c91a62d7214b2b6e9c022f)) +- refactor logic ([3efe4bb](https://github.com/webpack/webpack-cli/commit/3efe4bbb52c5db6876c33b2f68d04d5e09052ee4)) +- refactor test-utils ([d4873ad](https://github.com/webpack/webpack-cli/commit/d4873ad149bb4c90ba2077db7c1311d1f9c7931b)) +- Support `export default` from configuration files. ([0f23d03](https://github.com/webpack/webpack-cli/commit/0f23d03e6832a8571ed65044a50271f5fe253671)) +- support array-configs ([fa9d5c2](https://github.com/webpack/webpack-cli/commit/fa9d5c22b41458a71b91e73bfe48924a61ba6e3e)) +- support array-configs ([76ced4a](https://github.com/webpack/webpack-cli/commit/76ced4ab3324745a09237957e21e278cbdc7f0dc)) +- support negated flags ([239a67e](https://github.com/webpack/webpack-cli/commit/239a67ea4fa32b3da180f374732d4c4a761dc4ac)) +- **interpret:** use interpret ([31c856f](https://github.com/webpack/webpack-cli/commit/31c856f1c9db7a186a4ae32fa1f70396999b41cd)) +- tweak ([79021e3](https://github.com/webpack/webpack-cli/commit/79021e347d616df277484d79927085a0e08fc9a4)) +- update notify period ([0d83e49](https://github.com/webpack/webpack-cli/commit/0d83e493def6d5515b3f3537e73cbacd4c4a4516)) +- **init:** add as req dep ([fec5b25](https://github.com/webpack/webpack-cli/commit/fec5b25453d8035712e1ec2c81a8f10bc27e76be)) +- update outputCommand ([4f19ad4](https://github.com/webpack/webpack-cli/commit/4f19ad4fbf3d12cd46f6dd7faaea1d6db02ec197)) +- **cli:** make serve use webpack cli compiler ([ab862d2](https://github.com/webpack/webpack-cli/commit/ab862d2ab72be3e0c73d1a35e31c81cde3d3e006)) +- **defaults:** set entry obj defaults and add default flag ([4608167](https://github.com/webpack/webpack-cli/commit/4608167fd5ff7a9b201843bd050294da9eccfbdf)) +- **init:** write file correct, better defaults and write babelrc file ([3814d44](https://github.com/webpack/webpack-cli/commit/3814d44d97d519f0b0eae2cc5e400b1899848e37)) +- **serve:** add all flags, improve args parsing ([46ca4de](https://github.com/webpack/webpack-cli/commit/46ca4de11b16a3b29d800a150edf90b7562455ea)) +- **serve:** pass socket or port if no socket ([4668ea7](https://github.com/webpack/webpack-cli/commit/4668ea78e125a698e0988ead30c82bec0f9bb8e3)) +- **silent:** add new flag ([fcdc3f4](https://github.com/webpack/webpack-cli/commit/fcdc3f41f3aa55681b18fb5083279dbd91441d68)) +- Update README.md ([b3dc27e](https://github.com/webpack/webpack-cli/commit/b3dc27e8b9d93221ef57ff013018a532254dc989)) +- use jspluginswebpack ([da8fce2](https://github.com/webpack/webpack-cli/commit/da8fce23894315fc9921c51dfb58d77fbf35e8c9)) ### Bug Fixes -- various tests are now working ([#1168](https://github.com/webpack/webpack-cli/issues/1168)) ([287d8ee](https://github.com/webpack/webpack-cli/commit/287d8ee28afc69c8310828b0fa0919d40b6131af)) -- array to object check ([2398249](https://github.com/webpack/webpack-cli/commit/2398249dcf23232b15c22d330681ca19f442e394)) -- badge url placement ([8d33d15](https://github.com/webpack/webpack-cli/commit/8d33d15f7439e35696f354a9f057fa4550893648)) -- changed the path resolver call ([0080ce2](https://github.com/webpack/webpack-cli/commit/0080ce297482b83fb1f7dfdc0328e1734aa1713e)) -- config lookup ([762e3b9](https://github.com/webpack/webpack-cli/commit/762e3b9141503521d82a997a9f36f9d4612f0abf)) -- correct jscodeshift import ([0c67103](https://github.com/webpack/webpack-cli/commit/0c67103644ce6f51b0e43a48c80f76883de24b5d)) -- enable colors in ci ([7c9e0df](https://github.com/webpack/webpack-cli/commit/7c9e0df74cb88b4907e513c53218db9478cacc79)) -- extend notify period ([aff8352](https://github.com/webpack/webpack-cli/commit/aff8352eaa2419a356b13e19a2ad1168001cebca)) -- grammar within comment ([d482677](https://github.com/webpack/webpack-cli/commit/d4826774a628f12aeed4deb9382d390e5d800914)) -- ignore failing test case ([c643626](https://github.com/webpack/webpack-cli/commit/c6436261ccaa659ecad1e4f29104d860e4f6219c)) -- ignore failing tests ([444355a](https://github.com/webpack/webpack-cli/commit/444355aa22d0efc9eb0e887560d04a125061e321)) -- improve local configRegister file resolution ([32cc513](https://github.com/webpack/webpack-cli/commit/32cc513eb62abf6dd7e18d8bacf6d0400cc9020e)), closes [#746](https://github.com/webpack/webpack-cli/issues/746) -- make init reolve linked packges ([#1006](https://github.com/webpack/webpack-cli/issues/1006)) ([187045a](https://github.com/webpack/webpack-cli/commit/187045a5cdfa7c32659c73b867587d0a2c1c29e1)) -- minor fix ([0d9aa9a](https://github.com/webpack/webpack-cli/commit/0d9aa9ac7868f0154209eb119b6244df55859af7)) -- **cli:** await external command execution, fix lint ([ce8f284](https://github.com/webpack/webpack-cli/commit/ce8f2840267c627539813f3b06956b9bf89584a3)) -- **cli:** missing package, fixed function call ([4ee4d41](https://github.com/webpack/webpack-cli/commit/4ee4d41afc82f28545bc6e6482f034bc13cdd0d7)) -- **create:** add default sw in create template ([#1153](https://github.com/webpack/webpack-cli/issues/1153)) ([edf65c2](https://github.com/webpack/webpack-cli/commit/edf65c2f0430c1c76d4f7004b338e46f56be35f2)), closes [#1152](https://github.com/webpack/webpack-cli/issues/1152) [#1152](https://github.com/webpack/webpack-cli/issues/1152) [#1152](https://github.com/webpack/webpack-cli/issues/1152) -- **create:** handle create package errors gracefully ([#1159](https://github.com/webpack/webpack-cli/issues/1159)) ([aa6d82b](https://github.com/webpack/webpack-cli/commit/aa6d82b649c9a1f4c54566b80597576d9bb554b4)), closes [#1151](https://github.com/webpack/webpack-cli/issues/1151) [#1151](https://github.com/webpack/webpack-cli/issues/1151) [#1151](https://github.com/webpack/webpack-cli/issues/1151) [#1151](https://github.com/webpack/webpack-cli/issues/1151) -- **deps:** add missing cz-customizable dep to allow committing ([68b1bbe](https://github.com/webpack/webpack-cli/commit/68b1bbe8f93685727ef5973b81dbe73e3fe0c3c7)), closes [#1040](https://github.com/webpack/webpack-cli/issues/1040) -- **info:** minor fix in the info function ([7a5cc51](https://github.com/webpack/webpack-cli/commit/7a5cc511ff78177c71c17e91619320933014f157)) -- **init:** check defaults more precisely ([51831c7](https://github.com/webpack/webpack-cli/commit/51831c79bb701b7a21778ae7c90f7753a270c24d)) -- use includes instead ([76671cb](https://github.com/webpack/webpack-cli/commit/76671cb9b6b9e753c7872a31a836bbd69d9c4ce1)) -- **init:** fixed package template to include name param ([#1203](https://github.com/webpack/webpack-cli/issues/1203)) ([83c0056](https://github.com/webpack/webpack-cli/commit/83c0056999e82496ad24a1e965157491287ad895)) -- minor refactor ([a30a027](https://github.com/webpack/webpack-cli/commit/a30a02716c50b1c52c223c42eabe5dd1cbe29577)) -- minor tweak ([d21d6d3](https://github.com/webpack/webpack-cli/commit/d21d6d338fa7169929363d4fe60b8d7b8b39fcd1)) -- minor typo ([85d1a7c](https://github.com/webpack/webpack-cli/commit/85d1a7c26499400a65b88274b466818899b36da8)) -- plugin val ([b835e71](https://github.com/webpack/webpack-cli/commit/b835e711f5a7d96bf609161ba7b58bdd6acba426)) -- promise configurations ([ae3ec9b](https://github.com/webpack/webpack-cli/commit/ae3ec9bef7da3c06020d3b4cab877ede19f0d631)) -- refactor redundant code ([c7b77a0](https://github.com/webpack/webpack-cli/commit/c7b77a08d3fad0ba93605e69f21b939614c383e5)) -- remove else block ([2b36987](https://github.com/webpack/webpack-cli/commit/2b36987ce2aa030a476a58bb80737e881926528d)) -- remove extra ternary operator ([115709e](https://github.com/webpack/webpack-cli/commit/115709e4107f7c5e0ff0bfaf5183b6df7d87fdac)) -- remove failing test case ([e3e46b6](https://github.com/webpack/webpack-cli/commit/e3e46b6c58f45286a2194105d1fb92deb67d9c53)) -- remove for now the default value of the target ([#1171](https://github.com/webpack/webpack-cli/issues/1171)) ([2d56f79](https://github.com/webpack/webpack-cli/commit/2d56f790cfd6ed076c80afb0a6d613e56169c5c5)) -- Remove redundant await ([6910877](https://github.com/webpack/webpack-cli/commit/691087774f4c453ae597e7b67343b75a41027036)) -- remove unused variable ([b5510d8](https://github.com/webpack/webpack-cli/commit/b5510d882bf60a2249e0022d573b2a2fb2a06dad)) -- rephrase comment ([e11c1c8](https://github.com/webpack/webpack-cli/commit/e11c1c8012cad266a41b5fc810384c9b6fe90065)) -- revert ([b51df6a](https://github.com/webpack/webpack-cli/commit/b51df6aa2e3de60bf8a57e6b223fd64b48501436)) -- revert ([75f56c5](https://github.com/webpack/webpack-cli/commit/75f56c5478a1177fcfcbbf189de4fc101431e055)) -- revert ([f44d8a5](https://github.com/webpack/webpack-cli/commit/f44d8a57b29a77a897eccfb95df71edd9db75b32)) -- spread args to mono-repo ([7499dd3](https://github.com/webpack/webpack-cli/commit/7499dd37f116a4d65bf0983e742943d03c351ee7)) -- tweak ([b5add43](https://github.com/webpack/webpack-cli/commit/b5add43af0a742a925fee6200727f4358eb34749)) -- tweak ([d74efde](https://github.com/webpack/webpack-cli/commit/d74efde1352790bd7e854df61884d51a0c667e3e)) -- typo ([10618de](https://github.com/webpack/webpack-cli/commit/10618de2f2f91698dd5b7a9d12f74865ac4a1ecb)) -- typo fix ([dc3a5e6](https://github.com/webpack/webpack-cli/commit/dc3a5e64fd94a26338f7ba1bc36fc100ddbb4f9d)) -- update badge url ([0b1bbd7](https://github.com/webpack/webpack-cli/commit/0b1bbd7ac277a757fe0c8cde3773f6bda7a51467)) -- update comments ([7553ae7](https://github.com/webpack/webpack-cli/commit/7553ae76b6a2f84cb5cb69f73f1eb3613020775f)) -- Use ES6 object initializer shorthand ([f4cf9b1](https://github.com/webpack/webpack-cli/commit/f4cf9b198d0cf53ce1cb3251e24507be51b34f8b)) -- use webpack-log ([9bfb79c](https://github.com/webpack/webpack-cli/commit/9bfb79c54020ef5e93c2417b2bee2feb7bcce31b)) -- warn on unknown, plugin ([ae725c8](https://github.com/webpack/webpack-cli/commit/ae725c86a5c131470f6aee65cd6e6744264dea80)) -- **serve:** add flag to ext-dep list ([1277cc9](https://github.com/webpack/webpack-cli/commit/1277cc9173d9bfa0afb312097e2a4f611491f4ae)) -- warnings on lint ([b402179](https://github.com/webpack/webpack-cli/commit/b402179759f02310b60a026329d57b7c5b49a97e)) -- warnings on lint ([76db13c](https://github.com/webpack/webpack-cli/commit/76db13c22006dc17819447b34c1be9906b3492fe)) -- **init:** fixes config resolution on generating new configuration ([44fa20c](https://github.com/webpack/webpack-cli/commit/44fa20c5b4f791c44e2e3993f8c613d16dcc1bcd)) -- **progress:** make boolean ([49bc0a4](https://github.com/webpack/webpack-cli/commit/49bc0a47c28cda87abce314bcc828a1e229be7b5)) -- **serve:** add newline at helper end ([25071ce](https://github.com/webpack/webpack-cli/commit/25071ceae3bddcb8e05be8f2064dbbdc174cbe34)) -- **serve:** disable for now ([fcf6e3e](https://github.com/webpack/webpack-cli/commit/fcf6e3e0016422310674c70c371a0ed2bd12b37f)) -- **serve:** fix gitignore, fix lint problems ([18636c3](https://github.com/webpack/webpack-cli/commit/18636c3ef422e1dc2d3cfbe3ca368b1cef560a50)) -- **serve:** handle serve args as an array ([#1174](https://github.com/webpack/webpack-cli/issues/1174)) ([8aa1b7d](https://github.com/webpack/webpack-cli/commit/8aa1b7d5cd69d8ae1bcf98aad7f03618c6609fc7)) -- **serve:** relative imports ([1d9c2bc](https://github.com/webpack/webpack-cli/commit/1d9c2bc626dc97ba7e42b85e5b58f99af24a64ac)) +- various tests are now working ([#1168](https://github.com/webpack/webpack-cli/issues/1168)) ([287d8ee](https://github.com/webpack/webpack-cli/commit/287d8ee28afc69c8310828b0fa0919d40b6131af)) +- array to object check ([2398249](https://github.com/webpack/webpack-cli/commit/2398249dcf23232b15c22d330681ca19f442e394)) +- badge url placement ([8d33d15](https://github.com/webpack/webpack-cli/commit/8d33d15f7439e35696f354a9f057fa4550893648)) +- changed the path resolver call ([0080ce2](https://github.com/webpack/webpack-cli/commit/0080ce297482b83fb1f7dfdc0328e1734aa1713e)) +- config lookup ([762e3b9](https://github.com/webpack/webpack-cli/commit/762e3b9141503521d82a997a9f36f9d4612f0abf)) +- correct jscodeshift import ([0c67103](https://github.com/webpack/webpack-cli/commit/0c67103644ce6f51b0e43a48c80f76883de24b5d)) +- enable colors in ci ([7c9e0df](https://github.com/webpack/webpack-cli/commit/7c9e0df74cb88b4907e513c53218db9478cacc79)) +- extend notify period ([aff8352](https://github.com/webpack/webpack-cli/commit/aff8352eaa2419a356b13e19a2ad1168001cebca)) +- grammar within comment ([d482677](https://github.com/webpack/webpack-cli/commit/d4826774a628f12aeed4deb9382d390e5d800914)) +- ignore failing test case ([c643626](https://github.com/webpack/webpack-cli/commit/c6436261ccaa659ecad1e4f29104d860e4f6219c)) +- ignore failing tests ([444355a](https://github.com/webpack/webpack-cli/commit/444355aa22d0efc9eb0e887560d04a125061e321)) +- improve local configRegister file resolution ([32cc513](https://github.com/webpack/webpack-cli/commit/32cc513eb62abf6dd7e18d8bacf6d0400cc9020e)), closes [#746](https://github.com/webpack/webpack-cli/issues/746) +- make init reolve linked packges ([#1006](https://github.com/webpack/webpack-cli/issues/1006)) ([187045a](https://github.com/webpack/webpack-cli/commit/187045a5cdfa7c32659c73b867587d0a2c1c29e1)) +- minor fix ([0d9aa9a](https://github.com/webpack/webpack-cli/commit/0d9aa9ac7868f0154209eb119b6244df55859af7)) +- **cli:** await external command execution, fix lint ([ce8f284](https://github.com/webpack/webpack-cli/commit/ce8f2840267c627539813f3b06956b9bf89584a3)) +- **cli:** missing package, fixed function call ([4ee4d41](https://github.com/webpack/webpack-cli/commit/4ee4d41afc82f28545bc6e6482f034bc13cdd0d7)) +- **create:** add default sw in create template ([#1153](https://github.com/webpack/webpack-cli/issues/1153)) ([edf65c2](https://github.com/webpack/webpack-cli/commit/edf65c2f0430c1c76d4f7004b338e46f56be35f2)), closes [#1152](https://github.com/webpack/webpack-cli/issues/1152) [#1152](https://github.com/webpack/webpack-cli/issues/1152) [#1152](https://github.com/webpack/webpack-cli/issues/1152) +- **create:** handle create package errors gracefully ([#1159](https://github.com/webpack/webpack-cli/issues/1159)) ([aa6d82b](https://github.com/webpack/webpack-cli/commit/aa6d82b649c9a1f4c54566b80597576d9bb554b4)), closes [#1151](https://github.com/webpack/webpack-cli/issues/1151) [#1151](https://github.com/webpack/webpack-cli/issues/1151) [#1151](https://github.com/webpack/webpack-cli/issues/1151) [#1151](https://github.com/webpack/webpack-cli/issues/1151) +- **deps:** add missing cz-customizable dep to allow committing ([68b1bbe](https://github.com/webpack/webpack-cli/commit/68b1bbe8f93685727ef5973b81dbe73e3fe0c3c7)), closes [#1040](https://github.com/webpack/webpack-cli/issues/1040) +- **info:** minor fix in the info function ([7a5cc51](https://github.com/webpack/webpack-cli/commit/7a5cc511ff78177c71c17e91619320933014f157)) +- **init:** check defaults more precisely ([51831c7](https://github.com/webpack/webpack-cli/commit/51831c79bb701b7a21778ae7c90f7753a270c24d)) +- use includes instead ([76671cb](https://github.com/webpack/webpack-cli/commit/76671cb9b6b9e753c7872a31a836bbd69d9c4ce1)) +- **init:** fixed package template to include name param ([#1203](https://github.com/webpack/webpack-cli/issues/1203)) ([83c0056](https://github.com/webpack/webpack-cli/commit/83c0056999e82496ad24a1e965157491287ad895)) +- minor refactor ([a30a027](https://github.com/webpack/webpack-cli/commit/a30a02716c50b1c52c223c42eabe5dd1cbe29577)) +- minor tweak ([d21d6d3](https://github.com/webpack/webpack-cli/commit/d21d6d338fa7169929363d4fe60b8d7b8b39fcd1)) +- minor typo ([85d1a7c](https://github.com/webpack/webpack-cli/commit/85d1a7c26499400a65b88274b466818899b36da8)) +- plugin val ([b835e71](https://github.com/webpack/webpack-cli/commit/b835e711f5a7d96bf609161ba7b58bdd6acba426)) +- promise configurations ([ae3ec9b](https://github.com/webpack/webpack-cli/commit/ae3ec9bef7da3c06020d3b4cab877ede19f0d631)) +- refactor redundant code ([c7b77a0](https://github.com/webpack/webpack-cli/commit/c7b77a08d3fad0ba93605e69f21b939614c383e5)) +- remove else block ([2b36987](https://github.com/webpack/webpack-cli/commit/2b36987ce2aa030a476a58bb80737e881926528d)) +- remove extra ternary operator ([115709e](https://github.com/webpack/webpack-cli/commit/115709e4107f7c5e0ff0bfaf5183b6df7d87fdac)) +- remove failing test case ([e3e46b6](https://github.com/webpack/webpack-cli/commit/e3e46b6c58f45286a2194105d1fb92deb67d9c53)) +- remove for now the default value of the target ([#1171](https://github.com/webpack/webpack-cli/issues/1171)) ([2d56f79](https://github.com/webpack/webpack-cli/commit/2d56f790cfd6ed076c80afb0a6d613e56169c5c5)) +- Remove redundant await ([6910877](https://github.com/webpack/webpack-cli/commit/691087774f4c453ae597e7b67343b75a41027036)) +- remove unused variable ([b5510d8](https://github.com/webpack/webpack-cli/commit/b5510d882bf60a2249e0022d573b2a2fb2a06dad)) +- rephrase comment ([e11c1c8](https://github.com/webpack/webpack-cli/commit/e11c1c8012cad266a41b5fc810384c9b6fe90065)) +- revert ([b51df6a](https://github.com/webpack/webpack-cli/commit/b51df6aa2e3de60bf8a57e6b223fd64b48501436)) +- revert ([75f56c5](https://github.com/webpack/webpack-cli/commit/75f56c5478a1177fcfcbbf189de4fc101431e055)) +- revert ([f44d8a5](https://github.com/webpack/webpack-cli/commit/f44d8a57b29a77a897eccfb95df71edd9db75b32)) +- spread args to mono-repo ([7499dd3](https://github.com/webpack/webpack-cli/commit/7499dd37f116a4d65bf0983e742943d03c351ee7)) +- tweak ([b5add43](https://github.com/webpack/webpack-cli/commit/b5add43af0a742a925fee6200727f4358eb34749)) +- tweak ([d74efde](https://github.com/webpack/webpack-cli/commit/d74efde1352790bd7e854df61884d51a0c667e3e)) +- typo ([10618de](https://github.com/webpack/webpack-cli/commit/10618de2f2f91698dd5b7a9d12f74865ac4a1ecb)) +- typo fix ([dc3a5e6](https://github.com/webpack/webpack-cli/commit/dc3a5e64fd94a26338f7ba1bc36fc100ddbb4f9d)) +- update badge url ([0b1bbd7](https://github.com/webpack/webpack-cli/commit/0b1bbd7ac277a757fe0c8cde3773f6bda7a51467)) +- update comments ([7553ae7](https://github.com/webpack/webpack-cli/commit/7553ae76b6a2f84cb5cb69f73f1eb3613020775f)) +- Use ES6 object initializer shorthand ([f4cf9b1](https://github.com/webpack/webpack-cli/commit/f4cf9b198d0cf53ce1cb3251e24507be51b34f8b)) +- use webpack-log ([9bfb79c](https://github.com/webpack/webpack-cli/commit/9bfb79c54020ef5e93c2417b2bee2feb7bcce31b)) +- warn on unknown, plugin ([ae725c8](https://github.com/webpack/webpack-cli/commit/ae725c86a5c131470f6aee65cd6e6744264dea80)) +- **serve:** add flag to ext-dep list ([1277cc9](https://github.com/webpack/webpack-cli/commit/1277cc9173d9bfa0afb312097e2a4f611491f4ae)) +- warnings on lint ([b402179](https://github.com/webpack/webpack-cli/commit/b402179759f02310b60a026329d57b7c5b49a97e)) +- warnings on lint ([76db13c](https://github.com/webpack/webpack-cli/commit/76db13c22006dc17819447b34c1be9906b3492fe)) +- **init:** fixes config resolution on generating new configuration ([44fa20c](https://github.com/webpack/webpack-cli/commit/44fa20c5b4f791c44e2e3993f8c613d16dcc1bcd)) +- **progress:** make boolean ([49bc0a4](https://github.com/webpack/webpack-cli/commit/49bc0a47c28cda87abce314bcc828a1e229be7b5)) +- **serve:** add newline at helper end ([25071ce](https://github.com/webpack/webpack-cli/commit/25071ceae3bddcb8e05be8f2064dbbdc174cbe34)) +- **serve:** disable for now ([fcf6e3e](https://github.com/webpack/webpack-cli/commit/fcf6e3e0016422310674c70c371a0ed2bd12b37f)) +- **serve:** fix gitignore, fix lint problems ([18636c3](https://github.com/webpack/webpack-cli/commit/18636c3ef422e1dc2d3cfbe3ca368b1cef560a50)) +- **serve:** handle serve args as an array ([#1174](https://github.com/webpack/webpack-cli/issues/1174)) ([8aa1b7d](https://github.com/webpack/webpack-cli/commit/8aa1b7d5cd69d8ae1bcf98aad7f03618c6609fc7)) +- **serve:** relative imports ([1d9c2bc](https://github.com/webpack/webpack-cli/commit/1d9c2bc626dc97ba7e42b85e5b58f99af24a64ac)) ### Chores -- **actions:** add webpack version ([#1150](https://github.com/webpack/webpack-cli/issues/1150)) ([c1e8fdf](https://github.com/webpack/webpack-cli/commit/c1e8fdf622070ccca34bababe63c081e9e277b8f)) -- **bootstrap:** refactor code ([#1037](https://github.com/webpack/webpack-cli/issues/1037)) ([0bc9081](https://github.com/webpack/webpack-cli/commit/0bc90811644e37863a8b86c674b7ca807636540a)) -- **ci:** remove node 8 from the CI ([#1182](https://github.com/webpack/webpack-cli/issues/1182)) ([dae9982](https://github.com/webpack/webpack-cli/commit/dae998229c70f7775476ad9fb172d380d92896d4)) -- **ci:** update webpack installation ([#1170](https://github.com/webpack/webpack-cli/issues/1170)) ([25a2c6b](https://github.com/webpack/webpack-cli/commit/25a2c6b2488e4e01f2e950b7f7373cb7b25fc8a3)) -- **cli:** better group handling ([#1204](https://github.com/webpack/webpack-cli/issues/1204)) ([5e9639f](https://github.com/webpack/webpack-cli/commit/5e9639fb3349ffaddf5b604912e9775b99043d15)) -- **cli:** fix helper to use includes for dashed flag stripping ([9da9db4](https://github.com/webpack/webpack-cli/commit/9da9db49863fe7db8df6408229201a015da47bb7)) -- **cli:** fix var name to make more sense ([1e10979](https://github.com/webpack/webpack-cli/commit/1e10979a1ff18d7f177184df2b6780dbf166866c)) -- **cli:** it restores inquirer for prompting external commands ([#1201](https://github.com/webpack/webpack-cli/issues/1201)) ([70c04ea](https://github.com/webpack/webpack-cli/commit/70c04eac1bb6f8918b135117c30b554131642db6)) -- **cli:** show help when invalid flag is supplied ([#1051](https://github.com/webpack/webpack-cli/issues/1051)) ([6663e94](https://github.com/webpack/webpack-cli/commit/6663e94c20d69a9e8555bec015cab59311eddaac)), closes [#1046](https://github.com/webpack/webpack-cli/issues/1046) [#1046](https://github.com/webpack/webpack-cli/issues/1046) -- **cli:** updated package lock ([f6381d1](https://github.com/webpack/webpack-cli/commit/f6381d19f5df4b321290bd67bf6f5a6ba1c13f90)) -- **compiler:** refactor emoji rendering in compiler ([012382c](https://github.com/webpack/webpack-cli/commit/012382c7521b30150c3ce7e32b9fbf1c1a6fb964)) -- **deps:** bump eslint-utils from 1.4.0 to 1.4.2 ([#1068](https://github.com/webpack/webpack-cli/issues/1068)) ([1f73911](https://github.com/webpack/webpack-cli/commit/1f73911593c2387a870fdb9264bcb58a10d006e6)) -- **deps:** bump handlebars from 4.1.2 to 4.7.2 in /packages/migrate ([#1180](https://github.com/webpack/webpack-cli/issues/1180)) ([5f37086](https://github.com/webpack/webpack-cli/commit/5f370868ccf1b07735b4ad0e731388fffc4e1048)) -- **deps:** bump handlebars from 4.1.2 to 4.7.2 in /packages/utils ([#1181](https://github.com/webpack/webpack-cli/issues/1181)) ([f2972e5](https://github.com/webpack/webpack-cli/commit/f2972e5dcb0fc1f7753b48c5075a3588a7d5bcb9)) -- **deps:** bump lodash from 4.17.11 to 4.17.15 in /packages/init ([95146fe](https://github.com/webpack/webpack-cli/commit/95146fe8c15fecdd15cb29aeec5b1e30417cc6d6)) -- **deps:** bump lodash from 4.17.11 to 4.17.15 in /packages/serve ([d1ad9f3](https://github.com/webpack/webpack-cli/commit/d1ad9f371e2a400c0d1bf562ad73d136dc070251)) -- **deps:** bump lodash from 4.17.11 to 4.17.15 in /packages/serve ([b3d7013](https://github.com/webpack/webpack-cli/commit/b3d7013805bfeb7679596748afc317a6376dd99b)) -- **deps:** bump lodash from 4.17.11 to 4.17.15 in /packages/utils ([7fe5fd4](https://github.com/webpack/webpack-cli/commit/7fe5fd486843928e5607658c4f5293180500059f)) -- **deps:** bump lodash in /packages/generate-loader ([87f9e9b](https://github.com/webpack/webpack-cli/commit/87f9e9b8da834e5cf6dfd79c97b7947556db7a29)) -- **deps:** bump lodash in /packages/generate-plugin ([a8ecb31](https://github.com/webpack/webpack-cli/commit/a8ecb31387a3d090dc455cafc002d6907fd37301)) -- **deps:** bump lodash in /packages/webpack-scaffold ([29de664](https://github.com/webpack/webpack-cli/commit/29de664f105d46736f06dbab534f7f559545b632)) -- **deps:** update deps and remove old type ([5af7e7a](https://github.com/webpack/webpack-cli/commit/5af7e7a17105adf455b3b8907910976cf3deb5f8)) -- **deps:** update sec vuln patches ([d2c6228](https://github.com/webpack/webpack-cli/commit/d2c62285add3e96894e94472b169f01557b2ef35)) -- **grammer:** changes depracated to removed ([732a80a](https://github.com/webpack/webpack-cli/commit/732a80ab2f6d47fbdf18a50f9880e6681c737a54)) -- **help:** refactor help for more cleaner code ([94a1ce0](https://github.com/webpack/webpack-cli/commit/94a1ce06ddd150a4ebf6ae54dfb8b4e8767e935d)) -- **info:** changes base ([a58c286](https://github.com/webpack/webpack-cli/commit/a58c286ba869811b63ebb604e1a9e796a2b06f22)) -- **init:** upgrade yeoman in generators/utils, slight generator error handling changes ([#1205](https://github.com/webpack/webpack-cli/issues/1205)) ([0255657](https://github.com/webpack/webpack-cli/commit/0255657cfe67fffb8583601fd2d4a334ab9a89da)) -- **lib:** refactored lib utils and groups ([#1140](https://github.com/webpack/webpack-cli/issues/1140)) ([237887b](https://github.com/webpack/webpack-cli/commit/237887b4847bcfad2239dbea70b6e08f276db3a4)) -- **lint:** auto linting ([8668783](https://github.com/webpack/webpack-cli/commit/8668783f259465131da0a6e7b2461c4dc0b75bd0)) -- **linting:** renable linting ([1e596d3](https://github.com/webpack/webpack-cli/commit/1e596d320b54d031e6b8373ab2233e600f094428)) -- **readme:** change of language ([41ee8ca](https://github.com/webpack/webpack-cli/commit/41ee8ca2d873f1ff8eb9a7aa804e90dbe4812171)) -- **ref:** fix code ([d213809](https://github.com/webpack/webpack-cli/commit/d2138096b2c2b0d7a2daa9f6b36af8404dd2840a)) -- **refactor:** rm logs ([e7a64d6](https://github.com/webpack/webpack-cli/commit/e7a64d68258bd08f623e67303f9aeebbe8d79c3c)) -- **register:** remove register in favor for logging ([da29064](https://github.com/webpack/webpack-cli/commit/da29064084d931a2baea890de4b198cbb1674ea2)) -- **serve:** allow js in serve package ([7e38b31](https://github.com/webpack/webpack-cli/commit/7e38b318576922cc5874297f771b369754e3f7b2)) -- **serve:** made dev server optional peer dep ([f580b8f](https://github.com/webpack/webpack-cli/commit/f580b8f06631a52e4a7bd3e990692484d38a1188)) -- **serve:** make dev server peer dep again ([6237d6c](https://github.com/webpack/webpack-cli/commit/6237d6cb3dffc3037eb055f50c22948da217c8ec)) -- **serve:** move dev server back to normal dependencies ([c2bf27d](https://github.com/webpack/webpack-cli/commit/c2bf27dc5430c455685ded6f2b3a977ab9c5eb22)) -- **serve:** refactor code to be more concise ([d2e3e80](https://github.com/webpack/webpack-cli/commit/d2e3e808ab63e2030acc0b76baafe68a4df66524)) -- **serve:** remove allowjs from tsconfig ([3c92b0a](https://github.com/webpack/webpack-cli/commit/3c92b0abad54b92bee947fa630f9a90c393ae4f5)) -- **serve:** remove dev server as an optional peer dep in favor of normal dep ([305a1dd](https://github.com/webpack/webpack-cli/commit/305a1dd7d3230a4106af3848cc53c47e251106f9)) -- **serve:** remove promise return from serve package ([#1091](https://github.com/webpack/webpack-cli/issues/1091)) ([2144a1b](https://github.com/webpack/webpack-cli/commit/2144a1b9aff842589617f4a968c0084d1a4c3ed1)) -- **serve:** update package lock ([1ddcf4a](https://github.com/webpack/webpack-cli/commit/1ddcf4a80765799df74ad26abdfdacd6150025aa)) -- **serve:** updated dev server and fixed newline problem ([b29ec8f](https://github.com/webpack/webpack-cli/commit/b29ec8f7c2b43419563a382c9414b1e314f17041)) -- **serve:** use cli flags from dev server package ([9b385f9](https://github.com/webpack/webpack-cli/commit/9b385f993e64d3c78f42ef38456b578ec7c94be4)) -- **utils:** fixes typo in scaffold ([bd5c1ce](https://github.com/webpack/webpack-cli/commit/bd5c1ce08a998f55e305876fc4ecabd90acf4bf8)) -- changed the split seperator ([078a1e4](https://github.com/webpack/webpack-cli/commit/078a1e4bbe8a6515ab8239859110d8a4967a1154)) -- add deps ([b19b233](https://github.com/webpack/webpack-cli/commit/b19b233e30b21c65499c4e79a6df87403c5dccd3)) -- add deps ([5b6cd4b](https://github.com/webpack/webpack-cli/commit/5b6cd4b17119dcfbae4a4bd8d314e35fcbb2e3af)) -- add flags for commands ([f1eb2b7](https://github.com/webpack/webpack-cli/commit/f1eb2b78524ebf81e296710f62472d161c0b301c)) -- add footer for consistency ([d22734c](https://github.com/webpack/webpack-cli/commit/d22734c7578cc847b5b6c3fd122d1c76d3f773db)) -- add links to cli flags info ([#1178](https://github.com/webpack/webpack-cli/issues/1178)) ([dcec3ae](https://github.com/webpack/webpack-cli/commit/dcec3ae4b0115c5f80e1612213ee200c426fea0f)) -- add more detailed test ([e02eac4](https://github.com/webpack/webpack-cli/commit/e02eac4f6a1ec2f7d9b0736dccbf860c996b577f)) -- add strict checks ([3edee26](https://github.com/webpack/webpack-cli/commit/3edee260fdc95ae1140e467811f7623fb8d9d38e)) -- add v3 as a tmp dep for dev-server ([425c590](https://github.com/webpack/webpack-cli/commit/425c590dc040835ab3f79be98824e5fefe09073a)) -- Added test case for providing unknown flags along with -… ([#1197](https://github.com/webpack/webpack-cli/issues/1197)) ([f25c557](https://github.com/webpack/webpack-cli/commit/f25c5570fa6057ecaad33a9580ff391f7af9491a)) -- added test for --json simple usecases ([aa5197b](https://github.com/webpack/webpack-cli/commit/aa5197b1ee1d12608f7aadb5e18f20961ae1a26b)) -- added tests with different config type ([3a84813](https://github.com/webpack/webpack-cli/commit/3a84813e68f51aae95b12141596b2ab58afeb1a4)) -- better output ([#1196](https://github.com/webpack/webpack-cli/issues/1196)) ([d72f9f8](https://github.com/webpack/webpack-cli/commit/d72f9f8d412fa0efbc3d5e9e556b40733afc767b)) -- bump webpack v ([e1a3410](https://github.com/webpack/webpack-cli/commit/e1a341033591d51ac9d9fcf2daf20efa3982aaae)) -- change arg in testutil ([11447ee](https://github.com/webpack/webpack-cli/commit/11447eeaf6ba3cf43d00c2552dd481f0a1fa5f5e)) -- change arg in testutil ([0005910](https://github.com/webpack/webpack-cli/commit/0005910975289c0fa6029d8dce9647aa048d7bcc)) -- changed the .bin to bin in entry test ([a4f735a](https://github.com/webpack/webpack-cli/commit/a4f735a903f2e0e5f571c26add47ba607b334f5e)) -- changed the outDir to entry test ([016db0c](https://github.com/webpack/webpack-cli/commit/016db0c411641a195281696ae0238fce03a1fcbc)) -- check for existing arr ([b46efe6](https://github.com/webpack/webpack-cli/commit/b46efe609ce7f3754b5c4efd7c866a2a29aad5e2)) -- expression ([bd6b787](https://github.com/webpack/webpack-cli/commit/bd6b787c502bd02b9a8e0ec274a961205add0262)) -- expression func ([ccbb7f2](https://github.com/webpack/webpack-cli/commit/ccbb7f2ea514c9e3e22c5ccdd95807aae60d63b6)) -- expression func ([ce968e4](https://github.com/webpack/webpack-cli/commit/ce968e40555495977fe4085cc525c2220a3dd434)) -- expression func ([721914b](https://github.com/webpack/webpack-cli/commit/721914ba1b4b8a3482ef67ccf2830a109c09b448)) -- fix sec issues ([6f8dd13](https://github.com/webpack/webpack-cli/commit/6f8dd1389083b64536479fbaad67fd22474005b1)) -- include comments ([941da90](https://github.com/webpack/webpack-cli/commit/941da90ebfcb6aa5ba07430465bf2d53a2c54c4f)) -- make src more readable ([2d10684](https://github.com/webpack/webpack-cli/commit/2d10684fff0d0971019d3e3dd4d2200bd1a400dc)) -- Minor code refactor adhering to ES6 semantics ([#1122](https://github.com/webpack/webpack-cli/issues/1122)) ([aed9b9e](https://github.com/webpack/webpack-cli/commit/aed9b9ebcc156d2ebf0eb4e91baea6fb1af5d916)) -- minor code refactoring ([#1105](https://github.com/webpack/webpack-cli/issues/1105)) ([a43940d](https://github.com/webpack/webpack-cli/commit/a43940d29977b64d9d7c662e5d5b94a00534513a)) -- minor code refactors ([517e756](https://github.com/webpack/webpack-cli/commit/517e756d6e5419de1cc80952fcbf20f5ca9a0ccb)) -- Minor typographical fixes ([#1183](https://github.com/webpack/webpack-cli/issues/1183)) ([a0ac134](https://github.com/webpack/webpack-cli/commit/a0ac134ff0d0a17c10387da99f5e96443e48bb15)) -- monorepo version update ([8097c5c](https://github.com/webpack/webpack-cli/commit/8097c5cf0fb6d2fa533168b4d97fbb373fa806ce)) -- move away from var ([ed3e868](https://github.com/webpack/webpack-cli/commit/ed3e868bac193b7616b17ee5c3bd1722f64b7772)) -- moved logger inside a module instead of having it inside the process ([#1179](https://github.com/webpack/webpack-cli/issues/1179)) ([e7cc639](https://github.com/webpack/webpack-cli/commit/e7cc63952a814de5b2b3690e31e4d2df3aa91f4b)) -- only output message on error ([90868f2](https://github.com/webpack/webpack-cli/commit/90868f2c83e000ac42f93162e4b3ea2485e9da9a)) -- pre-release ([4ca0de0](https://github.com/webpack/webpack-cli/commit/4ca0de0abd15a2b08297101a80ba49c2096178ce)) -- pre-release ([f64e37c](https://github.com/webpack/webpack-cli/commit/f64e37c9d96218291bb2273455f3cddb6a3a5013)) -- prevent weird behaviour of pre-commit hook ([#973](https://github.com/webpack/webpack-cli/issues/973)) ([ba471f8](https://github.com/webpack/webpack-cli/commit/ba471f87ba4ecc51fb532e864e5e21b88f22c5c9)) -- readd deps and fix linting ([82407e5](https://github.com/webpack/webpack-cli/commit/82407e5e1fee2ce7e8dd4cfa9596b99ed0cde4fc)) -- rebase ([652caf8](https://github.com/webpack/webpack-cli/commit/652caf8f86b4f95c4d5710afaf3d3aa2f0baec35)) -- rebase ([38524ec](https://github.com/webpack/webpack-cli/commit/38524ec7930b58ba1b03cded85f2e7200a84f44b)) -- rebase ([79137d0](https://github.com/webpack/webpack-cli/commit/79137d0800a161cb810236f384be48b5365e1a77)) -- rebase ([2cd4e65](https://github.com/webpack/webpack-cli/commit/2cd4e654efec6d85e8bf65330231ae9503217b89)) -- rebase ([8141e0e](https://github.com/webpack/webpack-cli/commit/8141e0e7b429ebd09b1c6e8bc61a4f065cf72dc3)) -- rebase ([b5fcf78](https://github.com/webpack/webpack-cli/commit/b5fcf784829eded844c30be196eb434dd16e8f5e)) -- rebase against next branch ([3812ea1](https://github.com/webpack/webpack-cli/commit/3812ea142a3116d577878ac98691c5fb904e5d7a)) -- refactor webpack-cli ([8a8bc72](https://github.com/webpack/webpack-cli/commit/8a8bc72c392602284bd99e01f8ac1fa63d514594)) -- remove debug flag ([d79cc45](https://github.com/webpack/webpack-cli/commit/d79cc45ccf542e2ae086ba83149d9d7be67de7ec)) -- remove disable line ([88df722](https://github.com/webpack/webpack-cli/commit/88df722cf53e6af77375683c6527af5142f2ec64)) -- remove old tests ([b131230](https://github.com/webpack/webpack-cli/commit/b1312304f3f9de9d7534c5968626be9255a77eec)) -- Remove redundant multiple property ([ecf4a38](https://github.com/webpack/webpack-cli/commit/ecf4a380509a8165dc5e38f4eef24b99368cb7bb)) -- removed the single depth folder search in gitignore ([3a3fb81](https://github.com/webpack/webpack-cli/commit/3a3fb8107feb8f8e6b0067e2f73f6c79867c3061)) -- removed the snapshot testing, added custom checks ([6e40a1b](https://github.com/webpack/webpack-cli/commit/6e40a1bdcabdfac9f981532789523db2f2f4d564)) -- rename flags to options ([ff532f4](https://github.com/webpack/webpack-cli/commit/ff532f4a3822f25d8be8763cd54d2d42c8094a39)) -- sec patch ([2f818ef](https://github.com/webpack/webpack-cli/commit/2f818ef6ec088df7af63b2cb7cfca1671bcd61b9)) -- sec patches ([020b1bf](https://github.com/webpack/webpack-cli/commit/020b1bf32df5c674e6e4cdb80ff64a3dbe19e05d)) -- set fallback devtool ([080c44c](https://github.com/webpack/webpack-cli/commit/080c44c241cf6e796388369edf11e1607efab0df)) -- update commands ([bf32074](https://github.com/webpack/webpack-cli/commit/bf32074472ecb0d4baf0fa16cc557f618cc83879)) -- update console logs to webpack-logs ([dc4c89c](https://github.com/webpack/webpack-cli/commit/dc4c89cfc63e4e9eb8011ab7c27f98ba58c3185c)) -- update dependences ([0f8a7f7](https://github.com/webpack/webpack-cli/commit/0f8a7f766789e13dd759bb9386d73bd39ae5be60)) -- update dependences ([915c9f3](https://github.com/webpack/webpack-cli/commit/915c9f39be93eb46aca441e5f32d7dc23818080e)), closes [#1148](https://github.com/webpack/webpack-cli/issues/1148) -- update deps ([02d653f](https://github.com/webpack/webpack-cli/commit/02d653faba89a3114c715362547864f6b9eb291f)) -- update deps ([8b75e1c](https://github.com/webpack/webpack-cli/commit/8b75e1c7565bc3b121a45a0f7078b5e0774d5cdf)) -- update lockfiles ([f8ed0c6](https://github.com/webpack/webpack-cli/commit/f8ed0c62cc32d76af7fe0f32d8ebb01639c7e30c)) -- **utils:** move jest to dev-deps (closes [#1190](https://github.com/webpack/webpack-cli/issues/1190)) ([#1194](https://github.com/webpack/webpack-cli/issues/1194)) ([fb6e3fe](https://github.com/webpack/webpack-cli/commit/fb6e3fe941094e8f0ee65f5ab71567729d659643)) -- Update lib/bootstrap.js ([fa658b8](https://github.com/webpack/webpack-cli/commit/fa658b8214baa3fa11579dd6218de56437db0650)) -- update lockfiles ([44df902](https://github.com/webpack/webpack-cli/commit/44df902637a0ef2ae226c53d449774ac1b236737)) -- update lockfiles ([6b5ed74](https://github.com/webpack/webpack-cli/commit/6b5ed748bf28885814dd0709a29785bf17abd519)) -- update terser-webpack-plugin to the latest version ([#1172](https://github.com/webpack/webpack-cli/issues/1172)) ([9222016](https://github.com/webpack/webpack-cli/commit/9222016ba3872b255893efe7aec2f5dd6f9de7e0)) -- update test statements ([48f1cb5](https://github.com/webpack/webpack-cli/commit/48f1cb5f02b46d3289d643423c190428f98379ab)) -- update to webpack v5 ([e59bcd7](https://github.com/webpack/webpack-cli/commit/e59bcd7739cc2a8d41c795788c9738e2453dbea7)) -- update variable to be understandable ([9792c81](https://github.com/webpack/webpack-cli/commit/9792c8183cf8d7628d3e18b09101390a558079ca)) -- use filter instead ([c71a9f0](https://github.com/webpack/webpack-cli/commit/c71a9f05eca87afb3a9a792a6aa4fc04b5ea60f1)) -- use Object.keys in commands ([51af1e1](https://github.com/webpack/webpack-cli/commit/51af1e1453de30bc1a897f9e5a29c4877d2f4ed5)) -- use webpack next ([2030f69](https://github.com/webpack/webpack-cli/commit/2030f69cf1221af060988ec1ec899a20f5f30ff3)) -- wip ([641064a](https://github.com/webpack/webpack-cli/commit/641064a4bb40b9c845e921f538e0d886b2c32509)) +- **actions:** add webpack version ([#1150](https://github.com/webpack/webpack-cli/issues/1150)) ([c1e8fdf](https://github.com/webpack/webpack-cli/commit/c1e8fdf622070ccca34bababe63c081e9e277b8f)) +- **bootstrap:** refactor code ([#1037](https://github.com/webpack/webpack-cli/issues/1037)) ([0bc9081](https://github.com/webpack/webpack-cli/commit/0bc90811644e37863a8b86c674b7ca807636540a)) +- **ci:** remove node 8 from the CI ([#1182](https://github.com/webpack/webpack-cli/issues/1182)) ([dae9982](https://github.com/webpack/webpack-cli/commit/dae998229c70f7775476ad9fb172d380d92896d4)) +- **ci:** update webpack installation ([#1170](https://github.com/webpack/webpack-cli/issues/1170)) ([25a2c6b](https://github.com/webpack/webpack-cli/commit/25a2c6b2488e4e01f2e950b7f7373cb7b25fc8a3)) +- **cli:** better group handling ([#1204](https://github.com/webpack/webpack-cli/issues/1204)) ([5e9639f](https://github.com/webpack/webpack-cli/commit/5e9639fb3349ffaddf5b604912e9775b99043d15)) +- **cli:** fix helper to use includes for dashed flag stripping ([9da9db4](https://github.com/webpack/webpack-cli/commit/9da9db49863fe7db8df6408229201a015da47bb7)) +- **cli:** fix var name to make more sense ([1e10979](https://github.com/webpack/webpack-cli/commit/1e10979a1ff18d7f177184df2b6780dbf166866c)) +- **cli:** it restores inquirer for prompting external commands ([#1201](https://github.com/webpack/webpack-cli/issues/1201)) ([70c04ea](https://github.com/webpack/webpack-cli/commit/70c04eac1bb6f8918b135117c30b554131642db6)) +- **cli:** show help when invalid flag is supplied ([#1051](https://github.com/webpack/webpack-cli/issues/1051)) ([6663e94](https://github.com/webpack/webpack-cli/commit/6663e94c20d69a9e8555bec015cab59311eddaac)), closes [#1046](https://github.com/webpack/webpack-cli/issues/1046) [#1046](https://github.com/webpack/webpack-cli/issues/1046) +- **cli:** updated package lock ([f6381d1](https://github.com/webpack/webpack-cli/commit/f6381d19f5df4b321290bd67bf6f5a6ba1c13f90)) +- **compiler:** refactor emoji rendering in compiler ([012382c](https://github.com/webpack/webpack-cli/commit/012382c7521b30150c3ce7e32b9fbf1c1a6fb964)) +- **deps:** bump eslint-utils from 1.4.0 to 1.4.2 ([#1068](https://github.com/webpack/webpack-cli/issues/1068)) ([1f73911](https://github.com/webpack/webpack-cli/commit/1f73911593c2387a870fdb9264bcb58a10d006e6)) +- **deps:** bump handlebars from 4.1.2 to 4.7.2 in /packages/migrate ([#1180](https://github.com/webpack/webpack-cli/issues/1180)) ([5f37086](https://github.com/webpack/webpack-cli/commit/5f370868ccf1b07735b4ad0e731388fffc4e1048)) +- **deps:** bump handlebars from 4.1.2 to 4.7.2 in /packages/utils ([#1181](https://github.com/webpack/webpack-cli/issues/1181)) ([f2972e5](https://github.com/webpack/webpack-cli/commit/f2972e5dcb0fc1f7753b48c5075a3588a7d5bcb9)) +- **deps:** bump lodash from 4.17.11 to 4.17.15 in /packages/init ([95146fe](https://github.com/webpack/webpack-cli/commit/95146fe8c15fecdd15cb29aeec5b1e30417cc6d6)) +- **deps:** bump lodash from 4.17.11 to 4.17.15 in /packages/serve ([d1ad9f3](https://github.com/webpack/webpack-cli/commit/d1ad9f371e2a400c0d1bf562ad73d136dc070251)) +- **deps:** bump lodash from 4.17.11 to 4.17.15 in /packages/serve ([b3d7013](https://github.com/webpack/webpack-cli/commit/b3d7013805bfeb7679596748afc317a6376dd99b)) +- **deps:** bump lodash from 4.17.11 to 4.17.15 in /packages/utils ([7fe5fd4](https://github.com/webpack/webpack-cli/commit/7fe5fd486843928e5607658c4f5293180500059f)) +- **deps:** bump lodash in /packages/generate-loader ([87f9e9b](https://github.com/webpack/webpack-cli/commit/87f9e9b8da834e5cf6dfd79c97b7947556db7a29)) +- **deps:** bump lodash in /packages/generate-plugin ([a8ecb31](https://github.com/webpack/webpack-cli/commit/a8ecb31387a3d090dc455cafc002d6907fd37301)) +- **deps:** bump lodash in /packages/webpack-scaffold ([29de664](https://github.com/webpack/webpack-cli/commit/29de664f105d46736f06dbab534f7f559545b632)) +- **deps:** update deps and remove old type ([5af7e7a](https://github.com/webpack/webpack-cli/commit/5af7e7a17105adf455b3b8907910976cf3deb5f8)) +- **deps:** update sec vuln patches ([d2c6228](https://github.com/webpack/webpack-cli/commit/d2c62285add3e96894e94472b169f01557b2ef35)) +- **grammer:** changes depracated to removed ([732a80a](https://github.com/webpack/webpack-cli/commit/732a80ab2f6d47fbdf18a50f9880e6681c737a54)) +- **help:** refactor help for more cleaner code ([94a1ce0](https://github.com/webpack/webpack-cli/commit/94a1ce06ddd150a4ebf6ae54dfb8b4e8767e935d)) +- **info:** changes base ([a58c286](https://github.com/webpack/webpack-cli/commit/a58c286ba869811b63ebb604e1a9e796a2b06f22)) +- **init:** upgrade yeoman in generators/utils, slight generator error handling changes ([#1205](https://github.com/webpack/webpack-cli/issues/1205)) ([0255657](https://github.com/webpack/webpack-cli/commit/0255657cfe67fffb8583601fd2d4a334ab9a89da)) +- **lib:** refactored lib utils and groups ([#1140](https://github.com/webpack/webpack-cli/issues/1140)) ([237887b](https://github.com/webpack/webpack-cli/commit/237887b4847bcfad2239dbea70b6e08f276db3a4)) +- **lint:** auto linting ([8668783](https://github.com/webpack/webpack-cli/commit/8668783f259465131da0a6e7b2461c4dc0b75bd0)) +- **linting:** renable linting ([1e596d3](https://github.com/webpack/webpack-cli/commit/1e596d320b54d031e6b8373ab2233e600f094428)) +- **readme:** change of language ([41ee8ca](https://github.com/webpack/webpack-cli/commit/41ee8ca2d873f1ff8eb9a7aa804e90dbe4812171)) +- **ref:** fix code ([d213809](https://github.com/webpack/webpack-cli/commit/d2138096b2c2b0d7a2daa9f6b36af8404dd2840a)) +- **refactor:** rm logs ([e7a64d6](https://github.com/webpack/webpack-cli/commit/e7a64d68258bd08f623e67303f9aeebbe8d79c3c)) +- **register:** remove register in favor for logging ([da29064](https://github.com/webpack/webpack-cli/commit/da29064084d931a2baea890de4b198cbb1674ea2)) +- **serve:** allow js in serve package ([7e38b31](https://github.com/webpack/webpack-cli/commit/7e38b318576922cc5874297f771b369754e3f7b2)) +- **serve:** made dev server optional peer dep ([f580b8f](https://github.com/webpack/webpack-cli/commit/f580b8f06631a52e4a7bd3e990692484d38a1188)) +- **serve:** make dev server peer dep again ([6237d6c](https://github.com/webpack/webpack-cli/commit/6237d6cb3dffc3037eb055f50c22948da217c8ec)) +- **serve:** move dev server back to normal dependencies ([c2bf27d](https://github.com/webpack/webpack-cli/commit/c2bf27dc5430c455685ded6f2b3a977ab9c5eb22)) +- **serve:** refactor code to be more concise ([d2e3e80](https://github.com/webpack/webpack-cli/commit/d2e3e808ab63e2030acc0b76baafe68a4df66524)) +- **serve:** remove allowjs from tsconfig ([3c92b0a](https://github.com/webpack/webpack-cli/commit/3c92b0abad54b92bee947fa630f9a90c393ae4f5)) +- **serve:** remove dev server as an optional peer dep in favor of normal dep ([305a1dd](https://github.com/webpack/webpack-cli/commit/305a1dd7d3230a4106af3848cc53c47e251106f9)) +- **serve:** remove promise return from serve package ([#1091](https://github.com/webpack/webpack-cli/issues/1091)) ([2144a1b](https://github.com/webpack/webpack-cli/commit/2144a1b9aff842589617f4a968c0084d1a4c3ed1)) +- **serve:** update package lock ([1ddcf4a](https://github.com/webpack/webpack-cli/commit/1ddcf4a80765799df74ad26abdfdacd6150025aa)) +- **serve:** updated dev server and fixed newline problem ([b29ec8f](https://github.com/webpack/webpack-cli/commit/b29ec8f7c2b43419563a382c9414b1e314f17041)) +- **serve:** use cli flags from dev server package ([9b385f9](https://github.com/webpack/webpack-cli/commit/9b385f993e64d3c78f42ef38456b578ec7c94be4)) +- **utils:** fixes typo in scaffold ([bd5c1ce](https://github.com/webpack/webpack-cli/commit/bd5c1ce08a998f55e305876fc4ecabd90acf4bf8)) +- changed the split seperator ([078a1e4](https://github.com/webpack/webpack-cli/commit/078a1e4bbe8a6515ab8239859110d8a4967a1154)) +- add deps ([b19b233](https://github.com/webpack/webpack-cli/commit/b19b233e30b21c65499c4e79a6df87403c5dccd3)) +- add deps ([5b6cd4b](https://github.com/webpack/webpack-cli/commit/5b6cd4b17119dcfbae4a4bd8d314e35fcbb2e3af)) +- add flags for commands ([f1eb2b7](https://github.com/webpack/webpack-cli/commit/f1eb2b78524ebf81e296710f62472d161c0b301c)) +- add footer for consistency ([d22734c](https://github.com/webpack/webpack-cli/commit/d22734c7578cc847b5b6c3fd122d1c76d3f773db)) +- add links to cli flags info ([#1178](https://github.com/webpack/webpack-cli/issues/1178)) ([dcec3ae](https://github.com/webpack/webpack-cli/commit/dcec3ae4b0115c5f80e1612213ee200c426fea0f)) +- add more detailed test ([e02eac4](https://github.com/webpack/webpack-cli/commit/e02eac4f6a1ec2f7d9b0736dccbf860c996b577f)) +- add strict checks ([3edee26](https://github.com/webpack/webpack-cli/commit/3edee260fdc95ae1140e467811f7623fb8d9d38e)) +- add v3 as a tmp dep for dev-server ([425c590](https://github.com/webpack/webpack-cli/commit/425c590dc040835ab3f79be98824e5fefe09073a)) +- Added test case for providing unknown flags along with -… ([#1197](https://github.com/webpack/webpack-cli/issues/1197)) ([f25c557](https://github.com/webpack/webpack-cli/commit/f25c5570fa6057ecaad33a9580ff391f7af9491a)) +- added test for --json simple usecases ([aa5197b](https://github.com/webpack/webpack-cli/commit/aa5197b1ee1d12608f7aadb5e18f20961ae1a26b)) +- added tests with different config type ([3a84813](https://github.com/webpack/webpack-cli/commit/3a84813e68f51aae95b12141596b2ab58afeb1a4)) +- better output ([#1196](https://github.com/webpack/webpack-cli/issues/1196)) ([d72f9f8](https://github.com/webpack/webpack-cli/commit/d72f9f8d412fa0efbc3d5e9e556b40733afc767b)) +- bump webpack v ([e1a3410](https://github.com/webpack/webpack-cli/commit/e1a341033591d51ac9d9fcf2daf20efa3982aaae)) +- change arg in testutil ([11447ee](https://github.com/webpack/webpack-cli/commit/11447eeaf6ba3cf43d00c2552dd481f0a1fa5f5e)) +- change arg in testutil ([0005910](https://github.com/webpack/webpack-cli/commit/0005910975289c0fa6029d8dce9647aa048d7bcc)) +- changed the .bin to bin in entry test ([a4f735a](https://github.com/webpack/webpack-cli/commit/a4f735a903f2e0e5f571c26add47ba607b334f5e)) +- changed the outDir to entry test ([016db0c](https://github.com/webpack/webpack-cli/commit/016db0c411641a195281696ae0238fce03a1fcbc)) +- check for existing arr ([b46efe6](https://github.com/webpack/webpack-cli/commit/b46efe609ce7f3754b5c4efd7c866a2a29aad5e2)) +- expression ([bd6b787](https://github.com/webpack/webpack-cli/commit/bd6b787c502bd02b9a8e0ec274a961205add0262)) +- expression func ([ccbb7f2](https://github.com/webpack/webpack-cli/commit/ccbb7f2ea514c9e3e22c5ccdd95807aae60d63b6)) +- expression func ([ce968e4](https://github.com/webpack/webpack-cli/commit/ce968e40555495977fe4085cc525c2220a3dd434)) +- expression func ([721914b](https://github.com/webpack/webpack-cli/commit/721914ba1b4b8a3482ef67ccf2830a109c09b448)) +- fix sec issues ([6f8dd13](https://github.com/webpack/webpack-cli/commit/6f8dd1389083b64536479fbaad67fd22474005b1)) +- include comments ([941da90](https://github.com/webpack/webpack-cli/commit/941da90ebfcb6aa5ba07430465bf2d53a2c54c4f)) +- make src more readable ([2d10684](https://github.com/webpack/webpack-cli/commit/2d10684fff0d0971019d3e3dd4d2200bd1a400dc)) +- Minor code refactor adhering to ES6 semantics ([#1122](https://github.com/webpack/webpack-cli/issues/1122)) ([aed9b9e](https://github.com/webpack/webpack-cli/commit/aed9b9ebcc156d2ebf0eb4e91baea6fb1af5d916)) +- minor code refactoring ([#1105](https://github.com/webpack/webpack-cli/issues/1105)) ([a43940d](https://github.com/webpack/webpack-cli/commit/a43940d29977b64d9d7c662e5d5b94a00534513a)) +- minor code refactors ([517e756](https://github.com/webpack/webpack-cli/commit/517e756d6e5419de1cc80952fcbf20f5ca9a0ccb)) +- Minor typographical fixes ([#1183](https://github.com/webpack/webpack-cli/issues/1183)) ([a0ac134](https://github.com/webpack/webpack-cli/commit/a0ac134ff0d0a17c10387da99f5e96443e48bb15)) +- monorepo version update ([8097c5c](https://github.com/webpack/webpack-cli/commit/8097c5cf0fb6d2fa533168b4d97fbb373fa806ce)) +- move away from var ([ed3e868](https://github.com/webpack/webpack-cli/commit/ed3e868bac193b7616b17ee5c3bd1722f64b7772)) +- moved logger inside a module instead of having it inside the process ([#1179](https://github.com/webpack/webpack-cli/issues/1179)) ([e7cc639](https://github.com/webpack/webpack-cli/commit/e7cc63952a814de5b2b3690e31e4d2df3aa91f4b)) +- only output message on error ([90868f2](https://github.com/webpack/webpack-cli/commit/90868f2c83e000ac42f93162e4b3ea2485e9da9a)) +- pre-release ([4ca0de0](https://github.com/webpack/webpack-cli/commit/4ca0de0abd15a2b08297101a80ba49c2096178ce)) +- pre-release ([f64e37c](https://github.com/webpack/webpack-cli/commit/f64e37c9d96218291bb2273455f3cddb6a3a5013)) +- prevent weird behaviour of pre-commit hook ([#973](https://github.com/webpack/webpack-cli/issues/973)) ([ba471f8](https://github.com/webpack/webpack-cli/commit/ba471f87ba4ecc51fb532e864e5e21b88f22c5c9)) +- readd deps and fix linting ([82407e5](https://github.com/webpack/webpack-cli/commit/82407e5e1fee2ce7e8dd4cfa9596b99ed0cde4fc)) +- rebase ([652caf8](https://github.com/webpack/webpack-cli/commit/652caf8f86b4f95c4d5710afaf3d3aa2f0baec35)) +- rebase ([38524ec](https://github.com/webpack/webpack-cli/commit/38524ec7930b58ba1b03cded85f2e7200a84f44b)) +- rebase ([79137d0](https://github.com/webpack/webpack-cli/commit/79137d0800a161cb810236f384be48b5365e1a77)) +- rebase ([2cd4e65](https://github.com/webpack/webpack-cli/commit/2cd4e654efec6d85e8bf65330231ae9503217b89)) +- rebase ([8141e0e](https://github.com/webpack/webpack-cli/commit/8141e0e7b429ebd09b1c6e8bc61a4f065cf72dc3)) +- rebase ([b5fcf78](https://github.com/webpack/webpack-cli/commit/b5fcf784829eded844c30be196eb434dd16e8f5e)) +- rebase against next branch ([3812ea1](https://github.com/webpack/webpack-cli/commit/3812ea142a3116d577878ac98691c5fb904e5d7a)) +- refactor webpack-cli ([8a8bc72](https://github.com/webpack/webpack-cli/commit/8a8bc72c392602284bd99e01f8ac1fa63d514594)) +- remove debug flag ([d79cc45](https://github.com/webpack/webpack-cli/commit/d79cc45ccf542e2ae086ba83149d9d7be67de7ec)) +- remove disable line ([88df722](https://github.com/webpack/webpack-cli/commit/88df722cf53e6af77375683c6527af5142f2ec64)) +- remove old tests ([b131230](https://github.com/webpack/webpack-cli/commit/b1312304f3f9de9d7534c5968626be9255a77eec)) +- Remove redundant multiple property ([ecf4a38](https://github.com/webpack/webpack-cli/commit/ecf4a380509a8165dc5e38f4eef24b99368cb7bb)) +- removed the single depth folder search in gitignore ([3a3fb81](https://github.com/webpack/webpack-cli/commit/3a3fb8107feb8f8e6b0067e2f73f6c79867c3061)) +- removed the snapshot testing, added custom checks ([6e40a1b](https://github.com/webpack/webpack-cli/commit/6e40a1bdcabdfac9f981532789523db2f2f4d564)) +- rename flags to options ([ff532f4](https://github.com/webpack/webpack-cli/commit/ff532f4a3822f25d8be8763cd54d2d42c8094a39)) +- sec patch ([2f818ef](https://github.com/webpack/webpack-cli/commit/2f818ef6ec088df7af63b2cb7cfca1671bcd61b9)) +- sec patches ([020b1bf](https://github.com/webpack/webpack-cli/commit/020b1bf32df5c674e6e4cdb80ff64a3dbe19e05d)) +- set fallback devtool ([080c44c](https://github.com/webpack/webpack-cli/commit/080c44c241cf6e796388369edf11e1607efab0df)) +- update commands ([bf32074](https://github.com/webpack/webpack-cli/commit/bf32074472ecb0d4baf0fa16cc557f618cc83879)) +- update console logs to webpack-logs ([dc4c89c](https://github.com/webpack/webpack-cli/commit/dc4c89cfc63e4e9eb8011ab7c27f98ba58c3185c)) +- update dependences ([0f8a7f7](https://github.com/webpack/webpack-cli/commit/0f8a7f766789e13dd759bb9386d73bd39ae5be60)) +- update dependences ([915c9f3](https://github.com/webpack/webpack-cli/commit/915c9f39be93eb46aca441e5f32d7dc23818080e)), closes [#1148](https://github.com/webpack/webpack-cli/issues/1148) +- update deps ([02d653f](https://github.com/webpack/webpack-cli/commit/02d653faba89a3114c715362547864f6b9eb291f)) +- update deps ([8b75e1c](https://github.com/webpack/webpack-cli/commit/8b75e1c7565bc3b121a45a0f7078b5e0774d5cdf)) +- update lockfiles ([f8ed0c6](https://github.com/webpack/webpack-cli/commit/f8ed0c62cc32d76af7fe0f32d8ebb01639c7e30c)) +- **utils:** move jest to dev-deps (closes [#1190](https://github.com/webpack/webpack-cli/issues/1190)) ([#1194](https://github.com/webpack/webpack-cli/issues/1194)) ([fb6e3fe](https://github.com/webpack/webpack-cli/commit/fb6e3fe941094e8f0ee65f5ab71567729d659643)) +- Update lib/bootstrap.js ([fa658b8](https://github.com/webpack/webpack-cli/commit/fa658b8214baa3fa11579dd6218de56437db0650)) +- update lockfiles ([44df902](https://github.com/webpack/webpack-cli/commit/44df902637a0ef2ae226c53d449774ac1b236737)) +- update lockfiles ([6b5ed74](https://github.com/webpack/webpack-cli/commit/6b5ed748bf28885814dd0709a29785bf17abd519)) +- update terser-webpack-plugin to the latest version ([#1172](https://github.com/webpack/webpack-cli/issues/1172)) ([9222016](https://github.com/webpack/webpack-cli/commit/9222016ba3872b255893efe7aec2f5dd6f9de7e0)) +- update test statements ([48f1cb5](https://github.com/webpack/webpack-cli/commit/48f1cb5f02b46d3289d643423c190428f98379ab)) +- update to webpack v5 ([e59bcd7](https://github.com/webpack/webpack-cli/commit/e59bcd7739cc2a8d41c795788c9738e2453dbea7)) +- update variable to be understandable ([9792c81](https://github.com/webpack/webpack-cli/commit/9792c8183cf8d7628d3e18b09101390a558079ca)) +- use filter instead ([c71a9f0](https://github.com/webpack/webpack-cli/commit/c71a9f05eca87afb3a9a792a6aa4fc04b5ea60f1)) +- use Object.keys in commands ([51af1e1](https://github.com/webpack/webpack-cli/commit/51af1e1453de30bc1a897f9e5a29c4877d2f4ed5)) +- use webpack next ([2030f69](https://github.com/webpack/webpack-cli/commit/2030f69cf1221af060988ec1ec899a20f5f30ff3)) +- wip ([641064a](https://github.com/webpack/webpack-cli/commit/641064a4bb40b9c845e921f538e0d886b2c32509)) ### Documentation -- remove deprecated packages description ([#979](https://github.com/webpack/webpack-cli/issues/979)) ([49e4adc](https://github.com/webpack/webpack-cli/commit/49e4adcd98dba87866d4b29216cad447e1223b0c)) -- **create:** migrate init package docs ([#1155](https://github.com/webpack/webpack-cli/issues/1155)) ([a9940bd](https://github.com/webpack/webpack-cli/commit/a9940bd44f97496606b51cecc361f3d03c99c513)) -- **readme:** adds deprecated warning and commands ([da13744](https://github.com/webpack/webpack-cli/commit/da13744e14fe02664ab2e7107cc52e6529e7378a)) -- **readme:** adds issue resolution time shield ([6cd4cb4](https://github.com/webpack/webpack-cli/commit/6cd4cb45b866c55548714535e864b7eb2d6cefba)) -- **webpack-scaffold:** remove unrelated links ([#1092](https://github.com/webpack/webpack-cli/issues/1092)) ([9f5d8b6](https://github.com/webpack/webpack-cli/commit/9f5d8b6056482376a6848ee069e2f7b4ad7184af)) -- Updated information regarding migrate command and a typo fix ([#1187](https://github.com/webpack/webpack-cli/issues/1187)) ([861e9f8](https://github.com/webpack/webpack-cli/commit/861e9f8b3453ca9dfc2b8f9abda86b248cdf80a5)) +- remove deprecated packages description ([#979](https://github.com/webpack/webpack-cli/issues/979)) ([49e4adc](https://github.com/webpack/webpack-cli/commit/49e4adcd98dba87866d4b29216cad447e1223b0c)) +- **create:** migrate init package docs ([#1155](https://github.com/webpack/webpack-cli/issues/1155)) ([a9940bd](https://github.com/webpack/webpack-cli/commit/a9940bd44f97496606b51cecc361f3d03c99c513)) +- **readme:** adds deprecated warning and commands ([da13744](https://github.com/webpack/webpack-cli/commit/da13744e14fe02664ab2e7107cc52e6529e7378a)) +- **readme:** adds issue resolution time shield ([6cd4cb4](https://github.com/webpack/webpack-cli/commit/6cd4cb45b866c55548714535e864b7eb2d6cefba)) +- **webpack-scaffold:** remove unrelated links ([#1092](https://github.com/webpack/webpack-cli/issues/1092)) ([9f5d8b6](https://github.com/webpack/webpack-cli/commit/9f5d8b6056482376a6848ee069e2f7b4ad7184af)) +- Updated information regarding migrate command and a typo fix ([#1187](https://github.com/webpack/webpack-cli/issues/1187)) ([861e9f8](https://github.com/webpack/webpack-cli/commit/861e9f8b3453ca9dfc2b8f9abda86b248cdf80a5)) diff --git a/packages/webpack-cli/bin/cli.js b/packages/webpack-cli/bin/cli.js index d62a625831c..c947b2a9094 100755 --- a/packages/webpack-cli/bin/cli.js +++ b/packages/webpack-cli/bin/cli.js @@ -13,34 +13,32 @@ const runCLI = require("../lib/bootstrap"); const utils = require("../lib/utils"); if (!process.env.WEBPACK_CLI_SKIP_IMPORT_LOCAL) { - // Prefer the local installation of `webpack-cli` - if (importLocal(__filename)) { - return; - } + // Prefer the local installation of `webpack-cli` + if (importLocal(__filename)) { + return; + } } process.title = "webpack"; if (utils.packageExists("webpack")) { - runCLI(process.argv, originalModuleCompile); + runCLI(process.argv, originalModuleCompile); } else { - const { promptInstallation, logger, colors } = utils; + const { promptInstallation, logger, colors } = utils; - promptInstallation("webpack", () => { - utils.logger.error(`It looks like ${colors.bold("webpack")} is not installed.`); + promptInstallation("webpack", () => { + utils.logger.error(`It looks like ${colors.bold("webpack")} is not installed.`); + }) + .then(() => { + logger.success(`${colors.bold("webpack")} was installed successfully.`); + + runCLI(process.argv, originalModuleCompile); }) - .then(() => { - logger.success(`${colors.bold("webpack")} was installed successfully.`); - - runCLI(process.argv, originalModuleCompile); - }) - .catch(() => { - logger.error( - `Action Interrupted, Please try once again or install ${colors.bold( - "webpack", - )} manually.`, - ); - - process.exit(2); - }); + .catch(() => { + logger.error( + `Action Interrupted, Please try once again or install ${colors.bold("webpack")} manually.`, + ); + + process.exit(2); + }); } diff --git a/packages/webpack-cli/lib/bootstrap.js b/packages/webpack-cli/lib/bootstrap.js index 72499f8a364..9f5b7908155 100644 --- a/packages/webpack-cli/lib/bootstrap.js +++ b/packages/webpack-cli/lib/bootstrap.js @@ -2,17 +2,17 @@ const WebpackCLI = require("./webpack-cli"); const utils = require("./utils"); const runCLI = async (args, originalModuleCompile) => { - try { - // Create a new instance of the CLI object - const cli = new WebpackCLI(); + try { + // Create a new instance of the CLI object + const cli = new WebpackCLI(); - cli._originalModuleCompile = originalModuleCompile; + cli._originalModuleCompile = originalModuleCompile; - await cli.run(args); - } catch (error) { - utils.logger.error(error); - process.exit(2); - } + await cli.run(args); + } catch (error) { + utils.logger.error(error); + process.exit(2); + } }; module.exports = runCLI; diff --git a/packages/webpack-cli/lib/plugins/CLIPlugin.js b/packages/webpack-cli/lib/plugins/CLIPlugin.js index 7668857d341..2b1c08302f1 100644 --- a/packages/webpack-cli/lib/plugins/CLIPlugin.js +++ b/packages/webpack-cli/lib/plugins/CLIPlugin.js @@ -1,138 +1,132 @@ class CLIPlugin { - constructor(options) { - this.options = options; + constructor(options) { + this.options = options; + } + + setupHotPlugin(compiler) { + const { HotModuleReplacementPlugin } = compiler.webpack || require("webpack"); + const hotModuleReplacementPlugin = Boolean( + compiler.options.plugins.find((plugin) => plugin instanceof HotModuleReplacementPlugin), + ); + + if (!hotModuleReplacementPlugin) { + new HotModuleReplacementPlugin().apply(compiler); } + } - setupHotPlugin(compiler) { - const { HotModuleReplacementPlugin } = compiler.webpack || require("webpack"); - const hotModuleReplacementPlugin = Boolean( - compiler.options.plugins.find((plugin) => plugin instanceof HotModuleReplacementPlugin), - ); + setupPrefetchPlugin(compiler) { + const { PrefetchPlugin } = compiler.webpack || require("webpack"); - if (!hotModuleReplacementPlugin) { - new HotModuleReplacementPlugin().apply(compiler); - } - } + new PrefetchPlugin(null, this.options.prefetch).apply(compiler); + } - setupPrefetchPlugin(compiler) { - const { PrefetchPlugin } = compiler.webpack || require("webpack"); + async setupBundleAnalyzerPlugin(compiler) { + // eslint-disable-next-line node/no-extraneous-require + const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer"); + const bundleAnalyzerPlugin = Boolean( + compiler.options.plugins.find((plugin) => plugin instanceof BundleAnalyzerPlugin), + ); - new PrefetchPlugin(null, this.options.prefetch).apply(compiler); + if (!bundleAnalyzerPlugin) { + new BundleAnalyzerPlugin().apply(compiler); + } + } + + setupProgressPlugin(compiler) { + const { ProgressPlugin } = compiler.webpack || require("webpack"); + const progressPlugin = Boolean( + compiler.options.plugins.find((plugin) => plugin instanceof ProgressPlugin), + ); + + if (!progressPlugin) { + new ProgressPlugin({ + profile: this.options.progress === "profile", + }).apply(compiler); } + } - async setupBundleAnalyzerPlugin(compiler) { - // eslint-disable-next-line node/no-extraneous-require - const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer"); - const bundleAnalyzerPlugin = Boolean( - compiler.options.plugins.find((plugin) => plugin instanceof BundleAnalyzerPlugin), - ); + setupHelpfulOutput(compiler) { + const pluginName = "webpack-cli"; + const getCompilationName = () => (compiler.name ? `'${compiler.name}'` : ""); + const logCompilation = (message) => { + if (process.env.WEBPACK_CLI_START_FINISH_FORCE_LOG) { + process.stderr.write(message); + } else { + this.logger.log(message); + } + }; - if (!bundleAnalyzerPlugin) { - new BundleAnalyzerPlugin().apply(compiler); - } - } + const { configPath } = this.options; - setupProgressPlugin(compiler) { - const { ProgressPlugin } = compiler.webpack || require("webpack"); - const progressPlugin = Boolean( - compiler.options.plugins.find((plugin) => plugin instanceof ProgressPlugin), + compiler.hooks.run.tap(pluginName, () => { + const name = getCompilationName(); + + logCompilation(`Compiler${name ? ` ${name}` : ""} starting... `); + + if (configPath) { + this.logger.log(`Compiler${name ? ` ${name}` : ""} is using config: '${configPath}'`); + } + }); + + compiler.hooks.watchRun.tap(pluginName, (compiler) => { + const { bail, watch } = compiler.options; + + if (bail && watch) { + this.logger.warn( + 'You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.', ); + } - if (!progressPlugin) { - new ProgressPlugin({ - profile: this.options.progress === "profile", - }).apply(compiler); - } - } + const name = getCompilationName(); - setupHelpfulOutput(compiler) { - const pluginName = "webpack-cli"; - const getCompilationName = () => (compiler.name ? `'${compiler.name}'` : ""); - const logCompilation = (message) => { - if (process.env.WEBPACK_CLI_START_FINISH_FORCE_LOG) { - process.stderr.write(message); - } else { - this.logger.log(message); - } - }; - - const { configPath } = this.options; - - compiler.hooks.run.tap(pluginName, () => { - const name = getCompilationName(); - - logCompilation(`Compiler${name ? ` ${name}` : ""} starting... `); - - if (configPath) { - this.logger.log( - `Compiler${name ? ` ${name}` : ""} is using config: '${configPath}'`, - ); - } - }); - - compiler.hooks.watchRun.tap(pluginName, (compiler) => { - const { bail, watch } = compiler.options; - - if (bail && watch) { - this.logger.warn( - 'You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.', - ); - } - - const name = getCompilationName(); - - logCompilation(`Compiler${name ? ` ${name}` : ""} starting... `); - - if (configPath) { - this.logger.log( - `Compiler${name ? ` ${name}` : ""} is using config: '${configPath}'`, - ); - } - }); - - compiler.hooks.invalid.tap(pluginName, (filename, changeTime) => { - const date = new Date(changeTime * 1000); - - this.logger.log(`File '${filename}' was modified`); - this.logger.log(`Changed time is ${date} (timestamp is ${changeTime})`); - }); - - (compiler.webpack ? compiler.hooks.afterDone : compiler.hooks.done).tap(pluginName, () => { - const name = getCompilationName(); - - logCompilation(`Compiler${name ? ` ${name}` : ""} finished`); - - process.nextTick(() => { - if (compiler.watchMode) { - this.logger.log( - `Compiler${name ? `${name}` : ""} is watching files for updates...`, - ); - } - }); - }); - } + logCompilation(`Compiler${name ? ` ${name}` : ""} starting... `); - apply(compiler) { - this.logger = compiler.getInfrastructureLogger("webpack-cli"); + if (configPath) { + this.logger.log(`Compiler${name ? ` ${name}` : ""} is using config: '${configPath}'`); + } + }); - if (this.options.progress) { - this.setupProgressPlugin(compiler); - } + compiler.hooks.invalid.tap(pluginName, (filename, changeTime) => { + const date = new Date(changeTime * 1000); - if (this.options.hot) { - this.setupHotPlugin(compiler); - } + this.logger.log(`File '${filename}' was modified`); + this.logger.log(`Changed time is ${date} (timestamp is ${changeTime})`); + }); - if (this.options.prefetch) { - this.setupPrefetchPlugin(compiler); - } + (compiler.webpack ? compiler.hooks.afterDone : compiler.hooks.done).tap(pluginName, () => { + const name = getCompilationName(); - if (this.options.analyze) { - this.setupBundleAnalyzerPlugin(compiler); + logCompilation(`Compiler${name ? ` ${name}` : ""} finished`); + + process.nextTick(() => { + if (compiler.watchMode) { + this.logger.log(`Compiler${name ? `${name}` : ""} is watching files for updates...`); } + }); + }); + } + + apply(compiler) { + this.logger = compiler.getInfrastructureLogger("webpack-cli"); - this.setupHelpfulOutput(compiler); + if (this.options.progress) { + this.setupProgressPlugin(compiler); } + + if (this.options.hot) { + this.setupHotPlugin(compiler); + } + + if (this.options.prefetch) { + this.setupPrefetchPlugin(compiler); + } + + if (this.options.analyze) { + this.setupBundleAnalyzerPlugin(compiler); + } + + this.setupHelpfulOutput(compiler); + } } module.exports = CLIPlugin; diff --git a/packages/webpack-cli/lib/utils/capitalize-first-letter.js b/packages/webpack-cli/lib/utils/capitalize-first-letter.js index e8c129e2a86..8b217ba2b7f 100644 --- a/packages/webpack-cli/lib/utils/capitalize-first-letter.js +++ b/packages/webpack-cli/lib/utils/capitalize-first-letter.js @@ -1,9 +1,9 @@ const capitalizeFirstLetter = (string) => { - if (typeof string !== "string") { - return ""; - } + if (typeof string !== "string") { + return ""; + } - return string.charAt(0).toUpperCase() + string.slice(1); + return string.charAt(0).toUpperCase() + string.slice(1); }; module.exports = capitalizeFirstLetter; diff --git a/packages/webpack-cli/lib/utils/dynamic-import-loader.js b/packages/webpack-cli/lib/utils/dynamic-import-loader.js index 6981496934e..c1221bcaffa 100644 --- a/packages/webpack-cli/lib/utils/dynamic-import-loader.js +++ b/packages/webpack-cli/lib/utils/dynamic-import-loader.js @@ -1,13 +1,13 @@ function dynamicImportLoader() { - let importESM; + let importESM; - try { - importESM = new Function("id", "return import(id);"); - } catch (e) { - importESM = null; - } + try { + importESM = new Function("id", "return import(id);"); + } catch (e) { + importESM = null; + } - return importESM; + return importESM; } module.exports = dynamicImportLoader; diff --git a/packages/webpack-cli/lib/utils/get-available-installers.js b/packages/webpack-cli/lib/utils/get-available-installers.js index d2ee92414c5..3d2d3d331d8 100644 --- a/packages/webpack-cli/lib/utils/get-available-installers.js +++ b/packages/webpack-cli/lib/utils/get-available-installers.js @@ -3,23 +3,23 @@ const { sync } = require("execa"); const utils = require("./"); function hasPmInstalled(packageManager) { - try { - sync(packageManager, ["--version"]); - return packageManager; - } catch (err) { - return false; - } + try { + sync(packageManager, ["--version"]); + return packageManager; + } catch (err) { + return false; + } } function getAvailableInstallers() { - const installers = ["npm", "yarn", "pnpm"]; - const availableInstallers = installers.filter((installer) => hasPmInstalled(installer)); + const installers = ["npm", "yarn", "pnpm"]; + const availableInstallers = installers.filter((installer) => hasPmInstalled(installer)); - if (!availableInstallers.length) { - utils.logger.error("No package manager found."); - process.exit(2); - } - return availableInstallers; + if (!availableInstallers.length) { + utils.logger.error("No package manager found."); + process.exit(2); + } + return availableInstallers; } module.exports = getAvailableInstallers; diff --git a/packages/webpack-cli/lib/utils/get-package-manager.js b/packages/webpack-cli/lib/utils/get-package-manager.js index fa67d192810..e07482ad178 100644 --- a/packages/webpack-cli/lib/utils/get-package-manager.js +++ b/packages/webpack-cli/lib/utils/get-package-manager.js @@ -12,54 +12,54 @@ const utils = require("./index"); * @returns {String} - The package manager name */ function getPackageManager() { - const hasLocalNpm = fs.existsSync(path.resolve(process.cwd(), "package-lock.json")); + const hasLocalNpm = fs.existsSync(path.resolve(process.cwd(), "package-lock.json")); - if (hasLocalNpm) { - return "npm"; - } + if (hasLocalNpm) { + return "npm"; + } - const hasLocalYarn = fs.existsSync(path.resolve(process.cwd(), "yarn.lock")); + const hasLocalYarn = fs.existsSync(path.resolve(process.cwd(), "yarn.lock")); - if (hasLocalYarn) { - return "yarn"; - } + if (hasLocalYarn) { + return "yarn"; + } - const hasLocalPnpm = fs.existsSync(path.resolve(process.cwd(), "pnpm-lock.yaml")); + const hasLocalPnpm = fs.existsSync(path.resolve(process.cwd(), "pnpm-lock.yaml")); - if (hasLocalPnpm) { - return "pnpm"; - } + if (hasLocalPnpm) { + return "pnpm"; + } - try { - // the sync function below will fail if npm is not installed, - // an error will be thrown - if (sync("npm", ["--version"])) { - return "npm"; - } - } catch (e) { - // Nothing + try { + // the sync function below will fail if npm is not installed, + // an error will be thrown + if (sync("npm", ["--version"])) { + return "npm"; } + } catch (e) { + // Nothing + } - try { - // the sync function below will fail if yarn is not installed, - // an error will be thrown - if (sync("yarn", ["--version"])) { - return "yarn"; - } - } catch (e) { - // Nothing + try { + // the sync function below will fail if yarn is not installed, + // an error will be thrown + if (sync("yarn", ["--version"])) { + return "yarn"; } + } catch (e) { + // Nothing + } - try { - // the sync function below will fail if pnpm is not installed, - // an error will be thrown - if (sync("pnpm", ["--version"])) { - return "pnpm"; - } - } catch (e) { - utils.logger.error("No package manager found."); - process.exit(2); + try { + // the sync function below will fail if pnpm is not installed, + // an error will be thrown + if (sync("pnpm", ["--version"])) { + return "pnpm"; } + } catch (e) { + utils.logger.error("No package manager found."); + process.exit(2); + } } module.exports = getPackageManager; diff --git a/packages/webpack-cli/lib/utils/index.js b/packages/webpack-cli/lib/utils/index.js index e5ac14c3407..0326645fbea 100644 --- a/packages/webpack-cli/lib/utils/index.js +++ b/packages/webpack-cli/lib/utils/index.js @@ -1,53 +1,53 @@ module.exports = { - get colors() { - return require("colorette"); - }, + get colors() { + return require("colorette"); + }, - get levenshtein() { - return require("fastest-levenshtein"); - }, + get levenshtein() { + return require("fastest-levenshtein"); + }, - get interpret() { - return require("interpret"); - }, + get interpret() { + return require("interpret"); + }, - get rechoir() { - return require("rechoir"); - }, + get rechoir() { + return require("rechoir"); + }, - get capitalizeFirstLetter() { - return require("./capitalize-first-letter"); - }, + get capitalizeFirstLetter() { + return require("./capitalize-first-letter"); + }, - get dynamicImportLoader() { - return require("./dynamic-import-loader"); - }, + get dynamicImportLoader() { + return require("./dynamic-import-loader"); + }, - get getAvailableInstallers() { - return require("./get-available-installers"); - }, + get getAvailableInstallers() { + return require("./get-available-installers"); + }, - get getPackageManager() { - return require("./get-package-manager"); - }, + get getPackageManager() { + return require("./get-package-manager"); + }, - get logger() { - return require("./logger"); - }, + get logger() { + return require("./logger"); + }, - get packageExists() { - return require("./package-exists"); - }, + get packageExists() { + return require("./package-exists"); + }, - get promptInstallation() { - return require("./prompt-installation"); - }, + get promptInstallation() { + return require("./prompt-installation"); + }, - get runCommand() { - return require("./run-command"); - }, + get runCommand() { + return require("./run-command"); + }, - get toKebabCase() { - return require("./to-kebab-case"); - }, + get toKebabCase() { + return require("./to-kebab-case"); + }, }; diff --git a/packages/webpack-cli/lib/utils/logger.js b/packages/webpack-cli/lib/utils/logger.js index 88ee114bb1d..f0df986fca4 100644 --- a/packages/webpack-cli/lib/utils/logger.js +++ b/packages/webpack-cli/lib/utils/logger.js @@ -2,10 +2,10 @@ const utils = require("./index"); const util = require("util"); module.exports = { - error: (val) => console.error(`[webpack-cli] ${utils.colors.red(util.format(val))}`), - warn: (val) => console.warn(`[webpack-cli] ${utils.colors.yellow(val)}`), - info: (val) => console.info(`[webpack-cli] ${utils.colors.cyan(val)}`), - success: (val) => console.log(`[webpack-cli] ${utils.colors.green(val)}`), - log: (val) => console.log(`[webpack-cli] ${val}`), - raw: (val) => console.log(val), + error: (val) => console.error(`[webpack-cli] ${utils.colors.red(util.format(val))}`), + warn: (val) => console.warn(`[webpack-cli] ${utils.colors.yellow(val)}`), + info: (val) => console.info(`[webpack-cli] ${utils.colors.cyan(val)}`), + success: (val) => console.log(`[webpack-cli] ${utils.colors.green(val)}`), + log: (val) => console.log(`[webpack-cli] ${val}`), + raw: (val) => console.log(val), }; diff --git a/packages/webpack-cli/lib/utils/package-exists.js b/packages/webpack-cli/lib/utils/package-exists.js index 5f17b718415..ba1a683524d 100644 --- a/packages/webpack-cli/lib/utils/package-exists.js +++ b/packages/webpack-cli/lib/utils/package-exists.js @@ -2,23 +2,23 @@ const fs = require("fs"); const path = require("path"); function packageExists(packageName) { - if (process.versions.pnp) { - return true; - } + if (process.versions.pnp) { + return true; + } - let dir = __dirname; + let dir = __dirname; - do { - try { - if (fs.statSync(path.join(dir, "node_modules", packageName)).isDirectory()) { - return true; - } - } catch (_error) { - // Nothing - } - } while (dir !== (dir = path.dirname(dir))); + do { + try { + if (fs.statSync(path.join(dir, "node_modules", packageName)).isDirectory()) { + return true; + } + } catch (_error) { + // Nothing + } + } while (dir !== (dir = path.dirname(dir))); - return false; + return false; } module.exports = packageExists; diff --git a/packages/webpack-cli/lib/utils/prompt-installation.js b/packages/webpack-cli/lib/utils/prompt-installation.js index e870019335a..d4d078d42a0 100644 --- a/packages/webpack-cli/lib/utils/prompt-installation.js +++ b/packages/webpack-cli/lib/utils/prompt-installation.js @@ -7,54 +7,52 @@ const prompt = require("./prompt"); * @param preMessage Message to show before the question */ async function promptInstallation(packageName, preMessage) { - const packageManager = utils.getPackageManager(); + const packageManager = utils.getPackageManager(); - if (!packageManager) { - utils.logger.error("Can't find package manager"); - process.exit(2); - } + if (!packageManager) { + utils.logger.error("Can't find package manager"); + process.exit(2); + } - if (preMessage) { - preMessage(); - } + if (preMessage) { + preMessage(); + } - // yarn uses 'add' command, rest npm and pnpm both use 'install' - const commandToBeRun = `${packageManager} ${[ - packageManager === "yarn" ? "add" : "install", - "-D", - packageName, - ].join(" ")}`; - const { colors } = utils; + // yarn uses 'add' command, rest npm and pnpm both use 'install' + const commandToBeRun = `${packageManager} ${[ + packageManager === "yarn" ? "add" : "install", + "-D", + packageName, + ].join(" ")}`; + const { colors } = utils; + + let installConfirm; - let installConfirm; + try { + installConfirm = await prompt({ + message: `[webpack-cli] Would you like to install '${colors.green( + packageName, + )}' package? (That will run '${colors.green(commandToBeRun)}') (${colors.yellow("Y/n")})`, + defaultResponse: "Y", + stream: process.stderr, + }); + } catch (error) { + utils.logger.error(error); + process.exit(2); + } + if (installConfirm) { try { - installConfirm = await prompt({ - message: `[webpack-cli] Would you like to install '${colors.green( - packageName, - )}' package? (That will run '${colors.green(commandToBeRun)}') (${colors.yellow( - "Y/n", - )})`, - defaultResponse: "Y", - stream: process.stderr, - }); + await utils.runCommand(commandToBeRun); } catch (error) { - utils.logger.error(error); - process.exit(2); + utils.logger.error(error); + process.exit(2); } - if (installConfirm) { - try { - await utils.runCommand(commandToBeRun); - } catch (error) { - utils.logger.error(error); - process.exit(2); - } + return packageName; + } - return packageName; - } - - process.exit(2); + process.exit(2); } module.exports = promptInstallation; diff --git a/packages/webpack-cli/lib/utils/prompt.js b/packages/webpack-cli/lib/utils/prompt.js index e28b944b2a1..777890fb418 100644 --- a/packages/webpack-cli/lib/utils/prompt.js +++ b/packages/webpack-cli/lib/utils/prompt.js @@ -1,25 +1,25 @@ const prompt = ({ message, defaultResponse, stream }) => { - const readline = require("readline"); - const rl = readline.createInterface({ - input: process.stdin, - output: stream, - }); + const readline = require("readline"); + const rl = readline.createInterface({ + input: process.stdin, + output: stream, + }); - return new Promise((resolve) => { - rl.question(`${message} `, (answer) => { - // Close the stream - rl.close(); + return new Promise((resolve) => { + rl.question(`${message} `, (answer) => { + // Close the stream + rl.close(); - const response = (answer || defaultResponse).toLowerCase(); + const response = (answer || defaultResponse).toLowerCase(); - // Resolve with the input response - if (response === "y" || response === "yes") { - resolve(true); - } else { - resolve(false); - } - }); + // Resolve with the input response + if (response === "y" || response === "yes") { + resolve(true); + } else { + resolve(false); + } }); + }); }; module.exports = prompt; diff --git a/packages/webpack-cli/lib/utils/run-command.js b/packages/webpack-cli/lib/utils/run-command.js index 62b75da9e69..97f8228d4dc 100644 --- a/packages/webpack-cli/lib/utils/run-command.js +++ b/packages/webpack-cli/lib/utils/run-command.js @@ -2,12 +2,12 @@ const execa = require("execa"); const utils = require("./index"); async function runCommand(command, args = []) { - try { - await execa(command, args, { stdio: "inherit", shell: true }); - } catch (error) { - utils.logger.error(error.message); - process.exit(2); - } + try { + await execa(command, args, { stdio: "inherit", shell: true }); + } catch (error) { + utils.logger.error(error.message); + process.exit(2); + } } module.exports = runCommand; diff --git a/packages/webpack-cli/lib/utils/to-kebab-case.js b/packages/webpack-cli/lib/utils/to-kebab-case.js index be7e976a3c7..fda1de3b441 100644 --- a/packages/webpack-cli/lib/utils/to-kebab-case.js +++ b/packages/webpack-cli/lib/utils/to-kebab-case.js @@ -1,5 +1,5 @@ const toKebabCase = (str) => { - return str.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(); + return str.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(); }; module.exports = toKebabCase; diff --git a/packages/webpack-cli/lib/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index 168d75d45da..76869cd5687 100644 --- a/packages/webpack-cli/lib/webpack-cli.js +++ b/packages/webpack-cli/lib/webpack-cli.js @@ -7,2227 +7,2136 @@ const { program, Option } = require("commander"); const utils = require("./utils"); class WebpackCLI { - constructor() { - // Global - this.webpack = require(process.env.WEBPACK_PACKAGE || "webpack"); - this.logger = utils.logger; - this.utils = utils; - - // Initialize program - this.program = program; - this.program.name("webpack"); - this.program.configureOutput({ - writeErr: this.logger.error, - outputError: (str, write) => - write( - `Error: ${this.utils.capitalizeFirstLetter(str.replace(/^error:/, "").trim())}`, - ), - }); - } - - async tryRequireThenImport(module, handleError = true) { - let result; - - try { - result = require(module); - } catch (error) { - let previousModuleCompile; + constructor() { + // Global + this.webpack = require(process.env.WEBPACK_PACKAGE || "webpack"); + this.logger = utils.logger; + this.utils = utils; + + // Initialize program + this.program = program; + this.program.name("webpack"); + this.program.configureOutput({ + writeErr: this.logger.error, + outputError: (str, write) => + write(`Error: ${this.utils.capitalizeFirstLetter(str.replace(/^error:/, "").trim())}`), + }); + } + + async tryRequireThenImport(module, handleError = true) { + let result; + + try { + result = require(module); + } catch (error) { + let previousModuleCompile; + + // TODO Workaround https://github.com/zertosh/v8-compile-cache/issues/30 + if (this._originalModuleCompile) { + previousModuleCompile = Module.prototype._compile; + + Module.prototype._compile = this._originalModuleCompile; + } + + const dynamicImportLoader = this.utils.dynamicImportLoader(); + + if (this._originalModuleCompile) { + Module.prototype._compile = previousModuleCompile; + } + + if ( + (error.code === "ERR_REQUIRE_ESM" || process.env.WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG) && + pathToFileURL && + dynamicImportLoader + ) { + const urlForConfig = pathToFileURL(module); + + result = await dynamicImportLoader(urlForConfig); + result = result.default; - // TODO Workaround https://github.com/zertosh/v8-compile-cache/issues/30 - if (this._originalModuleCompile) { - previousModuleCompile = Module.prototype._compile; + return result; + } + + if (handleError) { + this.logger.error(error); + process.exit(2); + } else { + throw error; + } + } - Module.prototype._compile = this._originalModuleCompile; - } + // For babel/typescript + if (result.default) { + result = result.default; + } - const dynamicImportLoader = this.utils.dynamicImportLoader(); + return result; + } - if (this._originalModuleCompile) { - Module.prototype._compile = previousModuleCompile; - } + loadJSONFile(pathToFile) { + let result; - if ( - (error.code === "ERR_REQUIRE_ESM" || - process.env.WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG) && - pathToFileURL && - dynamicImportLoader - ) { - const urlForConfig = pathToFileURL(module); + try { + result = require(pathToFile); + } catch (error) { + this.logger.error(error); + process.exit(2); + } - result = await dynamicImportLoader(urlForConfig); - result = result.default; + return result; + } - return result; - } + async makeCommand(commandOptions, options, action) { + const alreadyLoaded = this.program.commands.find( + (command) => + command.name() === commandOptions.name.split(" ")[0] || + command.aliases().includes(commandOptions.alias), + ); - if (handleError) { - this.logger.error(error); - process.exit(2); - } else { - throw error; - } - } + if (alreadyLoaded) { + return; + } - // For babel/typescript - if (result.default) { - result = result.default; - } + const command = this.program.command(commandOptions.name, { + noHelp: commandOptions.noHelp, + hidden: commandOptions.hidden, + isDefault: commandOptions.isDefault, + }); - return result; + if (commandOptions.description) { + command.description(commandOptions.description, commandOptions.argsDescription); } - loadJSONFile(pathToFile) { - let result; + if (commandOptions.usage) { + command.usage(commandOptions.usage); + } - try { - result = require(pathToFile); - } catch (error) { - this.logger.error(error); - process.exit(2); - } + if (Array.isArray(commandOptions.alias)) { + command.aliases(commandOptions.alias); + } else { + command.alias(commandOptions.alias); + } - return result; + if (commandOptions.pkg) { + command.pkg = commandOptions.pkg; + } else { + command.pkg = "webpack-cli"; } - async makeCommand(commandOptions, options, action) { - const alreadyLoaded = this.program.commands.find( - (command) => - command.name() === commandOptions.name.split(" ")[0] || - command.aliases().includes(commandOptions.alias), - ); + const { forHelp } = this.program; - if (alreadyLoaded) { - return; - } + let allDependenciesInstalled = true; - const command = this.program.command(commandOptions.name, { - noHelp: commandOptions.noHelp, - hidden: commandOptions.hidden, - isDefault: commandOptions.isDefault, - }); + if (commandOptions.dependencies && commandOptions.dependencies.length > 0) { + for (const dependency of commandOptions.dependencies) { + const { packageExists } = this.utils; + const isPkgExist = packageExists(dependency); - if (commandOptions.description) { - command.description(commandOptions.description, commandOptions.argsDescription); + if (isPkgExist) { + continue; + } else if (!isPkgExist && forHelp) { + allDependenciesInstalled = false; + continue; } - if (commandOptions.usage) { - command.usage(commandOptions.usage); - } + const { promptInstallation, colors } = this.utils; - if (Array.isArray(commandOptions.alias)) { - command.aliases(commandOptions.alias); - } else { - command.alias(commandOptions.alias); - } + await promptInstallation(dependency, () => { + this.logger.error( + `For using '${colors.green( + commandOptions.name.split(" ")[0], + )}' command you need to install: '${colors.green(dependency)}' package`, + ); + }); + } + } - if (commandOptions.pkg) { - command.pkg = commandOptions.pkg; + if (options) { + if (typeof options === "function") { + if (forHelp && !allDependenciesInstalled) { + command.description( + `${ + commandOptions.description + } To see all available options you need to install ${commandOptions.dependencies + .map((dependency) => `'${dependency}'`) + .join(",")}.`, + ); + options = []; } else { - command.pkg = "webpack-cli"; + options = options(); } + } - const { forHelp } = this.program; + options.forEach((optionForCommand) => { + this.makeOption(command, optionForCommand); + }); + } - let allDependenciesInstalled = true; + command.action(action); - if (commandOptions.dependencies && commandOptions.dependencies.length > 0) { - for (const dependency of commandOptions.dependencies) { - const { packageExists } = this.utils; - const isPkgExist = packageExists(dependency); + return command; + } - if (isPkgExist) { - continue; - } else if (!isPkgExist && forHelp) { - allDependenciesInstalled = false; - continue; - } + makeOption(command, option) { + let mainOption; + let negativeOption; - const { promptInstallation, colors } = this.utils; + if (option.configs) { + let needNegativeOption = false; + const mainOptionType = new Set(); - await promptInstallation(dependency, () => { - this.logger.error( - `For using '${colors.green( - commandOptions.name.split(" ")[0], - )}' command you need to install: '${colors.green(dependency)}' package`, - ); - }); + option.configs.forEach((config) => { + // Possible value: "enum" | "string" | "path" | "number" | "boolean" | "RegExp" | "reset" + switch (config.type) { + case "reset": + mainOptionType.add(Boolean); + break; + case "boolean": + if (!needNegativeOption) { + needNegativeOption = true; } - } - if (options) { - if (typeof options === "function") { - if (forHelp && !allDependenciesInstalled) { - command.description( - `${ - commandOptions.description - } To see all available options you need to install ${commandOptions.dependencies - .map((dependency) => `'${dependency}'`) - .join(",")}.`, - ); - options = []; - } else { - options = options(); - } - } + mainOptionType.add(Boolean); + break; + case "number": + mainOptionType.add(Number); + break; + case "string": + case "path": + case "RegExp": + mainOptionType.add(String); + break; + case "enum": { + let hasFalseEnum = false; + + const enumTypes = config.values.map((value) => { + switch (typeof value) { + case "string": + mainOptionType.add(String); + break; + case "number": + mainOptionType.add(Number); + break; + case "boolean": + if (!hasFalseEnum && value === false) { + hasFalseEnum = true; + break; + } - options.forEach((optionForCommand) => { - this.makeOption(command, optionForCommand); + mainOptionType.add(Boolean); + break; + } }); - } - command.action(action); + if (!needNegativeOption) { + needNegativeOption = hasFalseEnum; + } - return command; + return enumTypes; + } + } + }); + + mainOption = { + flags: option.alias ? `-${option.alias}, --${option.name}` : `--${option.name}`, + description: option.description || "", + type: mainOptionType, + multiple: option.multiple, + defaultValue: option.defaultValue, + }; + + if (needNegativeOption) { + negativeOption = { + flags: `--no-${option.name}`, + description: option.negatedDescription + ? option.negatedDescription + : `Negative '${option.name}' option.`, + }; + } + } else { + mainOption = { + flags: option.alias ? `-${option.alias}, --${option.name}` : `--${option.name}`, + // TODO `describe` used by `webpack-dev-server@3` + description: option.description || option.describe || "", + type: option.type + ? new Set(Array.isArray(option.type) ? option.type : [option.type]) + : new Set([Boolean]), + multiple: option.multiple, + defaultValue: option.defaultValue, + }; + + if (option.negative) { + negativeOption = { + flags: `--no-${option.name}`, + description: option.negatedDescription + ? option.negatedDescription + : `Negative '${option.name}' option.`, + }; + } } - makeOption(command, option) { - let mainOption; - let negativeOption; - - if (option.configs) { - let needNegativeOption = false; - const mainOptionType = new Set(); - - option.configs.forEach((config) => { - // Possible value: "enum" | "string" | "path" | "number" | "boolean" | "RegExp" | "reset" - switch (config.type) { - case "reset": - mainOptionType.add(Boolean); - break; - case "boolean": - if (!needNegativeOption) { - needNegativeOption = true; - } - - mainOptionType.add(Boolean); - break; - case "number": - mainOptionType.add(Number); - break; - case "string": - case "path": - case "RegExp": - mainOptionType.add(String); - break; - case "enum": { - let hasFalseEnum = false; - - const enumTypes = config.values.map((value) => { - switch (typeof value) { - case "string": - mainOptionType.add(String); - break; - case "number": - mainOptionType.add(Number); - break; - case "boolean": - if (!hasFalseEnum && value === false) { - hasFalseEnum = true; - break; - } - - mainOptionType.add(Boolean); - break; - } - }); - - if (!needNegativeOption) { - needNegativeOption = hasFalseEnum; - } - - return enumTypes; - } - } - }); + if (mainOption.type.size > 1 && mainOption.type.has(Boolean)) { + mainOption.flags = `${mainOption.flags} [value${mainOption.multiple ? "..." : ""}]`; + } else if (mainOption.type.size > 0 && !mainOption.type.has(Boolean)) { + mainOption.flags = `${mainOption.flags} `; + } - mainOption = { - flags: option.alias ? `-${option.alias}, --${option.name}` : `--${option.name}`, - description: option.description || "", - type: mainOptionType, - multiple: option.multiple, - defaultValue: option.defaultValue, - }; + if (mainOption.type.size === 1) { + if (mainOption.type.has(Number)) { + let skipDefault = true; - if (needNegativeOption) { - negativeOption = { - flags: `--no-${option.name}`, - description: option.negatedDescription - ? option.negatedDescription - : `Negative '${option.name}' option.`, - }; + const optionForCommand = new Option(mainOption.flags, mainOption.description) + .argParser((value, prev = []) => { + if (mainOption.defaultValue && mainOption.multiple && skipDefault) { + prev = []; + skipDefault = false; } - } else { - mainOption = { - flags: option.alias ? `-${option.alias}, --${option.name}` : `--${option.name}`, - // TODO `describe` used by `webpack-dev-server@3` - description: option.description || option.describe || "", - type: option.type - ? new Set(Array.isArray(option.type) ? option.type : [option.type]) - : new Set([Boolean]), - multiple: option.multiple, - defaultValue: option.defaultValue, - }; - if (option.negative) { - negativeOption = { - flags: `--no-${option.name}`, - description: option.negatedDescription - ? option.negatedDescription - : `Negative '${option.name}' option.`, - }; - } - } + return mainOption.multiple ? [].concat(prev).concat(Number(value)) : Number(value); + }) + .default(mainOption.defaultValue); - if (mainOption.type.size > 1 && mainOption.type.has(Boolean)) { - mainOption.flags = `${mainOption.flags} [value${mainOption.multiple ? "..." : ""}]`; - } else if (mainOption.type.size > 0 && !mainOption.type.has(Boolean)) { - mainOption.flags = `${mainOption.flags} `; - } + optionForCommand.helpLevel = option.helpLevel; - if (mainOption.type.size === 1) { - if (mainOption.type.has(Number)) { - let skipDefault = true; + command.addOption(optionForCommand); + } else if (mainOption.type.has(String)) { + let skipDefault = true; - const optionForCommand = new Option(mainOption.flags, mainOption.description) - .argParser((value, prev = []) => { - if (mainOption.defaultValue && mainOption.multiple && skipDefault) { - prev = []; - skipDefault = false; - } + const optionForCommand = new Option(mainOption.flags, mainOption.description) + .argParser((value, prev = []) => { + if (mainOption.defaultValue && mainOption.multiple && skipDefault) { + prev = []; + skipDefault = false; + } - return mainOption.multiple - ? [].concat(prev).concat(Number(value)) - : Number(value); - }) - .default(mainOption.defaultValue); + return mainOption.multiple ? [].concat(prev).concat(value) : value; + }) + .default(mainOption.defaultValue); - optionForCommand.helpLevel = option.helpLevel; + optionForCommand.helpLevel = option.helpLevel; - command.addOption(optionForCommand); - } else if (mainOption.type.has(String)) { - let skipDefault = true; + command.addOption(optionForCommand); + } else if (mainOption.type.has(Boolean)) { + const optionForCommand = new Option(mainOption.flags, mainOption.description).default( + mainOption.defaultValue, + ); - const optionForCommand = new Option(mainOption.flags, mainOption.description) - .argParser((value, prev = []) => { - if (mainOption.defaultValue && mainOption.multiple && skipDefault) { - prev = []; - skipDefault = false; - } + optionForCommand.helpLevel = option.helpLevel; + + command.addOption(optionForCommand); + } else { + const optionForCommand = new Option(mainOption.flags, mainOption.description) + .argParser(Array.from(mainOption.type)[0]) + .default(mainOption.defaultValue); + + optionForCommand.helpLevel = option.helpLevel; + + command.addOption(optionForCommand); + } + } else if (mainOption.type.size > 1) { + let skipDefault = true; + + const optionForCommand = new Option( + mainOption.flags, + mainOption.description, + mainOption.defaultValue, + ) + .argParser((value, prev = []) => { + if (mainOption.defaultValue && mainOption.multiple && skipDefault) { + prev = []; + skipDefault = false; + } + + if (mainOption.type.has(Number)) { + const numberValue = Number(value); + + if (!isNaN(numberValue)) { + return mainOption.multiple ? [].concat(prev).concat(numberValue) : numberValue; + } + } - return mainOption.multiple ? [].concat(prev).concat(value) : value; - }) - .default(mainOption.defaultValue); + if (mainOption.type.has(String)) { + return mainOption.multiple ? [].concat(prev).concat(value) : value; + } - optionForCommand.helpLevel = option.helpLevel; + return value; + }) + .default(mainOption.defaultValue); - command.addOption(optionForCommand); - } else if (mainOption.type.has(Boolean)) { - const optionForCommand = new Option( - mainOption.flags, - mainOption.description, - ).default(mainOption.defaultValue); + optionForCommand.helpLevel = option.helpLevel; - optionForCommand.helpLevel = option.helpLevel; + command.addOption(optionForCommand); + } else if (mainOption.type.size === 0 && negativeOption) { + const optionForCommand = new Option(mainOption.flags, mainOption.description); - command.addOption(optionForCommand); - } else { - const optionForCommand = new Option(mainOption.flags, mainOption.description) - .argParser(Array.from(mainOption.type)[0]) - .default(mainOption.defaultValue); + // Hide stub option + optionForCommand.hideHelp(); + optionForCommand.helpLevel = option.helpLevel; - optionForCommand.helpLevel = option.helpLevel; + command.addOption(optionForCommand); + } - command.addOption(optionForCommand); - } - } else if (mainOption.type.size > 1) { - let skipDefault = true; - - const optionForCommand = new Option( - mainOption.flags, - mainOption.description, - mainOption.defaultValue, - ) - .argParser((value, prev = []) => { - if (mainOption.defaultValue && mainOption.multiple && skipDefault) { - prev = []; - skipDefault = false; - } - - if (mainOption.type.has(Number)) { - const numberValue = Number(value); - - if (!isNaN(numberValue)) { - return mainOption.multiple - ? [].concat(prev).concat(numberValue) - : numberValue; - } - } - - if (mainOption.type.has(String)) { - return mainOption.multiple ? [].concat(prev).concat(value) : value; - } - - return value; - }) - .default(mainOption.defaultValue); - - optionForCommand.helpLevel = option.helpLevel; - - command.addOption(optionForCommand); - } else if (mainOption.type.size === 0 && negativeOption) { - const optionForCommand = new Option(mainOption.flags, mainOption.description); - - // Hide stub option - optionForCommand.hideHelp(); - optionForCommand.helpLevel = option.helpLevel; - - command.addOption(optionForCommand); - } + if (negativeOption) { + const optionForCommand = new Option(negativeOption.flags, negativeOption.description); - if (negativeOption) { - const optionForCommand = new Option(negativeOption.flags, negativeOption.description); + optionForCommand.helpLevel = option.helpLevel; - optionForCommand.helpLevel = option.helpLevel; + command.addOption(optionForCommand); + } + } - command.addOption(optionForCommand); - } + getBuiltInOptions() { + if (this.builtInOptionsCache) { + return this.builtInOptionsCache; } - getBuiltInOptions() { - if (this.builtInOptionsCache) { - return this.builtInOptionsCache; - } + const minimumHelpFlags = [ + "config", + "config-name", + "merge", + "env", + "mode", + "watch", + "watch-options-stdin", + "stats", + "devtool", + "entry", + "target", + "progress", + "json", + "name", + "output-path", + "node-env", + ]; + + const builtInFlags = [ + // For configs + { + name: "config", + alias: "c", + configs: [ + { + type: "string", + }, + ], + multiple: true, + description: "Provide path to a webpack configuration file e.g. ./webpack.config.js.", + }, + { + name: "config-name", + configs: [ + { + type: "string", + }, + ], + multiple: true, + description: "Name of the configuration to use.", + }, + { + name: "merge", + alias: "m", + configs: [ + { + type: "enum", + values: [true], + }, + ], + description: "Merge two or more configurations using 'webpack-merge'.", + }, + // Complex configs + { + name: "env", + type: (value, previous = {}) => { + // for https://github.com/webpack/webpack-cli/issues/2642 + if (value.endsWith("=")) { + value.concat('""'); + } + + // 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] = {}; + } - const minimumHelpFlags = [ - "config", - "config-name", - "merge", - "env", - "mode", - "watch", - "watch-options-stdin", - "stats", - "devtool", - "entry", - "target", - "progress", - "json", - "name", - "output-path", - "node-env", - ]; - - const builtInFlags = [ - // For configs - { - name: "config", - alias: "c", - configs: [ - { - type: "string", - }, - ], - multiple: true, - description: - "Provide path to a webpack configuration file e.g. ./webpack.config.js.", - }, - { - name: "config-name", - configs: [ - { - type: "string", - }, - ], - multiple: true, - description: "Name of the configuration to use.", - }, - { - name: "merge", - alias: "m", - configs: [ - { - type: "enum", - values: [true], - }, - ], - description: "Merge two or more configurations using 'webpack-merge'.", - }, - // Complex configs - { - name: "env", - type: (value, previous = {}) => { - // for https://github.com/webpack/webpack-cli/issues/2642 - if (value.endsWith("=")) { - value.concat('""'); - } - - // 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 (typeof prevRef[someKey] === "string") { - prevRef[someKey] = {}; - } - - if (index === splitKeys.length - 1) { - if (typeof val === "string") { - prevRef[someKey] = val; - } else { - prevRef[someKey] = true; - } - } - - prevRef = prevRef[someKey]; - }); - - return previous; - }, - multiple: true, - description: "Environment passed to the configuration when it is a function.", - }, - { - name: "node-env", - configs: [ - { - type: "string", - }, - ], - multiple: false, - description: "Sets process.env.NODE_ENV to the specified value.", - }, - - // Adding more plugins - { - name: "hot", - alias: "h", - configs: [ - { - type: "string", - }, - { - type: "boolean", - }, - ], - negative: true, - description: "Enables Hot Module Replacement", - negatedDescription: "Disables Hot Module Replacement.", - }, - { - name: "analyze", - configs: [ - { - type: "enum", - values: [true], - }, - ], - multiple: false, - description: "It invokes webpack-bundle-analyzer plugin to get bundle information.", - }, - { - name: "progress", - configs: [ - { - type: "string", - }, - { - type: "enum", - values: [true], - }, - ], - description: "Print compilation progress during build.", - }, - { - name: "prefetch", - configs: [ - { - type: "string", - }, - ], - description: "Prefetch this request.", - }, - - // Output options - { - name: "json", - configs: [ - { - type: "string", - }, - { - type: "enum", - values: [true], - }, - ], - alias: "j", - description: "Prints result as JSON or store it in a file.", - }, - - // For webpack@4 - { - name: "entry", - configs: [ - { - type: "string", - }, - ], - multiple: true, - description: "The entry point(s) of your application e.g. ./src/main.js.", - }, - { - name: "output-path", - alias: "o", - configs: [ - { - type: "string", - }, - ], - description: "Output location of the file generated by webpack e.g. ./dist/.", - }, - { - name: "target", - alias: "t", - configs: [ - { - type: "string", - }, - ], - multiple: this.webpack.cli !== undefined, - description: "Sets the build target e.g. node.", - }, - { - name: "devtool", - configs: [ - { - type: "string", - }, - { - type: "enum", - values: [false], - }, - ], - negative: true, - alias: "d", - description: "Determine source maps to use.", - negatedDescription: "Do not generate source maps.", - }, - { - name: "mode", - configs: [ - { - type: "string", - }, - ], - description: "Defines the mode to pass to webpack.", - }, - { - name: "name", - configs: [ - { - type: "string", - }, - ], - description: - "Name of the configuration. Used when loading multiple configurations.", - }, - { - name: "stats", - configs: [ - { - type: "string", - }, - { - type: "boolean", - }, - ], - negative: true, - description: "It instructs webpack on how to treat the stats e.g. verbose.", - negatedDescription: "Disable stats output.", - }, - { - name: "watch", - configs: [ - { - type: "boolean", - }, - ], - negative: true, - alias: "w", - description: "Watch for files changes.", - negatedDescription: "Do not watch for file changes.", - }, - { - name: "watch-options-stdin", - configs: [ - { - type: "boolean", - }, - ], - negative: true, - description: "Stop watching when stdin stream has ended.", - negatedDescription: "Do not stop watching when stdin stream has ended.", - }, - ]; - - // Extract all the flags being exported from core. - // A list of cli flags generated by core can be found here https://github.com/webpack/webpack/blob/master/test/__snapshots__/Cli.test.js.snap - const coreFlags = this.webpack.cli - ? Object.entries(this.webpack.cli.getArguments()).map(([flag, meta]) => { - const inBuiltIn = builtInFlags.find((builtInFlag) => builtInFlag.name === flag); - - if (inBuiltIn) { - return { - ...meta, - name: flag, - group: "core", - ...inBuiltIn, - configs: meta.configs || [], - }; - } + if (typeof prevRef[someKey] === "string") { + prevRef[someKey] = {}; + } - return { ...meta, name: flag, group: "core" }; - }) - : []; - - const options = [] - .concat( - builtInFlags.filter( - (builtInFlag) => - !coreFlags.find((coreFlag) => builtInFlag.name === coreFlag.name), - ), - ) - .concat(coreFlags) - .map((option) => { - option.helpLevel = minimumHelpFlags.includes(option.name) ? "minimum" : "verbose"; - - return option; - }); + if (index === splitKeys.length - 1) { + if (typeof val === "string") { + prevRef[someKey] = val; + } else { + prevRef[someKey] = true; + } + } - this.builtInOptionsCache = options; + prevRef = prevRef[someKey]; + }); + + return previous; + }, + multiple: true, + description: "Environment passed to the configuration when it is a function.", + }, + { + name: "node-env", + configs: [ + { + type: "string", + }, + ], + multiple: false, + description: "Sets process.env.NODE_ENV to the specified value.", + }, + + // Adding more plugins + { + name: "hot", + alias: "h", + configs: [ + { + type: "string", + }, + { + type: "boolean", + }, + ], + negative: true, + description: "Enables Hot Module Replacement", + negatedDescription: "Disables Hot Module Replacement.", + }, + { + name: "analyze", + configs: [ + { + type: "enum", + values: [true], + }, + ], + multiple: false, + description: "It invokes webpack-bundle-analyzer plugin to get bundle information.", + }, + { + name: "progress", + configs: [ + { + type: "string", + }, + { + type: "enum", + values: [true], + }, + ], + description: "Print compilation progress during build.", + }, + { + name: "prefetch", + configs: [ + { + type: "string", + }, + ], + description: "Prefetch this request.", + }, + + // Output options + { + name: "json", + configs: [ + { + type: "string", + }, + { + type: "enum", + values: [true], + }, + ], + alias: "j", + description: "Prints result as JSON or store it in a file.", + }, + + // For webpack@4 + { + name: "entry", + configs: [ + { + type: "string", + }, + ], + multiple: true, + description: "The entry point(s) of your application e.g. ./src/main.js.", + }, + { + name: "output-path", + alias: "o", + configs: [ + { + type: "string", + }, + ], + description: "Output location of the file generated by webpack e.g. ./dist/.", + }, + { + name: "target", + alias: "t", + configs: [ + { + type: "string", + }, + ], + multiple: this.webpack.cli !== undefined, + description: "Sets the build target e.g. node.", + }, + { + name: "devtool", + configs: [ + { + type: "string", + }, + { + type: "enum", + values: [false], + }, + ], + negative: true, + alias: "d", + description: "Determine source maps to use.", + negatedDescription: "Do not generate source maps.", + }, + { + name: "mode", + configs: [ + { + type: "string", + }, + ], + description: "Defines the mode to pass to webpack.", + }, + { + name: "name", + configs: [ + { + type: "string", + }, + ], + description: "Name of the configuration. Used when loading multiple configurations.", + }, + { + name: "stats", + configs: [ + { + type: "string", + }, + { + type: "boolean", + }, + ], + negative: true, + description: "It instructs webpack on how to treat the stats e.g. verbose.", + negatedDescription: "Disable stats output.", + }, + { + name: "watch", + configs: [ + { + type: "boolean", + }, + ], + negative: true, + alias: "w", + description: "Watch for files changes.", + negatedDescription: "Do not watch for file changes.", + }, + { + name: "watch-options-stdin", + configs: [ + { + type: "boolean", + }, + ], + negative: true, + description: "Stop watching when stdin stream has ended.", + negatedDescription: "Do not stop watching when stdin stream has ended.", + }, + ]; + + // Extract all the flags being exported from core. + // A list of cli flags generated by core can be found here https://github.com/webpack/webpack/blob/master/test/__snapshots__/Cli.test.js.snap + const coreFlags = this.webpack.cli + ? Object.entries(this.webpack.cli.getArguments()).map(([flag, meta]) => { + const inBuiltIn = builtInFlags.find((builtInFlag) => builtInFlag.name === flag); + + if (inBuiltIn) { + return { + ...meta, + name: flag, + group: "core", + ...inBuiltIn, + configs: meta.configs || [], + }; + } - return options; - } + return { ...meta, name: flag, group: "core" }; + }) + : []; - applyNodeEnv(options) { - if (typeof options.nodeEnv === "string") { - process.env.NODE_ENV = options.nodeEnv; - } - } + const options = [] + .concat( + builtInFlags.filter( + (builtInFlag) => !coreFlags.find((coreFlag) => builtInFlag.name === coreFlag.name), + ), + ) + .concat(coreFlags) + .map((option) => { + option.helpLevel = minimumHelpFlags.includes(option.name) ? "minimum" : "verbose"; - async run(args, parseOptions) { - // Built-in internal commands - const buildCommandOptions = { - name: "build [entries...]", - alias: ["bundle", "b"], - description: "Run webpack (default command, can be omitted).", - usage: "[entries...] [options]", - }; - const watchCommandOptions = { - name: "watch [entries...]", - alias: "w", - description: "Run webpack and watch for files changes.", - usage: "[entries...] [options]", - }; - const versionCommandOptions = { - name: "version [commands...]", - alias: "v", - description: - "Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands.", - }; - const helpCommandOptions = { - name: "help [command] [option]", - alias: "h", - description: "Display help for commands and options.", - }; - // Built-in external commands - const externalBuiltInCommandsInfo = [ - { - name: "serve [entries...]", - alias: ["server", "s"], - pkg: "@webpack-cli/serve", - }, - { - name: "info", - alias: "i", - pkg: "@webpack-cli/info", - }, - { - name: "init", - alias: ["create", "new", "c", "n"], - pkg: "@webpack-cli/generators", - }, - { - name: "loader", - alias: "l", - pkg: "@webpack-cli/generators", - }, - { - name: "plugin", - alias: "p", - pkg: "@webpack-cli/generators", - }, - { - name: "migrate", - alias: "m", - pkg: "@webpack-cli/migrate", - }, - { - name: "configtest [config-path]", - alias: "t", - pkg: "@webpack-cli/configtest", - }, - ]; - - const knownCommands = [ - buildCommandOptions, - watchCommandOptions, - versionCommandOptions, - helpCommandOptions, - ...externalBuiltInCommandsInfo, - ]; - const getCommandName = (name) => name.split(" ")[0]; - const isKnownCommand = (name) => - knownCommands.find( - (command) => - getCommandName(command.name) === name || - (Array.isArray(command.alias) - ? command.alias.includes(name) - : command.alias === name), - ); - const isCommand = (input, commandOptions) => { - const longName = getCommandName(commandOptions.name); + return option; + }); - if (input === longName) { - return true; - } + this.builtInOptionsCache = options; - if (commandOptions.alias) { - if (Array.isArray(commandOptions.alias)) { - return commandOptions.alias.includes(input); - } else { - return commandOptions.alias === input; - } - } + return options; + } - return false; - }; - const findCommandByName = (name) => - this.program.commands.find( - (command) => name === command.name() || command.aliases().includes(name), - ); - const isOption = (value) => value.startsWith("-"); - const isGlobalOption = (value) => - value === "--color" || - value === "--no-color" || - value === "-v" || - value === "--version" || - value === "-h" || - value === "--help"; - - const loadCommandByName = async (commandName, allowToInstall = false) => { - const isBuildCommandUsed = isCommand(commandName, buildCommandOptions); - const isWatchCommandUsed = isCommand(commandName, watchCommandOptions); - - if (isBuildCommandUsed || isWatchCommandUsed) { - const options = this.getBuiltInOptions(); - - await this.makeCommand( - isBuildCommandUsed ? buildCommandOptions : watchCommandOptions, - isWatchCommandUsed - ? options.filter((option) => option.name !== "watch") - : options, - async (entries, options) => { - if (entries.length > 0) { - options.entry = [...entries, ...(options.entry || [])]; - } - - await this.runWebpack(options, isWatchCommandUsed); - }, - ); - } else if (isCommand(commandName, helpCommandOptions)) { - // Stub for the `help` command - this.makeCommand(helpCommandOptions, [], () => {}); - } else if (isCommand(commandName, versionCommandOptions)) { - // Stub for the `help` command - this.makeCommand(versionCommandOptions, [], () => {}); - } else { - const builtInExternalCommandInfo = externalBuiltInCommandsInfo.find( - (externalBuiltInCommandInfo) => - getCommandName(externalBuiltInCommandInfo.name) === commandName || - (Array.isArray(externalBuiltInCommandInfo.alias) - ? externalBuiltInCommandInfo.alias.includes(commandName) - : externalBuiltInCommandInfo.alias === commandName), - ); + applyNodeEnv(options) { + if (typeof options.nodeEnv === "string") { + process.env.NODE_ENV = options.nodeEnv; + } + } + + async run(args, parseOptions) { + // Built-in internal commands + const buildCommandOptions = { + name: "build [entries...]", + alias: ["bundle", "b"], + description: "Run webpack (default command, can be omitted).", + usage: "[entries...] [options]", + }; + const watchCommandOptions = { + name: "watch [entries...]", + alias: "w", + description: "Run webpack and watch for files changes.", + usage: "[entries...] [options]", + }; + const versionCommandOptions = { + name: "version [commands...]", + alias: "v", + description: + "Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands.", + }; + const helpCommandOptions = { + name: "help [command] [option]", + alias: "h", + description: "Display help for commands and options.", + }; + // Built-in external commands + const externalBuiltInCommandsInfo = [ + { + name: "serve [entries...]", + alias: ["server", "s"], + pkg: "@webpack-cli/serve", + }, + { + name: "info", + alias: "i", + pkg: "@webpack-cli/info", + }, + { + name: "init", + alias: ["create", "new", "c", "n"], + pkg: "@webpack-cli/generators", + }, + { + name: "loader", + alias: "l", + pkg: "@webpack-cli/generators", + }, + { + name: "plugin", + alias: "p", + pkg: "@webpack-cli/generators", + }, + { + name: "migrate", + alias: "m", + pkg: "@webpack-cli/migrate", + }, + { + name: "configtest [config-path]", + alias: "t", + pkg: "@webpack-cli/configtest", + }, + ]; + + const knownCommands = [ + buildCommandOptions, + watchCommandOptions, + versionCommandOptions, + helpCommandOptions, + ...externalBuiltInCommandsInfo, + ]; + const getCommandName = (name) => name.split(" ")[0]; + const isKnownCommand = (name) => + knownCommands.find( + (command) => + getCommandName(command.name) === name || + (Array.isArray(command.alias) ? command.alias.includes(name) : command.alias === name), + ); + const isCommand = (input, commandOptions) => { + const longName = getCommandName(commandOptions.name); + + if (input === longName) { + return true; + } + + if (commandOptions.alias) { + if (Array.isArray(commandOptions.alias)) { + return commandOptions.alias.includes(input); + } else { + return commandOptions.alias === input; + } + } + + return false; + }; + const findCommandByName = (name) => + this.program.commands.find( + (command) => name === command.name() || command.aliases().includes(name), + ); + const isOption = (value) => value.startsWith("-"); + const isGlobalOption = (value) => + value === "--color" || + value === "--no-color" || + value === "-v" || + value === "--version" || + value === "-h" || + value === "--help"; + + const loadCommandByName = async (commandName, allowToInstall = false) => { + const isBuildCommandUsed = isCommand(commandName, buildCommandOptions); + const isWatchCommandUsed = isCommand(commandName, watchCommandOptions); + + if (isBuildCommandUsed || isWatchCommandUsed) { + const options = this.getBuiltInOptions(); + + await this.makeCommand( + isBuildCommandUsed ? buildCommandOptions : watchCommandOptions, + isWatchCommandUsed ? options.filter((option) => option.name !== "watch") : options, + async (entries, options) => { + if (entries.length > 0) { + options.entry = [...entries, ...(options.entry || [])]; + } - let pkg; + await this.runWebpack(options, isWatchCommandUsed); + }, + ); + } else if (isCommand(commandName, helpCommandOptions)) { + // Stub for the `help` command + this.makeCommand(helpCommandOptions, [], () => {}); + } else if (isCommand(commandName, versionCommandOptions)) { + // Stub for the `help` command + this.makeCommand(versionCommandOptions, [], () => {}); + } else { + const builtInExternalCommandInfo = externalBuiltInCommandsInfo.find( + (externalBuiltInCommandInfo) => + getCommandName(externalBuiltInCommandInfo.name) === commandName || + (Array.isArray(externalBuiltInCommandInfo.alias) + ? externalBuiltInCommandInfo.alias.includes(commandName) + : externalBuiltInCommandInfo.alias === commandName), + ); - if (builtInExternalCommandInfo) { - ({ pkg } = builtInExternalCommandInfo); - } else { - pkg = commandName; - } + let pkg; - if (pkg !== "webpack-cli" && !this.utils.packageExists(pkg)) { - if (!allowToInstall) { - return; - } + if (builtInExternalCommandInfo) { + ({ pkg } = builtInExternalCommandInfo); + } else { + pkg = commandName; + } - const { promptInstallation, colors } = this.utils; + if (pkg !== "webpack-cli" && !this.utils.packageExists(pkg)) { + if (!allowToInstall) { + return; + } - pkg = await promptInstallation(pkg, () => { - this.logger.error( - `For using this command you need to install: '${colors.green( - pkg, - )}' package`, - ); - }); - } + const { promptInstallation, colors } = this.utils; - let loadedCommand; + pkg = await promptInstallation(pkg, () => { + this.logger.error( + `For using this command you need to install: '${colors.green(pkg)}' package`, + ); + }); + } - try { - loadedCommand = await this.tryRequireThenImport(pkg, false); - } catch (error) { - // Ignore, command is not installed + let loadedCommand; - return; - } + try { + loadedCommand = await this.tryRequireThenImport(pkg, false); + } catch (error) { + // Ignore, command is not installed - let command; + return; + } - try { - command = new loadedCommand(); + let command; - await command.apply(this); - } catch (error) { - this.logger.error(`Unable to load '${pkg}' command`); - this.logger.error(error); - process.exit(2); - } - } - }; + try { + command = new loadedCommand(); - // Register own exit - this.program.exitOverride(async (error) => { - if (error.exitCode === 0) { - process.exit(0); + await command.apply(this); + } catch (error) { + this.logger.error(`Unable to load '${pkg}' command`); + this.logger.error(error); + process.exit(2); + } + } + }; + + // Register own exit + this.program.exitOverride(async (error) => { + if (error.exitCode === 0) { + process.exit(0); + } + + if (error.code === "executeSubCommandAsync") { + process.exit(2); + } + + if (error.code === "commander.help") { + process.exit(0); + } + + if (error.code === "commander.unknownOption") { + let name = error.message.match(/'(.+)'/); + + if (name) { + name = name[1].substr(2); + + if (name.includes("=")) { + name = name.split("=")[0]; + } + + const { operands } = this.program.parseOptions(this.program.args); + const operand = + typeof operands[0] !== "undefined" + ? operands[0] + : getCommandName(buildCommandOptions.name); + + if (operand) { + const command = findCommandByName(operand); + + if (!command) { + this.logger.error(`Can't find and load command '${operand}'`); + this.logger.error("Run 'webpack --help' to see available commands and options"); + process.exit(2); } - if (error.code === "executeSubCommandAsync") { - process.exit(2); - } + command.options.forEach((option) => { + if ( + !option.hidden && + this.utils.levenshtein.distance(name, option.long.slice(2)) < 3 + ) { + this.logger.error(`Did you mean '--${option.name()}'?`); + } + }); + } + } + } + + // Codes: + // - commander.unknownCommand + // - commander.missingArgument + // - commander.missingMandatoryOptionValue + // - commander.optionMissingArgument + + this.logger.error("Run 'webpack --help' to see available commands and options"); + process.exit(2); + }); + + // Default `--color` and `--no-color` options + const cli = this; + this.program.option("--color", "Enable colors on console."); + this.program.on("option:color", function () { + const { color } = this.opts(); + + cli.utils.colors.options.changed = true; + cli.utils.colors.options.enabled = color; + }); + this.program.option("--no-color", "Disable colors on console."); + this.program.on("option:no-color", function () { + const { color } = this.opts(); + + cli.utils.colors.options.changed = true; + cli.utils.colors.options.enabled = color; + }); + + // Make `-v, --version` options + // Make `version|v [commands...]` command + const outputVersion = async (options) => { + // Filter `bundle`, `watch`, `version` and `help` commands + const possibleCommandNames = options.filter( + (option) => + !isCommand(option, buildCommandOptions) && + !isCommand(option, watchCommandOptions) && + !isCommand(option, versionCommandOptions) && + !isCommand(option, helpCommandOptions), + ); + + possibleCommandNames.forEach((possibleCommandName) => { + if (!isOption(possibleCommandName)) { + return; + } - if (error.code === "commander.help") { - process.exit(0); - } + this.logger.error(`Unknown option '${possibleCommandName}'`); + this.logger.error("Run 'webpack --help' to see available commands and options"); + process.exit(2); + }); - if (error.code === "commander.unknownOption") { - let name = error.message.match(/'(.+)'/); - - if (name) { - name = name[1].substr(2); - - if (name.includes("=")) { - name = name.split("=")[0]; - } - - const { operands } = this.program.parseOptions(this.program.args); - const operand = - typeof operands[0] !== "undefined" - ? operands[0] - : getCommandName(buildCommandOptions.name); - - if (operand) { - const command = findCommandByName(operand); - - if (!command) { - this.logger.error(`Can't find and load command '${operand}'`); - this.logger.error( - "Run 'webpack --help' to see available commands and options", - ); - process.exit(2); - } - - command.options.forEach((option) => { - if ( - !option.hidden && - this.utils.levenshtein.distance(name, option.long.slice(2)) < 3 - ) { - this.logger.error(`Did you mean '--${option.name()}'?`); - } - }); - } - } - } + if (possibleCommandNames.length > 0) { + await Promise.all( + possibleCommandNames.map((possibleCommand) => loadCommandByName(possibleCommand)), + ); - // Codes: - // - commander.unknownCommand - // - commander.missingArgument - // - commander.missingMandatoryOptionValue - // - commander.optionMissingArgument + for (const possibleCommandName of possibleCommandNames) { + const foundCommand = findCommandByName(possibleCommandName); + if (!foundCommand) { + this.logger.error(`Unknown command '${possibleCommandName}'`); this.logger.error("Run 'webpack --help' to see available commands and options"); process.exit(2); - }); - - // Default `--color` and `--no-color` options - const cli = this; - this.program.option("--color", "Enable colors on console."); - this.program.on("option:color", function () { - const { color } = this.opts(); - - cli.utils.colors.options.changed = true; - cli.utils.colors.options.enabled = color; - }); - this.program.option("--no-color", "Disable colors on console."); - this.program.on("option:no-color", function () { - const { color } = this.opts(); + } - cli.utils.colors.options.changed = true; - cli.utils.colors.options.enabled = color; - }); + try { + const { name, version } = this.loadJSONFile(`${foundCommand.pkg}/package.json`); - // Make `-v, --version` options - // Make `version|v [commands...]` command - const outputVersion = async (options) => { - // Filter `bundle`, `watch`, `version` and `help` commands - const possibleCommandNames = options.filter( - (option) => - !isCommand(option, buildCommandOptions) && - !isCommand(option, watchCommandOptions) && - !isCommand(option, versionCommandOptions) && - !isCommand(option, helpCommandOptions), - ); - - possibleCommandNames.forEach((possibleCommandName) => { - if (!isOption(possibleCommandName)) { - return; - } + this.logger.raw(`${name} ${version}`); + } catch (e) { + this.logger.error(`Error: External package '${foundCommand.pkg}' not found`); + process.exit(2); + } + } + } - this.logger.error(`Unknown option '${possibleCommandName}'`); - this.logger.error("Run 'webpack --help' to see available commands and options"); - process.exit(2); - }); + const pkgJSON = this.loadJSONFile("../package.json"); - if (possibleCommandNames.length > 0) { - await Promise.all( - possibleCommandNames.map((possibleCommand) => - loadCommandByName(possibleCommand), - ), - ); + this.logger.raw(`webpack ${this.webpack.version}`); + this.logger.raw(`webpack-cli ${pkgJSON.version}`); - for (const possibleCommandName of possibleCommandNames) { - const foundCommand = findCommandByName(possibleCommandName); - - if (!foundCommand) { - this.logger.error(`Unknown command '${possibleCommandName}'`); - this.logger.error( - "Run 'webpack --help' to see available commands and options", - ); - process.exit(2); - } - - try { - const { name, version } = this.loadJSONFile( - `${foundCommand.pkg}/package.json`, - ); - - this.logger.raw(`${name} ${version}`); - } catch (e) { - this.logger.error( - `Error: External package '${foundCommand.pkg}' not found`, - ); - process.exit(2); - } - } - } + if (this.utils.packageExists("webpack-dev-server")) { + const { version } = this.loadJSONFile("webpack-dev-server/package.json"); - const pkgJSON = this.loadJSONFile("../package.json"); + this.logger.raw(`webpack-dev-server ${version}`); + } - this.logger.raw(`webpack ${this.webpack.version}`); - this.logger.raw(`webpack-cli ${pkgJSON.version}`); + process.exit(0); + }; + this.program.option( + "-v, --version", + "Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands.", + ); - if (this.utils.packageExists("webpack-dev-server")) { - const { version } = this.loadJSONFile("webpack-dev-server/package.json"); + const outputHelp = async (options, isVerbose, isHelpCommandSyntax, program) => { + const { bold } = this.utils.colors; - this.logger.raw(`webpack-dev-server ${version}`); + const outputIncorrectUsageOfHelp = () => { + this.logger.error("Incorrect use of help"); + this.logger.error( + "Please use: 'webpack help [command] [option]' | 'webpack [command] --help'", + ); + this.logger.error("Run 'webpack --help' to see available commands and options"); + process.exit(2); + }; + + const isGlobalHelp = options.length === 0; + const isCommandHelp = options.length === 1 && !isOption(options[0]); + + if (isGlobalHelp || isCommandHelp) { + program.configureHelp({ + sortSubcommands: true, + // Support multiple aliases + commandUsage: (command) => { + let parentCmdNames = ""; + + for (let parentCmd = command.parent; parentCmd; parentCmd = parentCmd.parent) { + parentCmdNames = `${parentCmd.name()} ${parentCmdNames}`; } - process.exit(0); - }; - this.program.option( - "-v, --version", - "Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands.", - ); + if (isGlobalHelp) { + return `${parentCmdNames}${command.usage()}\n${this.utils.colors.bold( + "Alternative usage to run commands:", + )} ${parentCmdNames}[command] [options]`; + } - const outputHelp = async (options, isVerbose, isHelpCommandSyntax, program) => { - const { bold } = this.utils.colors; + return `${parentCmdNames}${command.name()}|${command + .aliases() + .join("|")} ${command.usage()}`; + }, + // Support multiple aliases + subcommandTerm: (command) => { + const humanReadableArgumentName = (argument) => { + const nameOutput = argument.name + (argument.variadic === true ? "..." : ""); - const outputIncorrectUsageOfHelp = () => { - this.logger.error("Incorrect use of help"); - this.logger.error( - "Please use: 'webpack help [command] [option]' | 'webpack [command] --help'", + return argument.required ? "<" + nameOutput + ">" : "[" + nameOutput + "]"; + }; + const args = command._args.map((arg) => humanReadableArgumentName(arg)).join(" "); + + return `${command.name()}|${command.aliases().join("|")}${args ? ` ${args}` : ""}${ + command.options.length > 0 ? " [options]" : "" + }`; + }, + visibleOptions: function visibleOptions(command) { + return command.options.filter((option) => { + if (option.hidden) { + return false; + } + + switch (option.helpLevel) { + case "verbose": + return isVerbose; + case "minimum": + default: + return true; + } + }); + }, + padWidth(command, helper) { + return Math.max( + helper.longestArgumentTermLength(command, helper), + helper.longestOptionTermLength(command, helper), + // For global options + helper.longestOptionTermLength(program, helper), + helper.longestSubcommandTermLength(isGlobalHelp ? program : command, helper), + ); + }, + formatHelp: (command, helper) => { + const termWidth = helper.padWidth(command, helper); + const helpWidth = helper.helpWidth || process.env.WEBPACK_CLI_HELP_WIDTH || 80; + const itemIndentWidth = 2; + const itemSeparatorWidth = 2; // between term and description + + const formatItem = (term, description) => { + if (description) { + const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`; + + return helper.wrap( + fullText, + helpWidth - itemIndentWidth, + termWidth + itemSeparatorWidth, ); - this.logger.error("Run 'webpack --help' to see available commands and options"); - process.exit(2); + } + + return term; }; - const isGlobalHelp = options.length === 0; - const isCommandHelp = options.length === 1 && !isOption(options[0]); - - if (isGlobalHelp || isCommandHelp) { - program.configureHelp({ - sortSubcommands: true, - // Support multiple aliases - commandUsage: (command) => { - let parentCmdNames = ""; - - for ( - let parentCmd = command.parent; - parentCmd; - parentCmd = parentCmd.parent - ) { - parentCmdNames = `${parentCmd.name()} ${parentCmdNames}`; - } - - if (isGlobalHelp) { - return `${parentCmdNames}${command.usage()}\n${this.utils.colors.bold( - "Alternative usage to run commands:", - )} ${parentCmdNames}[command] [options]`; - } - - return `${parentCmdNames}${command.name()}|${command - .aliases() - .join("|")} ${command.usage()}`; - }, - // Support multiple aliases - subcommandTerm: (command) => { - const humanReadableArgumentName = (argument) => { - const nameOutput = - argument.name + (argument.variadic === true ? "..." : ""); - - return argument.required - ? "<" + nameOutput + ">" - : "[" + nameOutput + "]"; - }; - const args = command._args - .map((arg) => humanReadableArgumentName(arg)) - .join(" "); - - return `${command.name()}|${command.aliases().join("|")}${ - args ? ` ${args}` : "" - }${command.options.length > 0 ? " [options]" : ""}`; - }, - visibleOptions: function visibleOptions(command) { - return command.options.filter((option) => { - if (option.hidden) { - return false; - } - - switch (option.helpLevel) { - case "verbose": - return isVerbose; - case "minimum": - default: - return true; - } - }); - }, - padWidth(command, helper) { - return Math.max( - helper.longestArgumentTermLength(command, helper), - helper.longestOptionTermLength(command, helper), - // For global options - helper.longestOptionTermLength(program, helper), - helper.longestSubcommandTermLength( - isGlobalHelp ? program : command, - helper, - ), - ); - }, - formatHelp: (command, helper) => { - const termWidth = helper.padWidth(command, helper); - const helpWidth = - helper.helpWidth || process.env.WEBPACK_CLI_HELP_WIDTH || 80; - const itemIndentWidth = 2; - const itemSeparatorWidth = 2; // between term and description - - const formatItem = (term, description) => { - if (description) { - const fullText = `${term.padEnd( - termWidth + itemSeparatorWidth, - )}${description}`; - - return helper.wrap( - fullText, - helpWidth - itemIndentWidth, - termWidth + itemSeparatorWidth, - ); - } - - return term; - }; - - const formatList = (textArray) => - textArray.join("\n").replace(/^/gm, " ".repeat(itemIndentWidth)); - - // Usage - let output = [`${bold("Usage:")} ${helper.commandUsage(command)}`, ""]; - - // Description - const commandDescription = isGlobalHelp - ? "The build tool for modern web applications." - : helper.commandDescription(command); - - if (commandDescription.length > 0) { - output = output.concat([commandDescription, ""]); - } - - // Arguments - const argumentList = helper - .visibleArguments(command) - .map((argument) => formatItem(argument.term, argument.description)); - - if (argumentList.length > 0) { - output = output.concat([ - bold("Arguments:"), - formatList(argumentList), - "", - ]); - } - - // Options - const optionList = helper - .visibleOptions(command) - .map((option) => - formatItem( - helper.optionTerm(option), - helper.optionDescription(option), - ), - ); - - if (optionList.length > 0) { - output = output.concat([bold("Options:"), formatList(optionList), ""]); - } - - // Global options - const globalOptionList = program.options.map((option) => - formatItem(helper.optionTerm(option), helper.optionDescription(option)), - ); - - if (globalOptionList.length > 0) { - output = output.concat([ - bold("Global options:"), - formatList(globalOptionList), - "", - ]); - } - - // Commands - const commandList = helper - .visibleCommands(isGlobalHelp ? program : command) - .map((command) => - formatItem( - helper.subcommandTerm(command), - helper.subcommandDescription(command), - ), - ); - - if (commandList.length > 0) { - output = output.concat([ - bold("Commands:"), - formatList(commandList), - "", - ]); - } - - return output.join("\n"); - }, - }); - - if (isGlobalHelp) { - await Promise.all( - knownCommands.map((knownCommand) => { - return loadCommandByName(getCommandName(knownCommand.name)); - }), - ); - - const buildCommand = findCommandByName( - getCommandName(buildCommandOptions.name), - ); - - this.logger.raw(buildCommand.helpInformation()); - } else { - const name = options[0]; - - await loadCommandByName(name); - - const command = findCommandByName(name); - - if (!command) { - const builtInCommandUsed = externalBuiltInCommandsInfo.find( - (command) => command.name.includes(name) || name === command.alias, - ); - if (typeof builtInCommandUsed !== "undefined") { - this.logger.error( - `For using '${name}' command you need to install '${builtInCommandUsed.pkg}' package`, - ); - } else { - this.logger.error(`Can't find and load command '${name}'`); - this.logger.error( - "Run 'webpack --help' to see available commands and options", - ); - } - process.exit(2); - } - - this.logger.raw(command.helpInformation()); - } - } else if (isHelpCommandSyntax) { - let isCommandSpecified = false; - let commandName = getCommandName(buildCommandOptions.name); - let optionName; - - if (options.length === 1) { - optionName = options[0]; - } else if (options.length === 2) { - isCommandSpecified = true; - commandName = options[0]; - optionName = options[1]; - - if (isOption(commandName)) { - outputIncorrectUsageOfHelp(); - } - } else { - outputIncorrectUsageOfHelp(); - } - - await loadCommandByName(commandName); - - const command = isGlobalOption(optionName) - ? program - : findCommandByName(commandName); - - if (!command) { - this.logger.error(`Can't find and load command '${commandName}'`); - this.logger.error("Run 'webpack --help' to see available commands and options"); - process.exit(2); - } - - const option = command.options.find( - (option) => option.short === optionName || option.long === optionName, - ); + const formatList = (textArray) => + textArray.join("\n").replace(/^/gm, " ".repeat(itemIndentWidth)); - if (!option) { - this.logger.error(`Unknown option '${optionName}'`); - this.logger.error("Run 'webpack --help' to see available commands and options"); - process.exit(2); - } - - const nameOutput = - option.flags.replace(/^.+[[<]/, "").replace(/(\.\.\.)?[\]>].*$/, "") + - (option.variadic === true ? "..." : ""); - const value = option.required - ? "<" + nameOutput + ">" - : option.optional - ? "[" + nameOutput + "]" - : ""; - - this.logger.raw( - `${bold("Usage")}: webpack${isCommandSpecified ? ` ${commandName}` : ""} ${ - option.long - }${value ? ` ${value}` : ""}`, - ); + // Usage + let output = [`${bold("Usage:")} ${helper.commandUsage(command)}`, ""]; - if (option.short) { - this.logger.raw( - `${bold("Short:")} webpack${isCommandSpecified ? ` ${commandName}` : ""} ${ - option.short - }${value ? ` ${value}` : ""}`, - ); - } - - if (option.description) { - this.logger.raw(`${bold("Description:")} ${option.description}`); - } - - if (!option.negate && option.defaultValue) { - this.logger.raw( - `${bold("Default value:")} ${JSON.stringify(option.defaultValue)}`, - ); - } - - const flag = this.getBuiltInOptions().find( - (flag) => option.long === `--${flag.name}`, - ); + // Description + const commandDescription = isGlobalHelp + ? "The build tool for modern web applications." + : helper.commandDescription(command); - if (flag && flag.configs) { - const possibleValues = flag.configs.reduce((accumulator, currentValue) => { - if (currentValue.values) { - return accumulator.concat(currentValue.values); - } else { - return accumulator; - } - }, []); - - if (possibleValues.length > 0) { - this.logger.raw( - `${bold("Possible values:")} ${JSON.stringify( - possibleValues.join(" | "), - )}`, - ); - } - } - - this.logger.raw(""); - - // TODO implement this after refactor cli arguments - // logger.raw('Documentation: https://webpack.js.org/option/name/'); - } else { - outputIncorrectUsageOfHelp(); + if (commandDescription.length > 0) { + output = output.concat([commandDescription, ""]); } - this.logger.raw( - "To see list of all supported commands and options run 'webpack --help=verbose'.\n", - ); - this.logger.raw(`${bold("Webpack documentation:")} https://webpack.js.org/.`); - this.logger.raw(`${bold("CLI documentation:")} https://webpack.js.org/api/cli/.`); - this.logger.raw(`${bold("Made with ♥ by the webpack team")}.`); - process.exit(0); - }; - this.program.helpOption(false); - this.program.addHelpCommand(false); - this.program.option("-h, --help [verbose]", "Display help for commands and options."); - - let isInternalActionCalled = false; - - // Default action - this.program.usage("[options]"); - this.program.allowUnknownOption(true); - this.program.action(async (options, program) => { - if (!isInternalActionCalled) { - isInternalActionCalled = true; - } else { - this.logger.error("No commands found to run"); - process.exit(2); - } + // Arguments + const argumentList = helper + .visibleArguments(command) + .map((argument) => formatItem(argument.term, argument.description)); - // Command and options - const { operands, unknown } = this.program.parseOptions(program.args); - const defaultCommandToRun = getCommandName(buildCommandOptions.name); - const hasOperand = typeof operands[0] !== "undefined"; - const operand = hasOperand ? operands[0] : defaultCommandToRun; - const isHelpOption = typeof options.help !== "undefined"; - const isHelpCommandSyntax = isCommand(operand, helpCommandOptions); - - if (isHelpOption || isHelpCommandSyntax) { - let isVerbose = false; - - if (isHelpOption) { - if (typeof options.help === "string") { - if (options.help !== "verbose") { - this.logger.error( - "Unknown value for '--help' option, please use '--help=verbose'", - ); - process.exit(2); - } - - isVerbose = true; - } - } - - this.program.forHelp = true; - - const optionsForHelp = [] - .concat(isHelpOption && hasOperand ? [operand] : []) - // Syntax `webpack help [command]` - .concat(operands.slice(1)) - // Syntax `webpack help [option]` - .concat(unknown) - .concat( - isHelpCommandSyntax && typeof options.color !== "undefined" - ? [options.color ? "--color" : "--no-color"] - : [], - ) - .concat( - isHelpCommandSyntax && typeof options.version !== "undefined" - ? ["--version"] - : [], - ); - - await outputHelp(optionsForHelp, isVerbose, isHelpCommandSyntax, program); + if (argumentList.length > 0) { + output = output.concat([bold("Arguments:"), formatList(argumentList), ""]); } - const isVersionOption = typeof options.version !== "undefined"; - const isVersionCommandSyntax = isCommand(operand, versionCommandOptions); + // Options + const optionList = helper + .visibleOptions(command) + .map((option) => + formatItem(helper.optionTerm(option), helper.optionDescription(option)), + ); + + if (optionList.length > 0) { + output = output.concat([bold("Options:"), formatList(optionList), ""]); + } - if (isVersionOption || isVersionCommandSyntax) { - const optionsForVersion = [] - .concat(isVersionOption ? [operand] : []) - .concat(operands.slice(1)) - .concat(unknown); + // Global options + const globalOptionList = program.options.map((option) => + formatItem(helper.optionTerm(option), helper.optionDescription(option)), + ); - await outputVersion(optionsForVersion, program); + if (globalOptionList.length > 0) { + output = output.concat([bold("Global options:"), formatList(globalOptionList), ""]); } - let commandToRun = operand; - let commandOperands = operands.slice(1); + // Commands + const commandList = helper + .visibleCommands(isGlobalHelp ? program : command) + .map((command) => + formatItem(helper.subcommandTerm(command), helper.subcommandDescription(command)), + ); - if (isKnownCommand(commandToRun)) { - await loadCommandByName(commandToRun, true); - } else { - const isEntrySyntax = fs.existsSync(operand); - - if (isEntrySyntax) { - commandToRun = defaultCommandToRun; - commandOperands = operands; - - await loadCommandByName(commandToRun); - } else { - this.logger.error(`Unknown command or entry '${operand}'`); - - const found = knownCommands.find( - (commandOptions) => - this.utils.levenshtein.distance( - operand, - getCommandName(commandOptions.name), - ) < 3, - ); - - if (found) { - this.logger.error( - `Did you mean '${getCommandName(found.name)}' (alias '${ - Array.isArray(found.alias) ? found.alias.join(", ") : found.alias - }')?`, - ); - } - - this.logger.error("Run 'webpack --help' to see available commands and options"); - process.exit(2); - } + if (commandList.length > 0) { + output = output.concat([bold("Commands:"), formatList(commandList), ""]); } - await this.program.parseAsync([commandToRun, ...commandOperands, ...unknown], { - from: "user", - }); + return output.join("\n"); + }, }); - await this.program.parseAsync(args, parseOptions); - } + if (isGlobalHelp) { + await Promise.all( + knownCommands.map((knownCommand) => { + return loadCommandByName(getCommandName(knownCommand.name)); + }), + ); - async loadConfig(configPath, argv = {}) { - const { interpret } = this.utils; - const ext = path.extname(configPath); - const interpreted = Object.keys(interpret.jsVariants).find((variant) => variant === ext); - - if (interpreted) { - const { rechoir } = this.utils; - - try { - rechoir.prepare(interpret.extensions, configPath); - } catch (error) { - if (error.failures) { - this.logger.error(`Unable load '${configPath}'`); - this.logger.error(error.message); - - error.failures.forEach((failure) => { - this.logger.error(failure.error.message); - }); - this.logger.error("Please install one of them"); - process.exit(2); - } - - this.logger.error(error); - process.exit(2); - } - } + const buildCommand = findCommandByName(getCommandName(buildCommandOptions.name)); - let options; + this.logger.raw(buildCommand.helpInformation()); + } else { + const name = options[0]; - try { - options = await this.tryRequireThenImport(configPath, false); - } catch (error) { - this.logger.error(`Failed to load '${configPath}' config`); + await loadCommandByName(name); - if (this.isValidationError(error)) { - this.logger.error(error.message); + const command = findCommandByName(name); + + if (!command) { + const builtInCommandUsed = externalBuiltInCommandsInfo.find( + (command) => command.name.includes(name) || name === command.alias, + ); + if (typeof builtInCommandUsed !== "undefined") { + this.logger.error( + `For using '${name}' command you need to install '${builtInCommandUsed.pkg}' package`, + ); } else { - this.logger.error(error); + this.logger.error(`Can't find and load command '${name}'`); + this.logger.error("Run 'webpack --help' to see available commands and options"); } - process.exit(2); - } + } - if (Array.isArray(options)) { - await Promise.all( - options.map(async (_, i) => { - if (typeof options[i].then === "function") { - options[i] = await options[i]; - } - - // `Promise` may return `Function` - if (typeof options[i] === "function") { - // when config is a function, pass the env from args to the config function - options[i] = await options[i](argv.env, argv); - } - }), - ); + this.logger.raw(command.helpInformation()); + } + } else if (isHelpCommandSyntax) { + let isCommandSpecified = false; + let commandName = getCommandName(buildCommandOptions.name); + let optionName; + + if (options.length === 1) { + optionName = options[0]; + } else if (options.length === 2) { + isCommandSpecified = true; + commandName = options[0]; + optionName = options[1]; + + if (isOption(commandName)) { + outputIncorrectUsageOfHelp(); + } } else { - if (typeof options.then === "function") { - options = await options; - } - - // `Promise` may return `Function` - if (typeof options === "function") { - // when config is a function, pass the env from args to the config function - options = await options(argv.env, argv); - } + outputIncorrectUsageOfHelp(); } - const isObject = (value) => typeof value === "object" && value !== null; + await loadCommandByName(commandName); - if (!isObject(options) && !Array.isArray(options)) { - this.logger.error(`Invalid configuration in '${configPath}'`); + const command = isGlobalOption(optionName) ? program : findCommandByName(commandName); - process.exit(2); + if (!command) { + this.logger.error(`Can't find and load command '${commandName}'`); + this.logger.error("Run 'webpack --help' to see available commands and options"); + process.exit(2); } - return { options, path: configPath }; - } + const option = command.options.find( + (option) => option.short === optionName || option.long === optionName, + ); - async resolveConfig(options) { - const config = { options: {}, path: new WeakMap() }; + if (!option) { + this.logger.error(`Unknown option '${optionName}'`); + this.logger.error("Run 'webpack --help' to see available commands and options"); + process.exit(2); + } - if (options.config && options.config.length > 0) { - const loadedConfigs = await Promise.all( - options.config.map((configPath) => - this.loadConfig(path.resolve(configPath), options.argv), - ), - ); + const nameOutput = + option.flags.replace(/^.+[[<]/, "").replace(/(\.\.\.)?[\]>].*$/, "") + + (option.variadic === true ? "..." : ""); + const value = option.required + ? "<" + nameOutput + ">" + : option.optional + ? "[" + nameOutput + "]" + : ""; + + this.logger.raw( + `${bold("Usage")}: webpack${isCommandSpecified ? ` ${commandName}` : ""} ${option.long}${ + value ? ` ${value}` : "" + }`, + ); - config.options = []; - - loadedConfigs.forEach((loadedConfig) => { - const isArray = Array.isArray(loadedConfig.options); - - // TODO we should run webpack multiple times when the `--config` options have multiple values with `--merge`, need to solve for the next major release - if (config.options.length === 0) { - config.options = loadedConfig.options; - } else { - if (!Array.isArray(config.options)) { - config.options = [config.options]; - } - - if (isArray) { - loadedConfig.options.forEach((item) => { - config.options.push(item); - }); - } else { - config.options.push(loadedConfig.options); - } - } - - if (isArray) { - loadedConfig.options.forEach((options) => { - config.path.set(options, loadedConfig.path); - }); - } else { - config.path.set(loadedConfig.options, loadedConfig.path); - } - }); + if (option.short) { + this.logger.raw( + `${bold("Short:")} webpack${isCommandSpecified ? ` ${commandName}` : ""} ${ + option.short + }${value ? ` ${value}` : ""}`, + ); + } - config.options = config.options.length === 1 ? config.options[0] : config.options; - } else { - const { interpret } = this.utils; - - // Order defines the priority, in decreasing order - const defaultConfigFiles = [ - "webpack.config", - ".webpack/webpack.config", - ".webpack/webpackfile", - ] - .map((filename) => - // Since .cjs is not available on interpret side add it manually to default config extension list - [...Object.keys(interpret.extensions), ".cjs"].map((ext) => ({ - path: path.resolve(filename + ext), - ext: ext, - module: interpret.extensions[ext], - })), - ) - .reduce((accumulator, currentValue) => accumulator.concat(currentValue), []); - - let foundDefaultConfigFile; - - for (const defaultConfigFile of defaultConfigFiles) { - if (!fs.existsSync(defaultConfigFile.path)) { - continue; - } - - foundDefaultConfigFile = defaultConfigFile; - break; - } + if (option.description) { + this.logger.raw(`${bold("Description:")} ${option.description}`); + } - if (foundDefaultConfigFile) { - const loadedConfig = await this.loadConfig( - foundDefaultConfigFile.path, - options.argv, - ); + if (!option.negate && option.defaultValue) { + this.logger.raw(`${bold("Default value:")} ${JSON.stringify(option.defaultValue)}`); + } - config.options = loadedConfig.options; + const flag = this.getBuiltInOptions().find((flag) => option.long === `--${flag.name}`); - if (Array.isArray(config.options)) { - config.options.forEach((item) => { - config.path.set(item, loadedConfig.path); - }); - } else { - config.path.set(loadedConfig.options, loadedConfig.path); - } + if (flag && flag.configs) { + const possibleValues = flag.configs.reduce((accumulator, currentValue) => { + if (currentValue.values) { + return accumulator.concat(currentValue.values); + } else { + return accumulator; } + }, []); + + if (possibleValues.length > 0) { + this.logger.raw( + `${bold("Possible values:")} ${JSON.stringify(possibleValues.join(" | "))}`, + ); + } } - if (options.configName) { - const notFoundConfigNames = []; + this.logger.raw(""); + + // TODO implement this after refactor cli arguments + // logger.raw('Documentation: https://webpack.js.org/option/name/'); + } else { + outputIncorrectUsageOfHelp(); + } + + this.logger.raw( + "To see list of all supported commands and options run 'webpack --help=verbose'.\n", + ); + this.logger.raw(`${bold("Webpack documentation:")} https://webpack.js.org/.`); + this.logger.raw(`${bold("CLI documentation:")} https://webpack.js.org/api/cli/.`); + this.logger.raw(`${bold("Made with ♥ by the webpack team")}.`); + process.exit(0); + }; + this.program.helpOption(false); + this.program.addHelpCommand(false); + this.program.option("-h, --help [verbose]", "Display help for commands and options."); + + let isInternalActionCalled = false; + + // Default action + this.program.usage("[options]"); + this.program.allowUnknownOption(true); + this.program.action(async (options, program) => { + if (!isInternalActionCalled) { + isInternalActionCalled = true; + } else { + this.logger.error("No commands found to run"); + process.exit(2); + } + + // Command and options + const { operands, unknown } = this.program.parseOptions(program.args); + const defaultCommandToRun = getCommandName(buildCommandOptions.name); + const hasOperand = typeof operands[0] !== "undefined"; + const operand = hasOperand ? operands[0] : defaultCommandToRun; + const isHelpOption = typeof options.help !== "undefined"; + const isHelpCommandSyntax = isCommand(operand, helpCommandOptions); + + if (isHelpOption || isHelpCommandSyntax) { + let isVerbose = false; + + if (isHelpOption) { + if (typeof options.help === "string") { + if (options.help !== "verbose") { + this.logger.error("Unknown value for '--help' option, please use '--help=verbose'"); + process.exit(2); + } - config.options = options.configName.map((configName) => { - let found; + isVerbose = true; + } + } - if (Array.isArray(config.options)) { - found = config.options.find((options) => options.name === configName); - } else { - found = config.options.name === configName ? config.options : undefined; - } + this.program.forHelp = true; + + const optionsForHelp = [] + .concat(isHelpOption && hasOperand ? [operand] : []) + // Syntax `webpack help [command]` + .concat(operands.slice(1)) + // Syntax `webpack help [option]` + .concat(unknown) + .concat( + isHelpCommandSyntax && typeof options.color !== "undefined" + ? [options.color ? "--color" : "--no-color"] + : [], + ) + .concat( + isHelpCommandSyntax && typeof options.version !== "undefined" ? ["--version"] : [], + ); + + await outputHelp(optionsForHelp, isVerbose, isHelpCommandSyntax, program); + } + + const isVersionOption = typeof options.version !== "undefined"; + const isVersionCommandSyntax = isCommand(operand, versionCommandOptions); + + if (isVersionOption || isVersionCommandSyntax) { + const optionsForVersion = [] + .concat(isVersionOption ? [operand] : []) + .concat(operands.slice(1)) + .concat(unknown); + + await outputVersion(optionsForVersion, program); + } + + let commandToRun = operand; + let commandOperands = operands.slice(1); + + if (isKnownCommand(commandToRun)) { + await loadCommandByName(commandToRun, true); + } else { + const isEntrySyntax = fs.existsSync(operand); + + if (isEntrySyntax) { + commandToRun = defaultCommandToRun; + commandOperands = operands; + + await loadCommandByName(commandToRun); + } else { + this.logger.error(`Unknown command or entry '${operand}'`); - if (!found) { - notFoundConfigNames.push(configName); - } + const found = knownCommands.find( + (commandOptions) => + this.utils.levenshtein.distance(operand, getCommandName(commandOptions.name)) < 3, + ); - return found; - }); + if (found) { + this.logger.error( + `Did you mean '${getCommandName(found.name)}' (alias '${ + Array.isArray(found.alias) ? found.alias.join(", ") : found.alias + }')?`, + ); + } - if (notFoundConfigNames.length > 0) { - this.logger.error( - notFoundConfigNames - .map( - (configName) => - `Configuration with the name "${configName}" was not found.`, - ) - .join(" "), - ); - process.exit(2); - } + this.logger.error("Run 'webpack --help' to see available commands and options"); + process.exit(2); + } + } + + await this.program.parseAsync([commandToRun, ...commandOperands, ...unknown], { + from: "user", + }); + }); + + await this.program.parseAsync(args, parseOptions); + } + + async loadConfig(configPath, argv = {}) { + const { interpret } = this.utils; + const ext = path.extname(configPath); + const interpreted = Object.keys(interpret.jsVariants).find((variant) => variant === ext); + + if (interpreted) { + const { rechoir } = this.utils; + + try { + rechoir.prepare(interpret.extensions, configPath); + } catch (error) { + if (error.failures) { + this.logger.error(`Unable load '${configPath}'`); + this.logger.error(error.message); + + error.failures.forEach((failure) => { + this.logger.error(failure.error.message); + }); + this.logger.error("Please install one of them"); + process.exit(2); } - if (options.merge) { - const merge = await this.tryRequireThenImport("webpack-merge"); - - // we can only merge when there are multiple configurations - // either by passing multiple configs by flags or passing a - // single config exporting an array - if (!Array.isArray(config.options) || config.options.length <= 1) { - this.logger.error("At least two configurations are required for merge."); - process.exit(2); - } - - const mergedConfigPaths = []; + this.logger.error(error); + process.exit(2); + } + } - config.options = config.options.reduce((accumulator, options) => { - const configPath = config.path.get(options); - const mergedOptions = merge(accumulator, options); + let options; - mergedConfigPaths.push(configPath); + try { + options = await this.tryRequireThenImport(configPath, false); + } catch (error) { + this.logger.error(`Failed to load '${configPath}' config`); - return mergedOptions; - }, {}); - config.path.set(config.options, mergedConfigPaths); - } + if (this.isValidationError(error)) { + this.logger.error(error.message); + } else { + this.logger.error(error); + } - return config; + process.exit(2); } - runFunctionOnOptions(options, fn) { - if (Array.isArray(options)) { - for (let item of options) { - item = fn(item); - } - } else { - options = fn(options); - } - - return options; + if (Array.isArray(options)) { + await Promise.all( + options.map(async (_, i) => { + if (typeof options[i].then === "function") { + options[i] = await options[i]; + } + + // `Promise` may return `Function` + if (typeof options[i] === "function") { + // when config is a function, pass the env from args to the config function + options[i] = await options[i](argv.env, argv); + } + }), + ); + } else { + if (typeof options.then === "function") { + options = await options; + } + + // `Promise` may return `Function` + if (typeof options === "function") { + // when config is a function, pass the env from args to the config function + options = await options(argv.env, argv); + } } - // TODO refactor - async applyOptions(config, options) { - if (options.analyze) { - if (!this.utils.packageExists("webpack-bundle-analyzer")) { - const { promptInstallation, colors } = this.utils; - - await promptInstallation("webpack-bundle-analyzer", () => { - this.logger.error( - `It looks like ${colors.yellow( - "webpack-bundle-analyzer", - )} is not installed.`, - ); - }); - - this.logger.success( - `${colors.yellow("webpack-bundle-analyzer")} was installed successfully.`, - ); - } - } + const isObject = (value) => typeof value === "object" && value !== null; - if (typeof options.progress === "string" && options.progress !== "profile") { - this.logger.error( - `'${options.progress}' is an invalid value for the --progress option. Only 'profile' is allowed.`, - ); - process.exit(2); - } + if (!isObject(options) && !Array.isArray(options)) { + this.logger.error(`Invalid configuration in '${configPath}'`); - if (typeof options.hot === "string" && options.hot !== "only") { - this.logger.error( - `'${options.hot}' is an invalid value for the --hot option. Use 'only' instead.`, - ); - process.exit(2); - } + process.exit(2); + } - const outputHints = (configOptions) => { - if ( - configOptions.watch && - options.argv && - options.argv.env && - (options.argv.env["WEBPACK_WATCH"] || options.argv.env["WEBPACK_SERVE"]) - ) { - this.logger.warn( - `No need to use the '${ - options.argv.env["WEBPACK_WATCH"] ? "watch" : "serve" - }' command together with '{ watch: true }' configuration, it does not make sense.`, - ); + return { options, path: configPath }; + } - if (options.argv.env["WEBPACK_SERVE"]) { - configOptions.watch = false; - } - } + async resolveConfig(options) { + const config = { options: {}, path: new WeakMap() }; - return configOptions; - }; + if (options.config && options.config.length > 0) { + const loadedConfigs = await Promise.all( + options.config.map((configPath) => this.loadConfig(path.resolve(configPath), options.argv)), + ); - this.runFunctionOnOptions(config.options, outputHints); + config.options = []; - if (this.webpack.cli) { - const processArguments = (configOptions) => { - const args = this.getBuiltInOptions() - .filter((flag) => flag.group === "core") - .reduce((accumulator, flag) => { - accumulator[flag.name] = flag; + loadedConfigs.forEach((loadedConfig) => { + const isArray = Array.isArray(loadedConfig.options); - return accumulator; - }, {}); + // TODO we should run webpack multiple times when the `--config` options have multiple values with `--merge`, need to solve for the next major release + if (config.options.length === 0) { + config.options = loadedConfig.options; + } else { + if (!Array.isArray(config.options)) { + config.options = [config.options]; + } - const values = Object.keys(options).reduce((accumulator, name) => { - if (name === "argv") { - return accumulator; - } + if (isArray) { + loadedConfig.options.forEach((item) => { + config.options.push(item); + }); + } else { + config.options.push(loadedConfig.options); + } + } - const kebabName = this.utils.toKebabCase(name); + if (isArray) { + loadedConfig.options.forEach((options) => { + config.path.set(options, loadedConfig.path); + }); + } else { + config.path.set(loadedConfig.options, loadedConfig.path); + } + }); + + config.options = config.options.length === 1 ? config.options[0] : config.options; + } else { + const { interpret } = this.utils; + + // Order defines the priority, in decreasing order + const defaultConfigFiles = [ + "webpack.config", + ".webpack/webpack.config", + ".webpack/webpackfile", + ] + .map((filename) => + // Since .cjs is not available on interpret side add it manually to default config extension list + [...Object.keys(interpret.extensions), ".cjs"].map((ext) => ({ + path: path.resolve(filename + ext), + ext: ext, + module: interpret.extensions[ext], + })), + ) + .reduce((accumulator, currentValue) => accumulator.concat(currentValue), []); + + let foundDefaultConfigFile; + + for (const defaultConfigFile of defaultConfigFiles) { + if (!fs.existsSync(defaultConfigFile.path)) { + continue; + } - if (args[kebabName]) { - accumulator[kebabName] = options[name]; - } + foundDefaultConfigFile = defaultConfigFile; + break; + } - return accumulator; - }, {}); + if (foundDefaultConfigFile) { + const loadedConfig = await this.loadConfig(foundDefaultConfigFile.path, options.argv); - const problems = this.webpack.cli.processArguments(args, configOptions, values); + config.options = loadedConfig.options; - if (problems) { - const groupBy = (xs, key) => { - return xs.reduce((rv, x) => { - (rv[x[key]] = rv[x[key]] || []).push(x); + if (Array.isArray(config.options)) { + config.options.forEach((item) => { + config.path.set(item, loadedConfig.path); + }); + } else { + config.path.set(loadedConfig.options, loadedConfig.path); + } + } + } - return rv; - }, {}); - }; - const problemsByPath = groupBy(problems, "path"); + if (options.configName) { + const notFoundConfigNames = []; - for (const path in problemsByPath) { - const problems = problemsByPath[path]; + config.options = options.configName.map((configName) => { + let found; - problems.forEach((problem) => { - this.logger.error( - `${this.utils.capitalizeFirstLetter( - problem.type.replace(/-/g, " "), - )}${problem.value ? ` '${problem.value}'` : ""} for the '--${ - problem.argument - }' option${problem.index ? ` by index '${problem.index}'` : ""}`, - ); + if (Array.isArray(config.options)) { + found = config.options.find((options) => options.name === configName); + } else { + found = config.options.name === configName ? config.options : undefined; + } - if (problem.expected) { - this.logger.error(`Expected: '${problem.expected}'`); - } - }); - } + if (!found) { + notFoundConfigNames.push(configName); + } - process.exit(2); - } + return found; + }); - return configOptions; - }; + if (notFoundConfigNames.length > 0) { + this.logger.error( + notFoundConfigNames + .map((configName) => `Configuration with the name "${configName}" was not found.`) + .join(" "), + ); + process.exit(2); + } + } - this.runFunctionOnOptions(config.options, processArguments); - - const setupDefaultOptions = (configOptions) => { - // No need to run for webpack@4 - if (configOptions.cache && configOptions.cache.type === "filesystem") { - const configPath = config.path.get(configOptions); - - if (configPath) { - if (!configOptions.cache.buildDependencies) { - configOptions.cache.buildDependencies = {}; - } - - if (!configOptions.cache.buildDependencies.defaultConfig) { - configOptions.cache.buildDependencies.defaultConfig = []; - } - - if (Array.isArray(configPath)) { - configPath.forEach((item) => { - configOptions.cache.buildDependencies.defaultConfig.push(item); - }); - } else { - configOptions.cache.buildDependencies.defaultConfig.push(configPath); - } - } - } - - return configOptions; - }; + if (options.merge) { + const merge = await this.tryRequireThenImport("webpack-merge"); - this.runFunctionOnOptions(config.options, setupDefaultOptions); - } + // we can only merge when there are multiple configurations + // either by passing multiple configs by flags or passing a + // single config exporting an array + if (!Array.isArray(config.options) || config.options.length <= 1) { + this.logger.error("At least two configurations are required for merge."); + process.exit(2); + } - // Logic for webpack@4 - // TODO remove after drop webpack@4 - const processLegacyArguments = (configOptions) => { - if (options.entry) { - configOptions.entry = options.entry; - } + const mergedConfigPaths = []; - if (options.outputPath) { - configOptions.output = { - ...configOptions.output, - ...{ path: path.resolve(options.outputPath) }, - }; - } + config.options = config.options.reduce((accumulator, options) => { + const configPath = config.path.get(options); + const mergedOptions = merge(accumulator, options); - if (options.target) { - configOptions.target = options.target; - } + mergedConfigPaths.push(configPath); - if (typeof options.devtool !== "undefined") { - configOptions.devtool = options.devtool; - } + return mergedOptions; + }, {}); + config.path.set(config.options, mergedConfigPaths); + } - if (options.mode) { - configOptions.mode = options.mode; - } else if ( - !configOptions.mode && - process.env && - process.env.NODE_ENV && - (process.env.NODE_ENV === "development" || - process.env.NODE_ENV === "production" || - process.env.NODE_ENV === "none") - ) { - configOptions.mode = process.env.NODE_ENV; - } + return config; + } - if (options.name) { - configOptions.name = options.name; - } + runFunctionOnOptions(options, fn) { + if (Array.isArray(options)) { + for (let item of options) { + item = fn(item); + } + } else { + options = fn(options); + } - if (typeof options.stats !== "undefined") { - configOptions.stats = options.stats; - } + return options; + } - if (typeof options.watch !== "undefined") { - configOptions.watch = options.watch; - } + // TODO refactor + async applyOptions(config, options) { + if (options.analyze) { + if (!this.utils.packageExists("webpack-bundle-analyzer")) { + const { promptInstallation, colors } = this.utils; - if (typeof options.watchOptionsStdin !== "undefined") { - configOptions.watchOptions = { - ...configOptions.watchOptions, - ...{ stdin: options.watchOptionsStdin }, - }; - } + await promptInstallation("webpack-bundle-analyzer", () => { + this.logger.error( + `It looks like ${colors.yellow("webpack-bundle-analyzer")} is not installed.`, + ); + }); - return configOptions; - }; + this.logger.success( + `${colors.yellow("webpack-bundle-analyzer")} was installed successfully.`, + ); + } + } - this.runFunctionOnOptions(config.options, processLegacyArguments); - - // Apply `stats` and `stats.colors` options - const applyStatsOption = (configOptions) => { - // TODO remove after drop webpack@4 - const statsForWebpack4 = this.webpack.Stats && this.webpack.Stats.presetToOptions; - - if (statsForWebpack4) { - if (typeof configOptions.stats === "undefined") { - configOptions.stats = {}; - } else if ( - typeof configOptions.stats === "boolean" || - typeof configOptions.stats === "string" - ) { - if ( - typeof configOptions.stats === "string" && - configOptions.stats !== "none" && - configOptions.stats !== "verbose" && - configOptions.stats !== "detailed" && - configOptions.stats !== "minimal" && - configOptions.stats !== "errors-only" && - configOptions.stats !== "errors-warnings" - ) { - return configOptions; - } - - configOptions.stats = this.webpack.Stats.presetToOptions(configOptions.stats); - } - } else { - if (typeof configOptions.stats === "undefined") { - configOptions.stats = { preset: "normal" }; - } else if (typeof configOptions.stats === "boolean") { - configOptions.stats = configOptions.stats - ? { preset: "normal" } - : { preset: "none" }; - } else if (typeof configOptions.stats === "string") { - configOptions.stats = { preset: configOptions.stats }; - } - } + if (typeof options.progress === "string" && options.progress !== "profile") { + this.logger.error( + `'${options.progress}' is an invalid value for the --progress option. Only 'profile' is allowed.`, + ); + process.exit(2); + } - let colors; + if (typeof options.hot === "string" && options.hot !== "only") { + this.logger.error( + `'${options.hot}' is an invalid value for the --hot option. Use 'only' instead.`, + ); + process.exit(2); + } - // From arguments - if (typeof this.utils.colors.options.changed !== "undefined") { - colors = Boolean(this.utils.colors.options.enabled); - } - // From stats - else if (typeof configOptions.stats.colors !== "undefined") { - colors = configOptions.stats.colors; - } - // Default - else { - colors = Boolean(this.utils.colors.options.enabled); - } + const outputHints = (configOptions) => { + if ( + configOptions.watch && + options.argv && + options.argv.env && + (options.argv.env["WEBPACK_WATCH"] || options.argv.env["WEBPACK_SERVE"]) + ) { + this.logger.warn( + `No need to use the '${ + options.argv.env["WEBPACK_WATCH"] ? "watch" : "serve" + }' command together with '{ watch: true }' configuration, it does not make sense.`, + ); - configOptions.stats.colors = colors; + if (options.argv.env["WEBPACK_SERVE"]) { + configOptions.watch = false; + } + } - return configOptions; - }; + return configOptions; + }; - this.runFunctionOnOptions(config.options, applyStatsOption); + this.runFunctionOnOptions(config.options, outputHints); - return config; - } + if (this.webpack.cli) { + const processArguments = (configOptions) => { + const args = this.getBuiltInOptions() + .filter((flag) => flag.group === "core") + .reduce((accumulator, flag) => { + accumulator[flag.name] = flag; - async applyCLIPlugin(config, cliOptions) { - const CLIPlugin = await this.tryRequireThenImport("./plugins/CLIPlugin"); + return accumulator; + }, {}); - const addCLIPlugin = (options) => { - if (!options.plugins) { - options.plugins = []; - } + const values = Object.keys(options).reduce((accumulator, name) => { + if (name === "argv") { + return accumulator; + } - options.plugins.unshift( - new CLIPlugin({ - configPath: config.path.get(options), - helpfulOutput: !cliOptions.json, - hot: cliOptions.hot, - progress: cliOptions.progress, - prefetch: cliOptions.prefetch, - analyze: cliOptions.analyze, - }), - ); + const kebabName = this.utils.toKebabCase(name); - return options; - }; + if (args[kebabName]) { + accumulator[kebabName] = options[name]; + } - this.runFunctionOnOptions(config.options, addCLIPlugin); + return accumulator; + }, {}); - return config; - } + const problems = this.webpack.cli.processArguments(args, configOptions, values); - needWatchStdin(compiler) { - if (compiler.compilers) { - return compiler.compilers.some( - (compiler) => compiler.options.watchOptions && compiler.options.watchOptions.stdin, - ); - } + if (problems) { + const groupBy = (xs, key) => { + return xs.reduce((rv, x) => { + (rv[x[key]] = rv[x[key]] || []).push(x); - return compiler.options.watchOptions && compiler.options.watchOptions.stdin; - } + return rv; + }, {}); + }; + const problemsByPath = groupBy(problems, "path"); + + for (const path in problemsByPath) { + const problems = problemsByPath[path]; + + problems.forEach((problem) => { + this.logger.error( + `${this.utils.capitalizeFirstLetter(problem.type.replace(/-/g, " "))}${ + problem.value ? ` '${problem.value}'` : "" + } for the '--${problem.argument}' option${ + problem.index ? ` by index '${problem.index}'` : "" + }`, + ); + + if (problem.expected) { + this.logger.error(`Expected: '${problem.expected}'`); + } + }); + } - isValidationError(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 = - this.webpack.ValidationError || this.webpack.WebpackOptionsValidationError; + process.exit(2); + } - return error instanceof ValidationError || error.name === "ValidationError"; - } + return configOptions; + }; - async createCompiler(options, callback) { - this.applyNodeEnv(options); + this.runFunctionOnOptions(config.options, processArguments); - let config = await this.resolveConfig(options); + const setupDefaultOptions = (configOptions) => { + // No need to run for webpack@4 + if (configOptions.cache && configOptions.cache.type === "filesystem") { + const configPath = config.path.get(configOptions); - config = await this.applyOptions(config, options); - config = await this.applyCLIPlugin(config, options); + if (configPath) { + if (!configOptions.cache.buildDependencies) { + configOptions.cache.buildDependencies = {}; + } - let compiler; + if (!configOptions.cache.buildDependencies.defaultConfig) { + configOptions.cache.buildDependencies.defaultConfig = []; + } - try { - compiler = this.webpack( - config.options, - callback - ? (error, stats) => { - if (error && this.isValidationError(error)) { - this.logger.error(error.message); - process.exit(2); - } - - callback(error, stats); - } - : callback, - ); - } catch (error) { - if (this.isValidationError(error)) { - this.logger.error(error.message); + if (Array.isArray(configPath)) { + configPath.forEach((item) => { + configOptions.cache.buildDependencies.defaultConfig.push(item); + }); } else { - this.logger.error(error); + configOptions.cache.buildDependencies.defaultConfig.push(configPath); } - - process.exit(2); + } } - // TODO webpack@4 return Watching and MultiWatching instead Compiler and MultiCompiler, remove this after drop webpack@4 - if (compiler && compiler.compiler) { - compiler = compiler.compiler; - } + return configOptions; + }; - return compiler; + this.runFunctionOnOptions(config.options, setupDefaultOptions); } - async runWebpack(options, isWatchCommand) { - // eslint-disable-next-line prefer-const - let compiler; - let createJsonStringifyStream; - - if (options.json) { - const jsonExt = await this.tryRequireThenImport("@discoveryjs/json-ext"); + // Logic for webpack@4 + // TODO remove after drop webpack@4 + const processLegacyArguments = (configOptions) => { + if (options.entry) { + configOptions.entry = options.entry; + } + + if (options.outputPath) { + configOptions.output = { + ...configOptions.output, + ...{ path: path.resolve(options.outputPath) }, + }; + } + + if (options.target) { + configOptions.target = options.target; + } + + if (typeof options.devtool !== "undefined") { + configOptions.devtool = options.devtool; + } + + if (options.mode) { + configOptions.mode = options.mode; + } else if ( + !configOptions.mode && + process.env && + process.env.NODE_ENV && + (process.env.NODE_ENV === "development" || + process.env.NODE_ENV === "production" || + process.env.NODE_ENV === "none") + ) { + configOptions.mode = process.env.NODE_ENV; + } + + if (options.name) { + configOptions.name = options.name; + } + + if (typeof options.stats !== "undefined") { + configOptions.stats = options.stats; + } + + if (typeof options.watch !== "undefined") { + configOptions.watch = options.watch; + } + + if (typeof options.watchOptionsStdin !== "undefined") { + configOptions.watchOptions = { + ...configOptions.watchOptions, + ...{ stdin: options.watchOptionsStdin }, + }; + } + + return configOptions; + }; + + this.runFunctionOnOptions(config.options, processLegacyArguments); + + // Apply `stats` and `stats.colors` options + const applyStatsOption = (configOptions) => { + // TODO remove after drop webpack@4 + const statsForWebpack4 = this.webpack.Stats && this.webpack.Stats.presetToOptions; + + if (statsForWebpack4) { + if (typeof configOptions.stats === "undefined") { + configOptions.stats = {}; + } else if ( + typeof configOptions.stats === "boolean" || + typeof configOptions.stats === "string" + ) { + if ( + typeof configOptions.stats === "string" && + configOptions.stats !== "none" && + configOptions.stats !== "verbose" && + configOptions.stats !== "detailed" && + configOptions.stats !== "minimal" && + configOptions.stats !== "errors-only" && + configOptions.stats !== "errors-warnings" + ) { + return configOptions; + } - createJsonStringifyStream = jsonExt.stringifyStream; + configOptions.stats = this.webpack.Stats.presetToOptions(configOptions.stats); } + } else { + if (typeof configOptions.stats === "undefined") { + configOptions.stats = { preset: "normal" }; + } else if (typeof configOptions.stats === "boolean") { + configOptions.stats = configOptions.stats ? { preset: "normal" } : { preset: "none" }; + } else if (typeof configOptions.stats === "string") { + configOptions.stats = { preset: configOptions.stats }; + } + } + + let colors; + + // From arguments + if (typeof this.utils.colors.options.changed !== "undefined") { + colors = Boolean(this.utils.colors.options.enabled); + } + // From stats + else if (typeof configOptions.stats.colors !== "undefined") { + colors = configOptions.stats.colors; + } + // Default + else { + colors = Boolean(this.utils.colors.options.enabled); + } + + configOptions.stats.colors = colors; + + return configOptions; + }; + + this.runFunctionOnOptions(config.options, applyStatsOption); + + return config; + } + + async applyCLIPlugin(config, cliOptions) { + const CLIPlugin = await this.tryRequireThenImport("./plugins/CLIPlugin"); + + const addCLIPlugin = (options) => { + if (!options.plugins) { + options.plugins = []; + } + + options.plugins.unshift( + new CLIPlugin({ + configPath: config.path.get(options), + helpfulOutput: !cliOptions.json, + hot: cliOptions.hot, + progress: cliOptions.progress, + prefetch: cliOptions.prefetch, + analyze: cliOptions.analyze, + }), + ); + + return options; + }; + + this.runFunctionOnOptions(config.options, addCLIPlugin); + + return config; + } + + needWatchStdin(compiler) { + if (compiler.compilers) { + return compiler.compilers.some( + (compiler) => compiler.options.watchOptions && compiler.options.watchOptions.stdin, + ); + } - const callback = (error, stats) => { - if (error) { - this.logger.error(error); + return compiler.options.watchOptions && compiler.options.watchOptions.stdin; + } + + isValidationError(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 = + this.webpack.ValidationError || this.webpack.WebpackOptionsValidationError; + + return error instanceof ValidationError || error.name === "ValidationError"; + } + + async createCompiler(options, callback) { + this.applyNodeEnv(options); + + let config = await this.resolveConfig(options); + + config = await this.applyOptions(config, options); + config = await this.applyCLIPlugin(config, options); + + let compiler; + + try { + compiler = this.webpack( + config.options, + callback + ? (error, stats) => { + if (error && this.isValidationError(error)) { + this.logger.error(error.message); process.exit(2); - } + } - if (stats.hasErrors()) { - process.exitCode = 1; + callback(error, stats); } + : callback, + ); + } catch (error) { + if (this.isValidationError(error)) { + this.logger.error(error.message); + } else { + this.logger.error(error); + } + + process.exit(2); + } - if (!compiler) { - return; - } + // TODO webpack@4 return Watching and MultiWatching instead Compiler and MultiCompiler, remove this after drop webpack@4 + if (compiler && compiler.compiler) { + compiler = compiler.compiler; + } - const statsOptions = compiler.compilers - ? { - children: compiler.compilers.map((compiler) => - compiler.options ? compiler.options.stats : undefined, - ), - } - : compiler.options - ? compiler.options.stats - : undefined; + return compiler; + } - // TODO webpack@4 doesn't support `{ children: [{ colors: true }, { colors: true }] }` for stats - const statsForWebpack4 = this.webpack.Stats && this.webpack.Stats.presetToOptions; + async runWebpack(options, isWatchCommand) { + // eslint-disable-next-line prefer-const + let compiler; + let createJsonStringifyStream; - if (compiler.compilers && statsForWebpack4) { - statsOptions.colors = statsOptions.children.some((child) => child.colors); - } + if (options.json) { + const jsonExt = await this.tryRequireThenImport("@discoveryjs/json-ext"); - if (options.json && createJsonStringifyStream) { - const handleWriteError = (error) => { - this.logger.error(error); - process.exit(2); - }; - - if (options.json === true) { - createJsonStringifyStream(stats.toJson(statsOptions)) - .on("error", handleWriteError) - .pipe(process.stdout) - .on("error", handleWriteError) - .on("close", () => process.stdout.write("\n")); - } else { - createJsonStringifyStream(stats.toJson(statsOptions)) - .on("error", handleWriteError) - .pipe(fs.createWriteStream(options.json)) - .on("error", handleWriteError) - // Use stderr to logging - .on("close", () => - process.stderr.write( - `[webpack-cli] ${this.utils.colors.green( - `stats are successfully stored as json to ${options.json}`, - )}\n`, - ), - ); - } - } else { - const printedStats = stats.toString(statsOptions); + createJsonStringifyStream = jsonExt.stringifyStream; + } - // Avoid extra empty line when `stats: 'none'` - if (printedStats) { - this.logger.raw(printedStats); - } - } + const callback = (error, stats) => { + if (error) { + this.logger.error(error); + process.exit(2); + } + + if (stats.hasErrors()) { + process.exitCode = 1; + } + + if (!compiler) { + return; + } + + const statsOptions = compiler.compilers + ? { + children: compiler.compilers.map((compiler) => + compiler.options ? compiler.options.stats : undefined, + ), + } + : compiler.options + ? compiler.options.stats + : undefined; + + // TODO webpack@4 doesn't support `{ children: [{ colors: true }, { colors: true }] }` for stats + const statsForWebpack4 = this.webpack.Stats && this.webpack.Stats.presetToOptions; + + if (compiler.compilers && statsForWebpack4) { + statsOptions.colors = statsOptions.children.some((child) => child.colors); + } + + if (options.json && createJsonStringifyStream) { + const handleWriteError = (error) => { + this.logger.error(error); + process.exit(2); }; - const env = - isWatchCommand || options.watch - ? { WEBPACK_WATCH: true, ...options.env } - : { WEBPACK_BUNDLE: true, WEBPACK_BUILD: true, ...options.env }; - - options.argv = { ...options, env }; + if (options.json === true) { + createJsonStringifyStream(stats.toJson(statsOptions)) + .on("error", handleWriteError) + .pipe(process.stdout) + .on("error", handleWriteError) + .on("close", () => process.stdout.write("\n")); + } else { + createJsonStringifyStream(stats.toJson(statsOptions)) + .on("error", handleWriteError) + .pipe(fs.createWriteStream(options.json)) + .on("error", handleWriteError) + // Use stderr to logging + .on("close", () => + process.stderr.write( + `[webpack-cli] ${this.utils.colors.green( + `stats are successfully stored as json to ${options.json}`, + )}\n`, + ), + ); + } + } else { + const printedStats = stats.toString(statsOptions); - if (isWatchCommand) { - options.watch = true; + // Avoid extra empty line when `stats: 'none'` + if (printedStats) { + this.logger.raw(printedStats); } + } + }; - compiler = await this.createCompiler(options, callback); + const env = + isWatchCommand || options.watch + ? { WEBPACK_WATCH: true, ...options.env } + : { WEBPACK_BUNDLE: true, WEBPACK_BUILD: true, ...options.env }; - if (!compiler) { - return; - } + options.argv = { ...options, env }; - const isWatch = (compiler) => - compiler.compilers - ? compiler.compilers.some((compiler) => compiler.options.watch) - : compiler.options.watch; + if (isWatchCommand) { + options.watch = true; + } - if (isWatch(compiler) && this.needWatchStdin(compiler)) { - process.stdin.on("end", () => { - process.exit(0); - }); - process.stdin.resume(); - } + compiler = await this.createCompiler(options, callback); + + if (!compiler) { + return; + } + + const isWatch = (compiler) => + compiler.compilers + ? compiler.compilers.some((compiler) => compiler.options.watch) + : compiler.options.watch; + + if (isWatch(compiler) && this.needWatchStdin(compiler)) { + process.stdin.on("end", () => { + process.exit(0); + }); + process.stdin.resume(); } + } } module.exports = WebpackCLI; diff --git a/prettier.config.js b/prettier.config.js index a3ca7933373..8bad36cb47f 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -1,4 +1,4 @@ module.exports = { - printWidth: 100, - trailingComma: "all", + printWidth: 100, + trailingComma: "all", }; diff --git a/scripts/cleanupTest.js b/scripts/cleanupTest.js index 9be7a8effdb..0d495c55c12 100644 --- a/scripts/cleanupTest.js +++ b/scripts/cleanupTest.js @@ -4,26 +4,26 @@ const { join } = require("path"); const collectTestFolders = require("./utils"); const outputDirectories = [ - "bin", - "binary", - "dist", - "test", - "test-assets", - "test-plugin", - "test-loader", - "test-cache-path", - "test-locate-cache", - "stats.json", + "bin", + "binary", + "dist", + "test", + "test-assets", + "test-plugin", + "test-loader", + "test-cache-path", + "test-locate-cache", + "stats.json", ]; const folderStrategy = (stats, file) => { - return stats.isDirectory() && outputDirectories.includes(file); + return stats.isDirectory() && outputDirectories.includes(file); }; const cleanupOutputDirs = () => { - for (const outputFolder of collectTestFolders(folderStrategy)) { - outputDirectories.forEach((dir) => rimraf.sync(join(outputFolder, dir))); - } + for (const outputFolder of collectTestFolders(folderStrategy)) { + outputDirectories.forEach((dir) => rimraf.sync(join(outputFolder, dir))); + } }; module.exports = cleanupOutputDirs; diff --git a/scripts/prepareSuite.js b/scripts/prepareSuite.js index 6ffb4b59562..45102e55145 100644 --- a/scripts/prepareSuite.js +++ b/scripts/prepareSuite.js @@ -7,22 +7,22 @@ const collectTestFolders = require("./utils"); const PACKAGE = "package.json"; const getFoldersWithPackage = (stats, file) => { - return stats.isFile() && file === PACKAGE; + return stats.isFile() && file === PACKAGE; }; (async () => { - try { - const folders = collectTestFolders(getFoldersWithPackage); - for (const folder of folders) { - await execa("yarn", { - cwd: folder, - stdio: "inherit", - }); - } - console.log(green(" Successfully prepared the test suite ")); - } catch (e) { - console.error(red(" Unable to prepare the test suite ")); - console.error(e.stack); - process.exitCode = 1; + try { + const folders = collectTestFolders(getFoldersWithPackage); + for (const folder of folders) { + await execa("yarn", { + cwd: folder, + stdio: "inherit", + }); } + console.log(green(" Successfully prepared the test suite ")); + } catch (e) { + console.error(red(" Unable to prepare the test suite ")); + console.error(e.stack); + process.exitCode = 1; + } })(); diff --git a/scripts/snapshotResolver.js b/scripts/snapshotResolver.js index 0683c4e30b9..7c203016f4f 100644 --- a/scripts/snapshotResolver.js +++ b/scripts/snapshotResolver.js @@ -12,22 +12,22 @@ const helpCommandTestDir = path.resolve(__dirname, "../test/help"); const serveCommandTestDir = path.resolve(__dirname, "../test/serve"); module.exports = { - resolveSnapshotPath: (testPath) => { - if (testPath.startsWith(helpCommandTestDir) || testPath.startsWith(serveCommandTestDir)) { - return path.join( - path.dirname(testPath), - "__snapshots__", - `${path.basename(testPath)}${snapshotExtensionForServe}`, - ); - } + resolveSnapshotPath: (testPath) => { + if (testPath.startsWith(helpCommandTestDir) || testPath.startsWith(serveCommandTestDir)) { + return path.join( + path.dirname(testPath), + "__snapshots__", + `${path.basename(testPath)}${snapshotExtensionForServe}`, + ); + } - return path.join( - path.dirname(testPath), - "__snapshots__", - `${path.basename(testPath)}${snapshotExtension}`, - ); - }, - resolveTestPath: (snapshotPath) => - snapshotPath.replace(`${path.sep}__snapshots__`, "").slice(0, -snapshotExtension.length), - testPathForConsistencyCheck: path.join("consistency_check", "__tests__", "example.test.js"), + return path.join( + path.dirname(testPath), + "__snapshots__", + `${path.basename(testPath)}${snapshotExtension}`, + ); + }, + resolveTestPath: (snapshotPath) => + snapshotPath.replace(`${path.sep}__snapshots__`, "").slice(0, -snapshotExtension.length), + testPathForConsistencyCheck: path.join("consistency_check", "__tests__", "example.test.js"), }; diff --git a/scripts/updateDocs.js b/scripts/updateDocs.js index 84bdcf12f06..b8f7dce291a 100644 --- a/scripts/updateDocs.js +++ b/scripts/updateDocs.js @@ -8,38 +8,38 @@ const { version } = require("webpack-dev-server/package.json"); const majorDevServerVersion = version.split(".")[0]; try { - const { stdout: cliOptions } = sync( - resolve(__dirname, "../packages/webpack-cli/bin/cli.js"), - ["--help=verbose"], - { - cwd: __dirname, - reject: false, - }, - ); - - // format output for markdown - const mdContent = ["```\n", cliOptions, "\n```"].join(""); - - // create OPTIONS.md - writeFileSync("OPTIONS.md", mdContent); - - // serve options - const { stdout: serveOptions } = sync( - resolve(__dirname, "../packages/webpack-cli/bin/cli.js"), - ["serve", "--help"], - { - cwd: __dirname, - reject: false, - }, - ); - - // format output for markdown - const serveContent = ["```\n", serveOptions, "\n```"].join(""); - - // create SERVE.md - writeFileSync(`SERVE-OPTIONS-v${majorDevServerVersion}.md`, serveContent); - - console.log('Successfully updated "OPTIONS.md" and "SERVE-OPTIONS.md"'); + const { stdout: cliOptions } = sync( + resolve(__dirname, "../packages/webpack-cli/bin/cli.js"), + ["--help=verbose"], + { + cwd: __dirname, + reject: false, + }, + ); + + // format output for markdown + const mdContent = ["```\n", cliOptions, "\n```"].join(""); + + // create OPTIONS.md + writeFileSync("OPTIONS.md", mdContent); + + // serve options + const { stdout: serveOptions } = sync( + resolve(__dirname, "../packages/webpack-cli/bin/cli.js"), + ["serve", "--help"], + { + cwd: __dirname, + reject: false, + }, + ); + + // format output for markdown + const serveContent = ["```\n", serveOptions, "\n```"].join(""); + + // create SERVE.md + writeFileSync(`SERVE-OPTIONS-v${majorDevServerVersion}.md`, serveContent); + + console.log('Successfully updated "OPTIONS.md" and "SERVE-OPTIONS.md"'); } catch (err) { - console.error(err); + console.error(err); } diff --git a/scripts/utils.js b/scripts/utils.js index dcc8770c13b..e805a32159f 100644 --- a/scripts/utils.js +++ b/scripts/utils.js @@ -4,38 +4,38 @@ const path = require("path"); const BASE_DIR = "test/"; function collectTestFolders(strategy) { - const testFolder = path.resolve(path.join(process.cwd(), BASE_DIR)); + const testFolder = path.resolve(path.join(process.cwd(), BASE_DIR)); - return extractFolder(testFolder, [], strategy); + return extractFolder(testFolder, [], strategy); } function extractFolder(folderToRead, folders = [], folderStrategy) { - let files; + let files; - try { - files = fs.readdirSync(folderToRead); - } catch (error) { - return []; - } + try { + files = fs.readdirSync(folderToRead); + } catch (error) { + return []; + } - if (!files) { - return []; - } + if (!files) { + return []; + } - files.forEach((file) => { - const filePath = path.resolve(path.join(folderToRead, file)); - const stats = fs.statSync(filePath); + files.forEach((file) => { + const filePath = path.resolve(path.join(folderToRead, file)); + const stats = fs.statSync(filePath); - if (folderStrategy(stats, file)) { - folders.push(folderToRead); - } + if (folderStrategy(stats, file)) { + folders.push(folderToRead); + } - if (stats.isDirectory() && file !== "node_modules") { - extractFolder(filePath, folders, folderStrategy); - } - }); + if (stats.isDirectory() && file !== "node_modules") { + extractFolder(filePath, folders, folderStrategy); + } + }); - return folders; + return folders; } module.exports = collectTestFolders; diff --git a/setupTest.js b/setupTest.js index adc674767fa..187bc7f5d79 100644 --- a/setupTest.js +++ b/setupTest.js @@ -1,5 +1,5 @@ jest.setTimeout(240000); if (!expect.getState().testPath.includes("colors.test.js")) { - process.env.NO_COLOR = true; + process.env.NO_COLOR = true; } diff --git a/smoketests/helpers.js b/smoketests/helpers.js index 7af0cc10990..e67d760a0fb 100644 --- a/smoketests/helpers.js +++ b/smoketests/helpers.js @@ -6,247 +6,247 @@ const execa = require("execa"); const stripAnsi = require("strip-ansi"); const ROOT_PATH = process.env.GITHUB_WORKSPACE - ? process.env.GITHUB_WORKSPACE - : path.resolve(__dirname, ".."); + ? process.env.GITHUB_WORKSPACE + : path.resolve(__dirname, ".."); const getPkgPath = (pkg, isSubPackage) => { - const pkgPath = isSubPackage ? `./node_modules/@webpack-cli/${pkg}` : `./node_modules/${pkg}`; - return path.resolve(ROOT_PATH, pkgPath); + const pkgPath = isSubPackage ? `./node_modules/@webpack-cli/${pkg}` : `./node_modules/${pkg}`; + return path.resolve(ROOT_PATH, pkgPath); }; const swapPkgName = (current, isSubPackage = false) => { - // info -> .info and vice-versa - const next = current.startsWith(".") ? current.substr(1) : `.${current}`; - console.log(` swapping ${current} with ${next}`); - fs.renameSync(getPkgPath(current, isSubPackage), getPkgPath(next, isSubPackage)); + // info -> .info and vice-versa + const next = current.startsWith(".") ? current.substr(1) : `.${current}`; + console.log(` swapping ${current} with ${next}`); + fs.renameSync(getPkgPath(current, isSubPackage), getPkgPath(next, isSubPackage)); }; const CLI_ENTRY_PATH = path.resolve(ROOT_PATH, "./packages/webpack-cli/bin/cli.js"); const runTest = (package, cliArgs = [], logMessage, isSubPackage = false) => { - // Simulate package missing - swapPkgName(package, isSubPackage); - - const proc = execa(CLI_ENTRY_PATH, cliArgs, { - cwd: __dirname, + // Simulate package missing + swapPkgName(package, isSubPackage); + + const proc = execa(CLI_ENTRY_PATH, cliArgs, { + cwd: __dirname, + }); + + proc.stdin.setDefaultEncoding("utf-8"); + + proc.stdout.on("data", (chunk) => { + console.log(` stdout: ${chunk.toString()}`); + }); + + return new Promise((resolve) => { + const timeout = setTimeout(() => { + console.log(" timeout: killing process"); + proc.kill(); + }, 30000); + + const prompt = "Would you like to install"; + let hasLogMessage = false, + hasPrompt = false, + hasPassed = false; + + proc.stderr.on("data", (chunk) => { + const data = stripAnsi(chunk.toString()); + console.log(` stderr: ${data}`); + + if (data.includes(logMessage)) { + hasLogMessage = true; + } + + if (data.includes(prompt)) { + hasPrompt = true; + } + + if (hasLogMessage && hasPrompt) { + hasPassed = true; + proc.kill(); + } }); - proc.stdin.setDefaultEncoding("utf-8"); - - proc.stdout.on("data", (chunk) => { - console.log(` stdout: ${chunk.toString()}`); + proc.on("exit", () => { + swapPkgName(`.${package}`, isSubPackage); + clearTimeout(timeout); + resolve(hasPassed); }); - return new Promise((resolve) => { - const timeout = setTimeout(() => { - console.log(" timeout: killing process"); - proc.kill(); - }, 30000); - - const prompt = "Would you like to install"; - let hasLogMessage = false, - hasPrompt = false, - hasPassed = false; - - proc.stderr.on("data", (chunk) => { - const data = stripAnsi(chunk.toString()); - console.log(` stderr: ${data}`); - - if (data.includes(logMessage)) { - hasLogMessage = true; - } - - if (data.includes(prompt)) { - hasPrompt = true; - } - - if (hasLogMessage && hasPrompt) { - hasPassed = true; - proc.kill(); - } - }); - - proc.on("exit", () => { - swapPkgName(`.${package}`, isSubPackage); - clearTimeout(timeout); - resolve(hasPassed); - }); - - proc.on("error", () => { - swapPkgName(`.${package}`, isSubPackage); - clearTimeout(timeout); - resolve(false); - }); + proc.on("error", () => { + swapPkgName(`.${package}`, isSubPackage); + clearTimeout(timeout); + resolve(false); }); + }); }; const runTestStdout = ({ packageName, cliArgs, logMessage, isSubPackage } = {}) => { - // Simulate package missing - swapPkgName(packageName, isSubPackage); + // Simulate package missing + swapPkgName(packageName, isSubPackage); + + const proc = execa(CLI_ENTRY_PATH, cliArgs, { + cwd: __dirname, + }); + + proc.stdin.setDefaultEncoding("utf-8"); + + return new Promise((resolve) => { + const timeout = setTimeout(() => { + console.log(" timeout: killing process"); + proc.kill(); + }, 30000); + + let hasPassed = false; + + proc.stdout.on("data", (chunk) => { + const data = stripAnsi(chunk.toString()); + console.log(` stdout: ${data}`); - const proc = execa(CLI_ENTRY_PATH, cliArgs, { - cwd: __dirname, + if (data.includes(logMessage)) { + hasPassed = true; + proc.kill(); + } }); - proc.stdin.setDefaultEncoding("utf-8"); - - return new Promise((resolve) => { - const timeout = setTimeout(() => { - console.log(" timeout: killing process"); - proc.kill(); - }, 30000); - - let hasPassed = false; - - proc.stdout.on("data", (chunk) => { - const data = stripAnsi(chunk.toString()); - console.log(` stdout: ${data}`); - - if (data.includes(logMessage)) { - hasPassed = true; - proc.kill(); - } - }); - - proc.stderr.on("data", (chunk) => { - const data = stripAnsi(chunk.toString()); - console.log(` stderr: ${data}`); - }); - - proc.on("exit", () => { - swapPkgName(`.${packageName}`, isSubPackage); - clearTimeout(timeout); - resolve(hasPassed); - }); - - proc.on("error", () => { - swapPkgName(`.${packageName}`, isSubPackage); - clearTimeout(timeout); - resolve(false); - }); + proc.stderr.on("data", (chunk) => { + const data = stripAnsi(chunk.toString()); + console.log(` stderr: ${data}`); }); + + proc.on("exit", () => { + swapPkgName(`.${packageName}`, isSubPackage); + clearTimeout(timeout); + resolve(hasPassed); + }); + + proc.on("error", () => { + swapPkgName(`.${packageName}`, isSubPackage); + clearTimeout(timeout); + resolve(false); + }); + }); }; const runTestStdoutWithInput = ({ - packageName, - cliArgs, - inputs, - logMessage, - isSubPackage, + packageName, + cliArgs, + inputs, + logMessage, + isSubPackage, } = {}) => { - // Simulate package missing - swapPkgName(packageName, isSubPackage); + // Simulate package missing + swapPkgName(packageName, isSubPackage); + + const proc = execa(CLI_ENTRY_PATH, cliArgs, { + cwd: __dirname, + }); + + proc.stdin.setDefaultEncoding("utf-8"); + + return new Promise((resolve) => { + const timeout = setTimeout(() => { + console.log(" timeout: killing process"); + proc.kill(); + }, 300000); + + let hasPassed = false; - const proc = execa(CLI_ENTRY_PATH, cliArgs, { - cwd: __dirname, + proc.stdout.on("data", (chunk) => { + const data = stripAnsi(chunk.toString()); + console.log(` stdout: ${data}`); + + if (data.includes(logMessage)) { + hasPassed = true; + proc.kill(); + } + + Object.keys(inputs).forEach((input) => { + if (data.includes(input)) { + proc.stdin.write(inputs[input]); + } + }); + }); + + proc.stderr.on("data", (chunk) => { + const data = stripAnsi(chunk.toString()); + console.log(` stderr: ${data}`); + }); + + proc.on("exit", () => { + swapPkgName(`.${packageName}`, isSubPackage); + clearTimeout(timeout); + resolve(hasPassed); }); - proc.stdin.setDefaultEncoding("utf-8"); - - return new Promise((resolve) => { - const timeout = setTimeout(() => { - console.log(" timeout: killing process"); - proc.kill(); - }, 300000); - - let hasPassed = false; - - proc.stdout.on("data", (chunk) => { - const data = stripAnsi(chunk.toString()); - console.log(` stdout: ${data}`); - - if (data.includes(logMessage)) { - hasPassed = true; - proc.kill(); - } - - Object.keys(inputs).forEach((input) => { - if (data.includes(input)) { - proc.stdin.write(inputs[input]); - } - }); - }); - - proc.stderr.on("data", (chunk) => { - const data = stripAnsi(chunk.toString()); - console.log(` stderr: ${data}`); - }); - - proc.on("exit", () => { - swapPkgName(`.${packageName}`, isSubPackage); - clearTimeout(timeout); - resolve(hasPassed); - }); - - proc.on("error", () => { - swapPkgName(`.${packageName}`, isSubPackage); - clearTimeout(timeout); - resolve(false); - }); + proc.on("error", () => { + swapPkgName(`.${packageName}`, isSubPackage); + clearTimeout(timeout); + resolve(false); }); + }); }; const runTestWithHelp = (package, cliArgs = [], logMessage, isSubPackage = false) => { - // Simulate package missing - swapPkgName(package, isSubPackage); + // Simulate package missing + swapPkgName(package, isSubPackage); - const proc = execa(CLI_ENTRY_PATH, cliArgs, { - cwd: __dirname, - }); + const proc = execa(CLI_ENTRY_PATH, cliArgs, { + cwd: __dirname, + }); - proc.stdin.setDefaultEncoding("utf-8"); + proc.stdin.setDefaultEncoding("utf-8"); - proc.stdout.on("data", (chunk) => { - console.log(` stdout: ${chunk.toString()}`); + proc.stdout.on("data", (chunk) => { + console.log(` stdout: ${chunk.toString()}`); + }); + + return new Promise((resolve) => { + const timeout = setTimeout(() => { + console.log(" timeout: killing process"); + proc.kill(); + }, 30000); + + const undefinedLogMessage = "Can't find and load command"; + + let hasLogMessage = false, + hasUndefinedLogMessage = false, + hasPassed = false; + + proc.stderr.on("data", (chunk) => { + const data = stripAnsi(chunk.toString()); + console.log(` stderr: ${data}`); + + if (data.includes(logMessage)) { + hasLogMessage = true; + } + + if (data.includes(undefinedLogMessage)) { + hasUndefinedLogMessage = true; + } + + if (hasLogMessage || hasUndefinedLogMessage) { + hasPassed = true; + proc.kill(); + } + }); + + proc.on("exit", () => { + swapPkgName(`.${package}`, isSubPackage); + clearTimeout(timeout); + resolve(hasPassed); }); - return new Promise((resolve) => { - const timeout = setTimeout(() => { - console.log(" timeout: killing process"); - proc.kill(); - }, 30000); - - const undefinedLogMessage = "Can't find and load command"; - - let hasLogMessage = false, - hasUndefinedLogMessage = false, - hasPassed = false; - - proc.stderr.on("data", (chunk) => { - const data = stripAnsi(chunk.toString()); - console.log(` stderr: ${data}`); - - if (data.includes(logMessage)) { - hasLogMessage = true; - } - - if (data.includes(undefinedLogMessage)) { - hasUndefinedLogMessage = true; - } - - if (hasLogMessage || hasUndefinedLogMessage) { - hasPassed = true; - proc.kill(); - } - }); - - proc.on("exit", () => { - swapPkgName(`.${package}`, isSubPackage); - clearTimeout(timeout); - resolve(hasPassed); - }); - - proc.on("error", () => { - swapPkgName(`.${package}`, isSubPackage); - clearTimeout(timeout); - resolve(false); - }); + proc.on("error", () => { + swapPkgName(`.${package}`, isSubPackage); + clearTimeout(timeout); + resolve(false); }); + }); }; module.exports = { - runTest, - runTestStdout, - runTestWithHelp, - runTestStdoutWithInput, + runTest, + runTestStdout, + runTestWithHelp, + runTestStdoutWithInput, }; diff --git a/smoketests/index.js b/smoketests/index.js index c734be20948..04a21b169c2 100644 --- a/smoketests/index.js +++ b/smoketests/index.js @@ -1,33 +1,33 @@ const tests = [ - require("./missing-packages/webpack-dev-server.test.js"), - require("./missing-packages/webpack.test.js"), - require("./missing-packages/webpack-bundle-analyzer.test.js"), - require("./missing-command-packages/generator.test.js"), - require("./missing-command-packages/serve.test.js"), - require("./missing-command-packages/info.test.js"), - require("./missing-command-packages/configtest.test.js"), - require("./missing-packages/prettier.test.js"), + require("./missing-packages/webpack-dev-server.test.js"), + require("./missing-packages/webpack.test.js"), + require("./missing-packages/webpack-bundle-analyzer.test.js"), + require("./missing-command-packages/generator.test.js"), + require("./missing-command-packages/serve.test.js"), + require("./missing-command-packages/info.test.js"), + require("./missing-command-packages/configtest.test.js"), + require("./missing-packages/prettier.test.js"), ]; (async () => { - let isAllPassed = true; - for await (const test of tests) { - console.log(`\nRUN ${test.name}`); + let isAllPassed = true; + for await (const test of tests) { + console.log(`\nRUN ${test.name}`); - let isPass = true; - for await (const testCase of test.run) { - isPass = isPass && (await testCase()); - } - - if (!isPass) { - console.log(`FAIL ${test.name}`); - isAllPassed = false; - } else { - console.log(`PASS ${test.name}`); - } + let isPass = true; + for await (const testCase of test.run) { + isPass = isPass && (await testCase()); } - if (!isAllPassed) { - process.exit(2); + + if (!isPass) { + console.log(`FAIL ${test.name}`); + isAllPassed = false; + } else { + console.log(`PASS ${test.name}`); } - process.exit(0); + } + if (!isAllPassed) { + process.exit(2); + } + process.exit(0); })(); diff --git a/smoketests/missing-command-packages/configtest.test.js b/smoketests/missing-command-packages/configtest.test.js index 66683b4d53f..5b26a685bde 100644 --- a/smoketests/missing-command-packages/configtest.test.js +++ b/smoketests/missing-command-packages/configtest.test.js @@ -6,19 +6,19 @@ const packageName = "configtest"; const isSubPackage = true; const configTest = () => { - const args = ["configtest"]; - const logMessage = - "For using this command you need to install: '@webpack-cli/configtest' package"; + const args = ["configtest"]; + const logMessage = + "For using this command you need to install: '@webpack-cli/configtest' package"; - return runTest(packageName, args, logMessage, isSubPackage); + return runTest(packageName, args, logMessage, isSubPackage); }; const configTestWithHelp = () => { - const args = ["help", "configtest"]; - const logMessage = - "For using 'configtest' command you need to install '@webpack-cli/configtest' package"; + const args = ["help", "configtest"]; + const logMessage = + "For using 'configtest' command you need to install '@webpack-cli/configtest' package"; - return runTestWithHelp(packageName, args, logMessage, isSubPackage); + return runTestWithHelp(packageName, args, logMessage, isSubPackage); }; module.exports.run = [configTest, configTestWithHelp]; diff --git a/smoketests/missing-command-packages/generator.test.js b/smoketests/missing-command-packages/generator.test.js index c0c95b8a8e9..4c11f97583d 100644 --- a/smoketests/missing-command-packages/generator.test.js +++ b/smoketests/missing-command-packages/generator.test.js @@ -6,19 +6,19 @@ const packageName = "generators"; const isSubPackage = true; const initTest = () => { - const args = ["init"]; - const logMessage = - "For using this command you need to install: '@webpack-cli/generators' package"; + const args = ["init"]; + const logMessage = + "For using this command you need to install: '@webpack-cli/generators' package"; - return runTest(packageName, args, logMessage, isSubPackage); + return runTest(packageName, args, logMessage, isSubPackage); }; const initTestWithHelp = () => { - const args = ["help", "init"]; - const logMessage = - "For using 'init' command you need to install '@webpack-cli/generators' package"; + const args = ["help", "init"]; + const logMessage = + "For using 'init' command you need to install '@webpack-cli/generators' package"; - return runTestWithHelp(packageName, args, logMessage, isSubPackage); + return runTestWithHelp(packageName, args, logMessage, isSubPackage); }; module.exports.run = [initTest, initTestWithHelp]; diff --git a/smoketests/missing-command-packages/info.test.js b/smoketests/missing-command-packages/info.test.js index 3bdbe8b17ab..f29ac69e309 100644 --- a/smoketests/missing-command-packages/info.test.js +++ b/smoketests/missing-command-packages/info.test.js @@ -6,17 +6,17 @@ const packageName = "info"; const isSubPackage = true; const infoTest = () => { - const args = ["info"]; - const logMessage = "For using this command you need to install: '@webpack-cli/info' package"; + const args = ["info"]; + const logMessage = "For using this command you need to install: '@webpack-cli/info' package"; - return runTest(packageName, args, logMessage, isSubPackage); + return runTest(packageName, args, logMessage, isSubPackage); }; const infoTestWithHelp = () => { - const args = ["help", "info"]; - const logMessage = "For using 'info' command you need to install '@webpack-cli/info' package"; + const args = ["help", "info"]; + const logMessage = "For using 'info' command you need to install '@webpack-cli/info' package"; - return runTestWithHelp(packageName, args, logMessage, isSubPackage); + return runTestWithHelp(packageName, args, logMessage, isSubPackage); }; module.exports.run = [infoTest, infoTestWithHelp]; diff --git a/smoketests/missing-command-packages/serve.test.js b/smoketests/missing-command-packages/serve.test.js index f0621b9c613..437074d5ff4 100644 --- a/smoketests/missing-command-packages/serve.test.js +++ b/smoketests/missing-command-packages/serve.test.js @@ -6,17 +6,17 @@ const packageName = "serve"; const isSubPackage = true; const serveTest = () => { - const args = ["serve"]; - const logMessage = "For using this command you need to install: '@webpack-cli/serve' package"; + const args = ["serve"]; + const logMessage = "For using this command you need to install: '@webpack-cli/serve' package"; - return runTest(packageName, args, logMessage, isSubPackage); + return runTest(packageName, args, logMessage, isSubPackage); }; const serveTestWithHelp = () => { - const args = ["help", "serve"]; - const logMessage = "For using 'serve' command you need to install '@webpack-cli/serve' package"; + const args = ["help", "serve"]; + const logMessage = "For using 'serve' command you need to install '@webpack-cli/serve' package"; - return runTestWithHelp(packageName, args, logMessage, isSubPackage); + return runTestWithHelp(packageName, args, logMessage, isSubPackage); }; module.exports.run = [serveTest, serveTestWithHelp]; diff --git a/smoketests/missing-packages/prettier.test.js b/smoketests/missing-packages/prettier.test.js index a11677ab865..1c686a3dcec 100644 --- a/smoketests/missing-packages/prettier.test.js +++ b/smoketests/missing-packages/prettier.test.js @@ -6,32 +6,32 @@ const rimraf = require("rimraf"); const { resolve } = require("path"); const prettierTest = async () => { - const packageName = "prettier"; - const rootPath = resolve(__dirname, "./test-assets"); - const cliArgs = ["init", rootPath, "--force"]; - const logMessage = "Do you like to install prettier to format generated configuration?"; - const status = await runTestStdout({ packageName, cliArgs, logMessage }); - rimraf.sync(rootPath); - return status; + const packageName = "prettier"; + const rootPath = resolve(__dirname, "./test-assets"); + const cliArgs = ["init", rootPath, "--force"]; + const logMessage = "Do you like to install prettier to format generated configuration?"; + const status = await runTestStdout({ packageName, cliArgs, logMessage }); + rimraf.sync(rootPath); + return status; }; const prettierTestWithNoAnswer = async () => { - const packageName = "prettier"; - const rootPath = resolve(__dirname, "./test-assets"); - const cliArgs = ["init", rootPath, "--force"]; - const inputs = { - "Do you like to install prettier to format generated configuration?": "n\n", - }; - const logMessage = - "Generated configuration may not be properly formatted as prettier is not installed"; - const status = await runTestStdoutWithInput({ - packageName, - cliArgs, - inputs, - logMessage, - }); - rimraf.sync(rootPath); - return status; + const packageName = "prettier"; + const rootPath = resolve(__dirname, "./test-assets"); + const cliArgs = ["init", rootPath, "--force"]; + const inputs = { + "Do you like to install prettier to format generated configuration?": "n\n", + }; + const logMessage = + "Generated configuration may not be properly formatted as prettier is not installed"; + const status = await runTestStdoutWithInput({ + packageName, + cliArgs, + inputs, + logMessage, + }); + rimraf.sync(rootPath); + return status; }; module.exports.run = [prettierTest, prettierTestWithNoAnswer]; diff --git a/smoketests/missing-packages/webpack-bundle-analyzer.test.js b/smoketests/missing-packages/webpack-bundle-analyzer.test.js index 6033e5fbfc2..580b07fdf29 100644 --- a/smoketests/missing-packages/webpack-bundle-analyzer.test.js +++ b/smoketests/missing-packages/webpack-bundle-analyzer.test.js @@ -3,11 +3,11 @@ const { runTest } = require("../helpers"); const webpackBundleAnalyzerTest = () => { - const packageName = "webpack-bundle-analyzer"; - const args = ["--analyze"]; - const logMessage = "It looks like webpack-bundle-analyzer is not installed."; + const packageName = "webpack-bundle-analyzer"; + const args = ["--analyze"]; + const logMessage = "It looks like webpack-bundle-analyzer is not installed."; - return runTest(packageName, args, logMessage); + return runTest(packageName, args, logMessage); }; module.exports.run = [webpackBundleAnalyzerTest]; diff --git a/smoketests/missing-packages/webpack-dev-server.test.js b/smoketests/missing-packages/webpack-dev-server.test.js index e053a970a1d..c463ff985c0 100644 --- a/smoketests/missing-packages/webpack-dev-server.test.js +++ b/smoketests/missing-packages/webpack-dev-server.test.js @@ -3,20 +3,19 @@ const { runTest, runTestStdout } = require("../helpers"); const webpackDevServerTest = () => { - const packageName = "webpack-dev-server"; - const args = ["serve"]; - const logMessage = - "For using 'serve' command you need to install: 'webpack-dev-server' package"; + const packageName = "webpack-dev-server"; + const args = ["serve"]; + const logMessage = "For using 'serve' command you need to install: 'webpack-dev-server' package"; - return runTest(packageName, args, logMessage); + return runTest(packageName, args, logMessage); }; const webpackDevServerWithHelpTest = () => { - const packageName = "webpack-dev-server"; - const cliArgs = ["help", "serve"]; - const logMessage = "To see all available options you need to install 'webpack-dev-server'"; + const packageName = "webpack-dev-server"; + const cliArgs = ["help", "serve"]; + const logMessage = "To see all available options you need to install 'webpack-dev-server'"; - return runTestStdout({ packageName, cliArgs, logMessage }); + return runTestStdout({ packageName, cliArgs, logMessage }); }; module.exports.run = [webpackDevServerTest, webpackDevServerWithHelpTest]; diff --git a/smoketests/missing-packages/webpack.test.js b/smoketests/missing-packages/webpack.test.js index 3c8f0ecfaed..d940e8f5fcc 100644 --- a/smoketests/missing-packages/webpack.test.js +++ b/smoketests/missing-packages/webpack.test.js @@ -3,11 +3,11 @@ const { runTest } = require("../helpers"); const webpackTest = () => { - const packageName = "webpack"; - const args = []; - const logMessage = "It looks like webpack is not installed."; + const packageName = "webpack"; + const args = []; + const logMessage = "It looks like webpack is not installed."; - return runTest(packageName, args, logMessage); + return runTest(packageName, args, logMessage); }; module.exports.run = [webpackTest]; diff --git a/test/.eslintrc b/test/.eslintrc index 198fec4135a..b28a184daee 100644 --- a/test/.eslintrc +++ b/test/.eslintrc @@ -1,10 +1,10 @@ { - "extends": ["eslint:recommended", "plugin:node/recommended", "plugin:prettier/recommended"], - "env": { - "node": true, - "es6": true, - "jest": true - }, - "plugins": ["node", "prettier"], - "parserOptions": { "ecmaVersion": 2020, "sourceType": "module" } + "extends": ["eslint:recommended", "plugin:node/recommended", "prettier"], + "env": { + "node": true, + "es6": true, + "jest": true + }, + "plugins": ["node"], + "parserOptions": { "ecmaVersion": 2020, "sourceType": "module" } } diff --git a/test/api/CLI.test.js b/test/api/CLI.test.js index 0896c989deb..2fe1823c332 100644 --- a/test/api/CLI.test.js +++ b/test/api/CLI.test.js @@ -1,1732 +1,1727 @@ const CLI = require("../../packages/webpack-cli/lib/webpack-cli"); describe("CLI API", () => { - let cli; - - beforeEach(() => { - cli = new CLI(); - }); - - describe("makeCommand", () => { - it("should make command", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand({ name: "command" }, [], (options) => { - expect(options).toEqual({}); - }); - - command.parseAsync([], { from: "user" }); - }); - - it("should make command with Boolean option by default", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean", - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ boolean: true }); - }, - ); - - command.parseAsync(["--boolean"], { from: "user" }); - }); - - it("should make command with Boolean option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean", - type: Boolean, - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ boolean: true }); - }, - ); - - command.parseAsync(["--boolean"], { from: "user" }); - }); - - it("should make command with Boolean option and negative value", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean", - type: Boolean, - description: "description", - negative: true, - }, - ], - (options) => { - expect(options).toEqual({ boolean: false }); - }, - ); - - command.parseAsync(["--no-boolean"], { from: "user" }); - }); - - it("should make command with configs boolean option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "configs-boolean", - configs: [ - { - type: "boolean", - }, - ], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ configsBoolean: false }); - }, - ); - - command.parseAsync(["--no-configs-boolean"], { from: "user" }); - }); - - it("should make command with configs number option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "configs-number", - configs: [ - { - type: "number", - }, - ], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ configsNumber: 42 }); - }, - ); - - command.parseAsync(["--configs-number", "42"], { from: "user" }); - }); - - it("should make command with configs string option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "configs-string", - configs: [ - { - type: "string", - }, - ], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ configsString: "foo" }); - }, - ); - - command.parseAsync(["--configs-string", "foo"], { from: "user" }); - }); - - it("should make command with configs path option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "configs-path", - configs: [ - { - type: "path", - }, - ], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ configsPath: "/root/foo" }); - }, - ); - - command.parseAsync(["--configs-path", "/root/foo"], { - from: "user", - }); - }); - - it("should make command with configs RegExp option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "configs-regexp", - configs: [ - { - type: "RegExp", - }, - ], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ configsRegexp: "\\w+" }); - }, - ); - - command.parseAsync(["--configs-regexp", "\\w+"], { from: "user" }); - }); - - it("should make command with configs enum/string option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "enum-string", - configs: [ - { - type: "enum", - values: ["foo"], - }, - ], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ enumString: "foo" }); - }, - ); - - command.parseAsync(["--enum-string", "foo"], { from: "user" }); - }); - - it("should make command with configs enum/number option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "enum-number", - configs: [ - { - type: "enum", - values: [42], - }, - ], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ enumNumber: 42 }); - }, - ); - - command.parseAsync(["--enum-number", "42"], { from: "user" }); - }); - - it("should make command with configs enum/boolean option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "enum-boolean", - configs: [ - { - type: "boolean", - values: [false], - }, - ], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ enumBoolean: false }); - }, - ); - - command.parseAsync(["--no-enum-boolean"], { from: "user" }); - }); - - it("should make command with Boolean option and negative value #2", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean", - type: Boolean, - description: "description", - negative: true, - }, - ], - (options) => { - expect(options).toEqual({ boolean: false }); - }, - ); - - command.parseAsync(["--boolean", "--no-boolean"], { from: "user" }); - }); - - it("should make command with Boolean option and negative value #3", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean", - type: Boolean, - description: "description", - negative: true, - }, - ], - (options) => { - expect(options).toEqual({ boolean: true }); - }, - ); - - command.parseAsync(["--no-boolean", "--boolean"], { from: "user" }); - }); - - it("should make command with Boolean option with default value", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean", - type: Boolean, - description: "description", - defaultValue: false, - }, - ], - (options) => { - expect(options).toEqual({ boolean: false }); - }, - ); - - command.parseAsync([], { from: "user" }); - }); - - it("should make command with String option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "string", - type: String, - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ string: "bar" }); - }, - ); - - command.parseAsync(["--string", "bar"], { from: "user" }); - }); - - it("should make command with String option with alias", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "string", - alias: "s", - type: String, - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ string: "foo" }); - }, - ); - - command.parseAsync(["-s", "foo"], { from: "user" }); - }); - - it("should make command with String option with default value", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "string", - type: String, - description: "description", - defaultValue: "default-value", - }, - ], - (options) => { - expect(options).toEqual({ string: "default-value" }); - }, - ); - - command.parseAsync([], { from: "user" }); - }); - - it("should make command with String option with default value #2", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "string", - type: String, - description: "description", - defaultValue: "default-value", - }, - ], - (options) => { - expect(options).toEqual({ string: "foo" }); - }, - ); - - command.parseAsync(["--string", "foo"], { from: "user" }); - }); - - it('should make command with String option using "=" syntax', async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "string", - type: String, - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ string: "bar" }); - }, - ); - - command.parseAsync(["--string=bar"], { from: "user" }); - }); - - it("should make command with multiple String option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "string", - multiple: true, - type: String, - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ string: ["foo", "bar"] }); - }, - ); - - command.parseAsync(["--string", "foo", "bar"], { from: "user" }); - }); - - it("should make command with multiple String option with default value", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "string", - multiple: true, - type: String, - description: "description", - defaultValue: "string", - }, - ], - (options) => { - expect(options).toEqual({ string: "string" }); - }, - ); - - command.parseAsync([], { from: "user" }); - }); - - it("should make command with multiple String option with default value #2", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "string", - multiple: true, - type: String, - description: "description", - defaultValue: "string", - }, - ], - (options) => { - expect(options).toEqual({ string: ["foo", "bar"] }); - }, - ); - - command.parseAsync(["--string", "foo", "--string", "bar"], { - from: "user", - }); - }); - - it("should make command with multiple String option #2", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "string", - multiple: true, - type: String, - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ string: ["foo", "bar"] }); - }, - ); - - command.parseAsync(["--string", "foo", "--string", "bar"], { - from: "user", - }); - }); - - it("should make command with Number option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "number", - type: Number, - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ number: 12 }); - }, - ); - - command.parseAsync(["--number", "12"], { from: "user" }); - }); - - it("should make command with Number option with default value", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "number", - type: Number, - description: "description", - defaultValue: 20, - }, - ], - (options) => { - expect(options).toEqual({ number: 20 }); - }, - ); - - command.parseAsync([], { from: "user" }); - }); - - it("should make command with multiple Number option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "number", - multiple: true, - type: Number, - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ number: [1, 2] }); - }, - ); - - command.parseAsync(["--number", "1", "--number", "2"], { - from: "user", - }); - }); - - it("should make command with multiple Number option and default value", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "number", - multiple: true, - type: Number, - description: "description", - defaultValue: 50, - }, - ], - (options) => { - expect(options).toEqual({ number: [1, 2] }); - }, - ); - - command.parseAsync(["--number", "1", "--number", "2"], { - from: "user", - }); - }); - - it("should make command with multiple Number option and default value", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "number", - multiple: true, - type: Number, - description: "description", - defaultValue: 50, - }, - ], - (options) => { - expect(options).toEqual({ number: 50 }); - }, - ); - - command.parseAsync([], { from: "user" }); - }); - - it("should make command with custom function type", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "custom", - type: () => { - return "function"; - }, - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ custom: "function" }); - }, - ); - - command.parseAsync(["--custom", "value"], { from: "user" }); - }); - - it("should make command with custom function type and default value", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "custom", - type: () => { - return "function"; - }, - description: "description", - defaultValue: "default", - }, - ], - (options) => { - expect(options).toEqual({ custom: "default" }); - }, - ); - - command.parseAsync([], { from: "user" }); - }); - - it("should make command with multiple custom function type", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "custom", - type: (value, previous = []) => { - return previous.concat([value]); - }, - description: "description", - multiple: true, - }, - ], - (options) => { - expect(options).toEqual({ custom: ["value", "other"] }); - }, - ); - - command.parseAsync(["--custom", "value", "--custom", "other"], { - from: "user", - }); - }); - - it("should make command with multiple custom function type and default value", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "custom", - type: (value, previous = []) => { - return previous.concat([value]); - }, - description: "description", - multiple: true, - defaultValue: 50, - }, - ], - (options) => { - expect(options).toEqual({ custom: 50 }); - }, - ); - - command.parseAsync([], { from: "user" }); - }); - - it("should make command with multiple custom function type and default value #2", async () => { - expect.assertions(1); - - cli.program.commands = []; - - let skipDefault = true; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "custom", - type: (value, previous = []) => { - if (skipDefault) { - previous = []; - skipDefault = false; - } - - return [].concat(previous).concat([value]); - }, - description: "description", - multiple: true, - defaultValue: 50, - }, - ], - (options) => { - expect(options).toEqual({ custom: ["foo"] }); - }, - ); - - command.parseAsync(["--custom", "foo"], { from: "user" }); - }); - - it("should make command with Boolean and String option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-string", - type: [Boolean, String], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ booleanAndString: true }); - }, - ); - - command.parseAsync(["--boolean-and-string"], { from: "user" }); - }); - - it("should make command with Boolean and String option #2", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-string", - type: [Boolean, String], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ booleanAndString: "value" }); - }, - ); - - command.parseAsync(["--boolean-and-string", "value"], { - from: "user", - }); - }); - - it("should make command with multiple Boolean and String option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-string", - type: [Boolean, String], - description: "description", - multiple: true, - }, - ], - (options) => { - expect(options).toEqual({ booleanAndString: true }); - }, - ); - - command.parseAsync(["--boolean-and-string"], { from: "user" }); - }); - - it("should make command with multiple Boolean and String option #2", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-string", - type: [Boolean, String], - description: "description", - multiple: true, - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndString: ["bar", "baz"], - }); - }, - ); - - command.parseAsync(["--boolean-and-string", "bar", "--boolean-and-string", "baz"], { - from: "user", - }); - }); - - it("should make command with Boolean and String option and negative", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-string", - type: [Boolean, String], - description: "description", - negative: true, - }, - ], - (options) => { - expect(options).toEqual({ booleanAndString: true }); - }, - ); - - command.parseAsync(["--boolean-and-string"], { from: "user" }); - }); - - it("should make command with Boolean and String option and negative #2", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-string", - type: [Boolean, String], - description: "description", - negative: true, - }, - ], - (options) => { - expect(options).toEqual({ booleanAndString: "foo" }); - }, - ); - - command.parseAsync(["--boolean-and-string", "foo"], { - from: "user", - }); - }); - - it("should make command with Boolean and String option and negative #3", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-string", - type: [Boolean, String], - description: "description", - negative: true, - }, - ], - (options) => { - expect(options).toEqual({ booleanAndString: false }); - }, - ); - - command.parseAsync(["--no-boolean-and-string"], { from: "user" }); - }); - - it("should make command with Boolean and Number option", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number", - type: [Boolean, Number], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ booleanAndNumber: true }); - }, - ); - - command.parseAsync(["--boolean-and-number"], { from: "user" }); - }); - - it("should make command with Boolean and Number option #2", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number", - type: [Boolean, Number], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ booleanAndNumber: 12 }); - }, - ); - - command.parseAsync(["--boolean-and-number", "12"], { - from: "user", - }); - }); - - it("should make command with array Boolean type", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean", - type: [Boolean], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ boolean: true }); - }, - ); - - command.parseAsync(["--boolean"], { from: "user" }); - }); - - it("should make command with Boolean and Number and String type", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: true, - }); - }, - ); - - command.parseAsync(["--boolean-and-number-and-string"], { - from: "user", - }); - }); - - it("should make command with Boolean and Number and String type #2", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ booleanAndNumberAndString: 12 }); - }, - ); - - command.parseAsync(["--boolean-and-number-and-string", "12"], { - from: "user", - }); - }); - - it("should make command with Boolean and Number and String type #3", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: "bar", - }); - }, - ); - - command.parseAsync(["--boolean-and-number-and-string", "bar"], { - from: "user", - }); - }); - - it("should make command with Boolean and Number and String type and default value", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - defaultValue: "default", - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: "default", - }); - }, - ); - - command.parseAsync([], { from: "user" }); - }); - - it("should make command with Boolean and Number and String type and default value #2", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - defaultValue: "default", - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: "foo", - }); - }, - ); - - command.parseAsync(["--boolean-and-number-and-string", "foo"], { - from: "user", - }); - }); - - it("should make command with Boolean and Number and String type and default value #3", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - defaultValue: "default", - }, - ], - (options) => { - expect(options).toEqual({ booleanAndNumberAndString: 12 }); - }, - ); - - command.parseAsync(["--boolean-and-number-and-string", "12"], { - from: "user", - }); - }); - - it("should make command with Boolean and Number and String type and default value #4", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - defaultValue: "default", - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: "default", - }); - }, - ); - - command.parseAsync(["--boolean-and-number-and-string"], { - from: "user", - }); - }); - - it("should make command with multiple Boolean and Number and String type", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - multiple: true, - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: true, - }); - }, - ); - - command.parseAsync(["--boolean-and-number-and-string"], { - from: "user", - }); - }); - - it("should make command with multiple Boolean and Number and String type #2", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - multiple: true, - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: ["foo"], - }); - }, - ); - - command.parseAsync(["--boolean-and-number-and-string", "foo"], { - from: "user", - }); - }); - - it("should make command with multiple Boolean and Number and String type #3", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - multiple: true, - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: [12], - }); - }, - ); - - command.parseAsync(["--boolean-and-number-and-string", "12"], { - from: "user", - }); - }); - - it("should make command with multiple Boolean and Number and String type #4", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - multiple: true, - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: ["foo", "bar"], - }); - }, - ); - - command.parseAsync( - [ - "--boolean-and-number-and-string", - "foo", - "--boolean-and-number-and-string", - "bar", - ], - { from: "user" }, - ); - }); - - it("should make command with multiple Boolean and Number and String type #5", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - multiple: true, - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: ["foo", 12], - }); - }, - ); - - command.parseAsync( - ["--boolean-and-number-and-string", "foo", "--boolean-and-number-and-string", "12"], - { from: "user" }, - ); - }); - - it("should make command with multiple Boolean and Number and String and default value", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - multiple: true, - defaultValue: "default", - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: "default", - }); - }, - ); - - command.parseAsync([], { from: "user" }); - }); - - it("should make command with multiple Boolean and Number and String and default value #2", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - multiple: true, - defaultValue: "default", - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: ["foo"], - }); - }, - ); - - command.parseAsync(["--boolean-and-number-and-string", "foo"], { - from: "user", - }); - }); - - it("should make command with multiple Boolean and Number and String and default value #3", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - multiple: true, - defaultValue: "default", - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: [12], - }); - }, - ); - - command.parseAsync(["--boolean-and-number-and-string", "12"], { - from: "user", - }); - }); - - it("should make command with multiple Boolean and Number and String and default value #4", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean-and-number-and-string", - type: [Boolean, Number, String], - description: "description", - multiple: true, - defaultValue: "default", - }, - ], - (options) => { - expect(options).toEqual({ - booleanAndNumberAndString: ["foo", 12], - }); - }, - ); - - command.parseAsync( - ["--boolean-and-number-and-string", "foo", "--boolean-and-number-and-string", "12"], - { from: "user" }, - ); - }); - - it("should make command with array of unknown types", async () => { - expect.assertions(1); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "unknown", - type: [Boolean, Symbol], - description: "description", - }, - ], - (options) => { - expect(options).toEqual({ unknown: "foo" }); - }, - ); - - command.parseAsync(["--unknown", "foo"], { from: "user" }); - }); - - it("should make command with Boolean option and use description", async () => { - expect.assertions(2); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean", - type: Boolean, - description: "Description", - negatedDescription: "Negated description", - }, - ], - (options) => { - expect(options).toEqual({ boolean: true }); - }, - ); - - command.parseAsync(["--boolean"], { from: "user" }); - - expect(command.helpInformation()).toContain("--boolean Description"); - }); - - it("should make command with Boolean option and negative value and use negatedDescription", async () => { - expect.assertions(2); - - cli.program.commands = []; - - const command = await cli.makeCommand( - { - name: "command", - }, - [ - { - name: "boolean", - type: Boolean, - description: "description", - negative: true, - negatedDescription: "Negated description", - }, - ], - (options) => { - expect(options).toEqual({ boolean: false }); - }, - ); - - command.parseAsync(["--no-boolean"], { from: "user" }); - - expect(command.helpInformation()).toContain("--no-boolean Negated description"); - }); - }); - - describe("custom help output", () => { - let consoleSpy; - let exitSpy; - - beforeEach(async () => { - consoleSpy = jest.spyOn(global.console, "log"); - exitSpy = jest.spyOn(process, "exit").mockImplementation(() => {}); - - cli.program.option("--color [value]", "any color", "blue"); - await new Promise((resolve, reject) => { - try { - cli.run(["help", "--color"], { from: "user" }); - resolve(); - } catch (error) { - reject(error); - } - }); - }); - - afterEach(async () => { - consoleSpy.mockRestore(); - exitSpy.mockRestore(); - }); - - it("should display help information", () => { - expect(exitSpy).toHaveBeenCalledWith(0); - expect(consoleSpy.mock.calls).toMatchSnapshot(); - }); + let cli; + + beforeEach(() => { + cli = new CLI(); + }); + + describe("makeCommand", () => { + it("should make command", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand({ name: "command" }, [], (options) => { + expect(options).toEqual({}); + }); + + command.parseAsync([], { from: "user" }); + }); + + it("should make command with Boolean option by default", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean", + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ boolean: true }); + }, + ); + + command.parseAsync(["--boolean"], { from: "user" }); + }); + + it("should make command with Boolean option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean", + type: Boolean, + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ boolean: true }); + }, + ); + + command.parseAsync(["--boolean"], { from: "user" }); + }); + + it("should make command with Boolean option and negative value", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean", + type: Boolean, + description: "description", + negative: true, + }, + ], + (options) => { + expect(options).toEqual({ boolean: false }); + }, + ); + + command.parseAsync(["--no-boolean"], { from: "user" }); + }); + + it("should make command with configs boolean option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "configs-boolean", + configs: [ + { + type: "boolean", + }, + ], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ configsBoolean: false }); + }, + ); + + command.parseAsync(["--no-configs-boolean"], { from: "user" }); + }); + + it("should make command with configs number option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "configs-number", + configs: [ + { + type: "number", + }, + ], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ configsNumber: 42 }); + }, + ); + + command.parseAsync(["--configs-number", "42"], { from: "user" }); + }); + + it("should make command with configs string option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "configs-string", + configs: [ + { + type: "string", + }, + ], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ configsString: "foo" }); + }, + ); + + command.parseAsync(["--configs-string", "foo"], { from: "user" }); + }); + + it("should make command with configs path option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "configs-path", + configs: [ + { + type: "path", + }, + ], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ configsPath: "/root/foo" }); + }, + ); + + command.parseAsync(["--configs-path", "/root/foo"], { + from: "user", + }); + }); + + it("should make command with configs RegExp option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "configs-regexp", + configs: [ + { + type: "RegExp", + }, + ], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ configsRegexp: "\\w+" }); + }, + ); + + command.parseAsync(["--configs-regexp", "\\w+"], { from: "user" }); + }); + + it("should make command with configs enum/string option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "enum-string", + configs: [ + { + type: "enum", + values: ["foo"], + }, + ], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ enumString: "foo" }); + }, + ); + + command.parseAsync(["--enum-string", "foo"], { from: "user" }); + }); + + it("should make command with configs enum/number option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "enum-number", + configs: [ + { + type: "enum", + values: [42], + }, + ], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ enumNumber: 42 }); + }, + ); + + command.parseAsync(["--enum-number", "42"], { from: "user" }); + }); + + it("should make command with configs enum/boolean option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "enum-boolean", + configs: [ + { + type: "boolean", + values: [false], + }, + ], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ enumBoolean: false }); + }, + ); + + command.parseAsync(["--no-enum-boolean"], { from: "user" }); + }); + + it("should make command with Boolean option and negative value #2", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean", + type: Boolean, + description: "description", + negative: true, + }, + ], + (options) => { + expect(options).toEqual({ boolean: false }); + }, + ); + + command.parseAsync(["--boolean", "--no-boolean"], { from: "user" }); + }); + + it("should make command with Boolean option and negative value #3", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean", + type: Boolean, + description: "description", + negative: true, + }, + ], + (options) => { + expect(options).toEqual({ boolean: true }); + }, + ); + + command.parseAsync(["--no-boolean", "--boolean"], { from: "user" }); + }); + + it("should make command with Boolean option with default value", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean", + type: Boolean, + description: "description", + defaultValue: false, + }, + ], + (options) => { + expect(options).toEqual({ boolean: false }); + }, + ); + + command.parseAsync([], { from: "user" }); + }); + + it("should make command with String option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "string", + type: String, + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ string: "bar" }); + }, + ); + + command.parseAsync(["--string", "bar"], { from: "user" }); + }); + + it("should make command with String option with alias", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "string", + alias: "s", + type: String, + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ string: "foo" }); + }, + ); + + command.parseAsync(["-s", "foo"], { from: "user" }); + }); + + it("should make command with String option with default value", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "string", + type: String, + description: "description", + defaultValue: "default-value", + }, + ], + (options) => { + expect(options).toEqual({ string: "default-value" }); + }, + ); + + command.parseAsync([], { from: "user" }); + }); + + it("should make command with String option with default value #2", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "string", + type: String, + description: "description", + defaultValue: "default-value", + }, + ], + (options) => { + expect(options).toEqual({ string: "foo" }); + }, + ); + + command.parseAsync(["--string", "foo"], { from: "user" }); + }); + + it('should make command with String option using "=" syntax', async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "string", + type: String, + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ string: "bar" }); + }, + ); + + command.parseAsync(["--string=bar"], { from: "user" }); + }); + + it("should make command with multiple String option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "string", + multiple: true, + type: String, + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ string: ["foo", "bar"] }); + }, + ); + + command.parseAsync(["--string", "foo", "bar"], { from: "user" }); + }); + + it("should make command with multiple String option with default value", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "string", + multiple: true, + type: String, + description: "description", + defaultValue: "string", + }, + ], + (options) => { + expect(options).toEqual({ string: "string" }); + }, + ); + + command.parseAsync([], { from: "user" }); + }); + + it("should make command with multiple String option with default value #2", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "string", + multiple: true, + type: String, + description: "description", + defaultValue: "string", + }, + ], + (options) => { + expect(options).toEqual({ string: ["foo", "bar"] }); + }, + ); + + command.parseAsync(["--string", "foo", "--string", "bar"], { + from: "user", + }); + }); + + it("should make command with multiple String option #2", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "string", + multiple: true, + type: String, + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ string: ["foo", "bar"] }); + }, + ); + + command.parseAsync(["--string", "foo", "--string", "bar"], { + from: "user", + }); + }); + + it("should make command with Number option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "number", + type: Number, + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ number: 12 }); + }, + ); + + command.parseAsync(["--number", "12"], { from: "user" }); + }); + + it("should make command with Number option with default value", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "number", + type: Number, + description: "description", + defaultValue: 20, + }, + ], + (options) => { + expect(options).toEqual({ number: 20 }); + }, + ); + + command.parseAsync([], { from: "user" }); + }); + + it("should make command with multiple Number option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "number", + multiple: true, + type: Number, + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ number: [1, 2] }); + }, + ); + + command.parseAsync(["--number", "1", "--number", "2"], { + from: "user", + }); + }); + + it("should make command with multiple Number option and default value", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "number", + multiple: true, + type: Number, + description: "description", + defaultValue: 50, + }, + ], + (options) => { + expect(options).toEqual({ number: [1, 2] }); + }, + ); + + command.parseAsync(["--number", "1", "--number", "2"], { + from: "user", + }); + }); + + it("should make command with multiple Number option and default value", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "number", + multiple: true, + type: Number, + description: "description", + defaultValue: 50, + }, + ], + (options) => { + expect(options).toEqual({ number: 50 }); + }, + ); + + command.parseAsync([], { from: "user" }); + }); + + it("should make command with custom function type", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "custom", + type: () => { + return "function"; + }, + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ custom: "function" }); + }, + ); + + command.parseAsync(["--custom", "value"], { from: "user" }); + }); + + it("should make command with custom function type and default value", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "custom", + type: () => { + return "function"; + }, + description: "description", + defaultValue: "default", + }, + ], + (options) => { + expect(options).toEqual({ custom: "default" }); + }, + ); + + command.parseAsync([], { from: "user" }); + }); + + it("should make command with multiple custom function type", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "custom", + type: (value, previous = []) => { + return previous.concat([value]); + }, + description: "description", + multiple: true, + }, + ], + (options) => { + expect(options).toEqual({ custom: ["value", "other"] }); + }, + ); + + command.parseAsync(["--custom", "value", "--custom", "other"], { + from: "user", + }); + }); + + it("should make command with multiple custom function type and default value", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "custom", + type: (value, previous = []) => { + return previous.concat([value]); + }, + description: "description", + multiple: true, + defaultValue: 50, + }, + ], + (options) => { + expect(options).toEqual({ custom: 50 }); + }, + ); + + command.parseAsync([], { from: "user" }); + }); + + it("should make command with multiple custom function type and default value #2", async () => { + expect.assertions(1); + + cli.program.commands = []; + + let skipDefault = true; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "custom", + type: (value, previous = []) => { + if (skipDefault) { + previous = []; + skipDefault = false; + } + + return [].concat(previous).concat([value]); + }, + description: "description", + multiple: true, + defaultValue: 50, + }, + ], + (options) => { + expect(options).toEqual({ custom: ["foo"] }); + }, + ); + + command.parseAsync(["--custom", "foo"], { from: "user" }); + }); + + it("should make command with Boolean and String option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-string", + type: [Boolean, String], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ booleanAndString: true }); + }, + ); + + command.parseAsync(["--boolean-and-string"], { from: "user" }); + }); + + it("should make command with Boolean and String option #2", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-string", + type: [Boolean, String], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ booleanAndString: "value" }); + }, + ); + + command.parseAsync(["--boolean-and-string", "value"], { + from: "user", + }); + }); + + it("should make command with multiple Boolean and String option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-string", + type: [Boolean, String], + description: "description", + multiple: true, + }, + ], + (options) => { + expect(options).toEqual({ booleanAndString: true }); + }, + ); + + command.parseAsync(["--boolean-and-string"], { from: "user" }); + }); + + it("should make command with multiple Boolean and String option #2", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-string", + type: [Boolean, String], + description: "description", + multiple: true, + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndString: ["bar", "baz"], + }); + }, + ); + + command.parseAsync(["--boolean-and-string", "bar", "--boolean-and-string", "baz"], { + from: "user", + }); + }); + + it("should make command with Boolean and String option and negative", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-string", + type: [Boolean, String], + description: "description", + negative: true, + }, + ], + (options) => { + expect(options).toEqual({ booleanAndString: true }); + }, + ); + + command.parseAsync(["--boolean-and-string"], { from: "user" }); + }); + + it("should make command with Boolean and String option and negative #2", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-string", + type: [Boolean, String], + description: "description", + negative: true, + }, + ], + (options) => { + expect(options).toEqual({ booleanAndString: "foo" }); + }, + ); + + command.parseAsync(["--boolean-and-string", "foo"], { + from: "user", + }); + }); + + it("should make command with Boolean and String option and negative #3", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-string", + type: [Boolean, String], + description: "description", + negative: true, + }, + ], + (options) => { + expect(options).toEqual({ booleanAndString: false }); + }, + ); + + command.parseAsync(["--no-boolean-and-string"], { from: "user" }); + }); + + it("should make command with Boolean and Number option", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number", + type: [Boolean, Number], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ booleanAndNumber: true }); + }, + ); + + command.parseAsync(["--boolean-and-number"], { from: "user" }); + }); + + it("should make command with Boolean and Number option #2", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number", + type: [Boolean, Number], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ booleanAndNumber: 12 }); + }, + ); + + command.parseAsync(["--boolean-and-number", "12"], { + from: "user", + }); + }); + + it("should make command with array Boolean type", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean", + type: [Boolean], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ boolean: true }); + }, + ); + + command.parseAsync(["--boolean"], { from: "user" }); + }); + + it("should make command with Boolean and Number and String type", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: true, + }); + }, + ); + + command.parseAsync(["--boolean-and-number-and-string"], { + from: "user", + }); + }); + + it("should make command with Boolean and Number and String type #2", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ booleanAndNumberAndString: 12 }); + }, + ); + + command.parseAsync(["--boolean-and-number-and-string", "12"], { + from: "user", + }); + }); + + it("should make command with Boolean and Number and String type #3", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: "bar", + }); + }, + ); + + command.parseAsync(["--boolean-and-number-and-string", "bar"], { + from: "user", + }); + }); + + it("should make command with Boolean and Number and String type and default value", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + defaultValue: "default", + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: "default", + }); + }, + ); + + command.parseAsync([], { from: "user" }); + }); + + it("should make command with Boolean and Number and String type and default value #2", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + defaultValue: "default", + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: "foo", + }); + }, + ); + + command.parseAsync(["--boolean-and-number-and-string", "foo"], { + from: "user", + }); + }); + + it("should make command with Boolean and Number and String type and default value #3", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + defaultValue: "default", + }, + ], + (options) => { + expect(options).toEqual({ booleanAndNumberAndString: 12 }); + }, + ); + + command.parseAsync(["--boolean-and-number-and-string", "12"], { + from: "user", + }); + }); + + it("should make command with Boolean and Number and String type and default value #4", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + defaultValue: "default", + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: "default", + }); + }, + ); + + command.parseAsync(["--boolean-and-number-and-string"], { + from: "user", + }); + }); + + it("should make command with multiple Boolean and Number and String type", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + multiple: true, + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: true, + }); + }, + ); + + command.parseAsync(["--boolean-and-number-and-string"], { + from: "user", + }); + }); + + it("should make command with multiple Boolean and Number and String type #2", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + multiple: true, + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: ["foo"], + }); + }, + ); + + command.parseAsync(["--boolean-and-number-and-string", "foo"], { + from: "user", + }); + }); + + it("should make command with multiple Boolean and Number and String type #3", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + multiple: true, + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: [12], + }); + }, + ); + + command.parseAsync(["--boolean-and-number-and-string", "12"], { + from: "user", + }); + }); + + it("should make command with multiple Boolean and Number and String type #4", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + multiple: true, + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: ["foo", "bar"], + }); + }, + ); + + command.parseAsync( + ["--boolean-and-number-and-string", "foo", "--boolean-and-number-and-string", "bar"], + { from: "user" }, + ); + }); + + it("should make command with multiple Boolean and Number and String type #5", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + multiple: true, + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: ["foo", 12], + }); + }, + ); + + command.parseAsync( + ["--boolean-and-number-and-string", "foo", "--boolean-and-number-and-string", "12"], + { from: "user" }, + ); + }); + + it("should make command with multiple Boolean and Number and String and default value", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + multiple: true, + defaultValue: "default", + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: "default", + }); + }, + ); + + command.parseAsync([], { from: "user" }); + }); + + it("should make command with multiple Boolean and Number and String and default value #2", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + multiple: true, + defaultValue: "default", + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: ["foo"], + }); + }, + ); + + command.parseAsync(["--boolean-and-number-and-string", "foo"], { + from: "user", + }); + }); + + it("should make command with multiple Boolean and Number and String and default value #3", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + multiple: true, + defaultValue: "default", + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: [12], + }); + }, + ); + + command.parseAsync(["--boolean-and-number-and-string", "12"], { + from: "user", + }); + }); + + it("should make command with multiple Boolean and Number and String and default value #4", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean-and-number-and-string", + type: [Boolean, Number, String], + description: "description", + multiple: true, + defaultValue: "default", + }, + ], + (options) => { + expect(options).toEqual({ + booleanAndNumberAndString: ["foo", 12], + }); + }, + ); + + command.parseAsync( + ["--boolean-and-number-and-string", "foo", "--boolean-and-number-and-string", "12"], + { from: "user" }, + ); + }); + + it("should make command with array of unknown types", async () => { + expect.assertions(1); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "unknown", + type: [Boolean, Symbol], + description: "description", + }, + ], + (options) => { + expect(options).toEqual({ unknown: "foo" }); + }, + ); + + command.parseAsync(["--unknown", "foo"], { from: "user" }); + }); + + it("should make command with Boolean option and use description", async () => { + expect.assertions(2); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean", + type: Boolean, + description: "Description", + negatedDescription: "Negated description", + }, + ], + (options) => { + expect(options).toEqual({ boolean: true }); + }, + ); + + command.parseAsync(["--boolean"], { from: "user" }); + + expect(command.helpInformation()).toContain("--boolean Description"); + }); + + it("should make command with Boolean option and negative value and use negatedDescription", async () => { + expect.assertions(2); + + cli.program.commands = []; + + const command = await cli.makeCommand( + { + name: "command", + }, + [ + { + name: "boolean", + type: Boolean, + description: "description", + negative: true, + negatedDescription: "Negated description", + }, + ], + (options) => { + expect(options).toEqual({ boolean: false }); + }, + ); + + command.parseAsync(["--no-boolean"], { from: "user" }); + + expect(command.helpInformation()).toContain("--no-boolean Negated description"); + }); + }); + + describe("custom help output", () => { + let consoleSpy; + let exitSpy; + + beforeEach(async () => { + consoleSpy = jest.spyOn(global.console, "log"); + exitSpy = jest.spyOn(process, "exit").mockImplementation(() => {}); + + cli.program.option("--color [value]", "any color", "blue"); + await new Promise((resolve, reject) => { + try { + cli.run(["help", "--color"], { from: "user" }); + resolve(); + } catch (error) { + reject(error); + } + }); + }); + + afterEach(async () => { + consoleSpy.mockRestore(); + exitSpy.mockRestore(); + }); + + it("should display help information", () => { + expect(exitSpy).toHaveBeenCalledWith(0); + expect(consoleSpy.mock.calls).toMatchSnapshot(); }); + }); }); diff --git a/test/api/capitalizeFirstLetter.test.js b/test/api/capitalizeFirstLetter.test.js index bff15eeb923..060bf995c01 100755 --- a/test/api/capitalizeFirstLetter.test.js +++ b/test/api/capitalizeFirstLetter.test.js @@ -1,11 +1,11 @@ const capitalizeFirstLetter = require("../../packages/webpack-cli/lib/utils/capitalize-first-letter"); describe("capitalizeFirstLetter", () => { - it("should capitalize first letter", () => { - expect(capitalizeFirstLetter("webpack")).toEqual("Webpack"); - }); + it("should capitalize first letter", () => { + expect(capitalizeFirstLetter("webpack")).toEqual("Webpack"); + }); - it("should return an empty string on passing a non-string value", () => { - expect(capitalizeFirstLetter(true)).toEqual(""); - }); + it("should return an empty string on passing a non-string value", () => { + expect(capitalizeFirstLetter(true)).toEqual(""); + }); }); diff --git a/test/api/generators/helpers.test.js b/test/api/generators/helpers.test.js index 3996c9bb275..bb61ca6f2cd 100644 --- a/test/api/generators/helpers.test.js +++ b/test/api/generators/helpers.test.js @@ -1,13 +1,13 @@ const path = require("path"); const utilsDirectory = { - cli: "../../../packages/webpack-cli/lib/utils", - generators: "../../../packages/generators/src/utils", + cli: "../../../packages/webpack-cli/lib/utils", + generators: "../../../packages/generators/src/utils", }; jest.setMock(path.join(utilsDirectory.cli, "get-available-installers"), jest.fn()); jest.mock(path.join(utilsDirectory.generators, "scaffold-utils"), () => ({ - List: jest.fn(), + List: jest.fn(), })); const getAvailableInstallers = require(path.join(utilsDirectory.cli, "get-available-installers")); @@ -18,56 +18,56 @@ const { getInstaller, getTemplate } = require(path.join(utilsDirectory.generator const { List } = require(path.join(utilsDirectory.generators, "scaffold-utils")); const context = { - prompt: () => {}, - supportedTemplates: ["default"], - utils: { - getAvailableInstallers, - getPackageManager, - logger, - }, + prompt: () => {}, + supportedTemplates: ["default"], + utils: { + getAvailableInstallers, + getPackageManager, + logger, + }, }; describe("helpers", () => { - it("getInstaller() returns the available installer", async () => { - // Multiple installers are not available - getAvailableInstallers.mockReturnValue(["npm"]); + it("getInstaller() returns the available installer", async () => { + // Multiple installers are not available + getAvailableInstallers.mockReturnValue(["npm"]); - // Invoke the helper function - const installer = await getInstaller.call(context); - expect(installer).toBe("npm"); - }); + // Invoke the helper function + const installer = await getInstaller.call(context); + expect(installer).toBe("npm"); + }); - it("getInstaller() invokes a List prompt if multiple installers are available", async () => { - // Multiple installers are available - getAvailableInstallers.mockReturnValue(["npm", "yarn", "pnpm"]); + it("getInstaller() invokes a List prompt if multiple installers are available", async () => { + // Multiple installers are available + getAvailableInstallers.mockReturnValue(["npm", "yarn", "pnpm"]); - // User chose "pnpm" - List.mockReturnValue({ packager: "pnpm" }); + // User chose "pnpm" + List.mockReturnValue({ packager: "pnpm" }); - // Invoke the helper function - const installer = await getInstaller.call(context); - expect(installer).toBe("pnpm"); - }); + // Invoke the helper function + const installer = await getInstaller.call(context); + expect(installer).toBe("pnpm"); + }); - it("getTemplate() returns with the valid template", async () => { - context.template = "default"; + it("getTemplate() returns with the valid template", async () => { + context.template = "default"; - // Invoke the helper function - const template = await getTemplate.call(context); - expect(template).toBe("default"); - }); + // Invoke the helper function + const template = await getTemplate.call(context); + expect(template).toBe("default"); + }); - it("getTemplate() invokes a List prompt on supplying an invalid template", async () => { - context.template = "unknown"; + it("getTemplate() invokes a List prompt on supplying an invalid template", async () => { + context.template = "unknown"; - // User chose "default" - List.mockReturnValue({ selectedTemplate: "default" }); + // User chose "default" + List.mockReturnValue({ selectedTemplate: "default" }); - const loggerMock = jest.spyOn(logger, "warn").mockImplementation(() => {}); + const loggerMock = jest.spyOn(logger, "warn").mockImplementation(() => {}); - // Invoke the helper function` - const template = await getTemplate.call(context); - expect(template).toBe("default"); - expect(loggerMock).toHaveBeenCalled(); - }); + // Invoke the helper function` + const template = await getTemplate.call(context); + expect(template).toBe("default"); + expect(loggerMock).toHaveBeenCalled(); + }); }); diff --git a/test/api/generators/scaffold-utils.test.js b/test/api/generators/scaffold-utils.test.js index 93860e47743..18e39c85679 100755 --- a/test/api/generators/scaffold-utils.test.js +++ b/test/api/generators/scaffold-utils.test.js @@ -1,95 +1,86 @@ const { - Confirm, - List, - InputValidate, - Input, - // eslint-disable-next-line node/no-missing-require + Confirm, + List, + InputValidate, + Input, + // eslint-disable-next-line node/no-missing-require } = require("../../../packages/generators/src/utils/scaffold-utils"); describe("utils", () => { - let mockSelf; + let mockSelf; - beforeEach(() => { - mockSelf = { - prompt: (arg) => { - return arg[0]; - }, - }; + beforeEach(() => { + mockSelf = { + prompt: (arg) => { + return arg[0]; + }, + }; + }); + describe("Inquirer", () => { + it("should emulate a prompt for List", () => { + expect(List(mockSelf, "entry", "does it work?", ["Yes", "Maybe"], "Yes")).toEqual({ + choices: ["Yes", "Maybe"], + type: "list", + name: "entry", + message: "does it work?", + default: "Yes", + }); }); - describe("Inquirer", () => { - it("should emulate a prompt for List", () => { - expect(List(mockSelf, "entry", "does it work?", ["Yes", "Maybe"], "Yes")).toEqual({ - choices: ["Yes", "Maybe"], - type: "list", - name: "entry", - message: "does it work?", - default: "Yes", - }); - }); - it("should make default value for a List", () => { - expect(List(mockSelf, "entry", "does it work?", ["Yes", "Maybe"], "Yes", true)).toEqual( - { - entry: "Yes", - }, - ); - }); + it("should make default value for a List", () => { + expect(List(mockSelf, "entry", "does it work?", ["Yes", "Maybe"], "Yes", true)).toEqual({ + entry: "Yes", + }); + }); - it("should emulate a prompt for list input", () => { - expect(Input(mockSelf, "plugins", "what is your plugin?", "openJSF")).toEqual({ - type: "input", - name: "plugins", - message: "what is your plugin?", - default: "openJSF", - }); - }); + it("should emulate a prompt for list input", () => { + expect(Input(mockSelf, "plugins", "what is your plugin?", "openJSF")).toEqual({ + type: "input", + name: "plugins", + message: "what is your plugin?", + default: "openJSF", + }); + }); - it("should return a default Input object value", () => { - expect(Input(mockSelf, "plugins", "what is your plugin?", "my-plugin", true)).toEqual({ - plugins: "my-plugin", - }); - }); + it("should return a default Input object value", () => { + expect(Input(mockSelf, "plugins", "what is your plugin?", "my-plugin", true)).toEqual({ + plugins: "my-plugin", + }); + }); - it("should emulate a prompt for confirm", () => { - expect(Confirm(mockSelf, "context", "what is your context?")).toEqual({ - name: "context", - default: true, - message: "what is your context?", - type: "confirm", - }); - }); + it("should emulate a prompt for confirm", () => { + expect(Confirm(mockSelf, "context", "what is your context?")).toEqual({ + name: "context", + default: true, + message: "what is your context?", + type: "confirm", + }); + }); - it("should make a Confirm object with yes as default", () => { - expect(Confirm(mockSelf, "context", "what is your context?", true, true)).toEqual({ - context: true, - }); - }); + it("should make a Confirm object with yes as default", () => { + expect(Confirm(mockSelf, "context", "what is your context?", true, true)).toEqual({ + context: true, + }); + }); - it("should make an Input object with validation", () => { - expect( - InputValidate(mockSelf, "plugins", "what is your plugin?", () => true), - ).toMatchSnapshot(); - }); + it("should make an Input object with validation", () => { + expect( + InputValidate(mockSelf, "plugins", "what is your plugin?", () => true), + ).toMatchSnapshot(); + }); - it("should make an Input object with validation and default value", () => { - expect( - InputValidate(mockSelf, "plugins", "what is your plugin?", () => true, "my-plugin"), - ).toMatchSnapshot(); - }); + it("should make an Input object with validation and default value", () => { + expect( + InputValidate(mockSelf, "plugins", "what is your plugin?", () => true, "my-plugin"), + ).toMatchSnapshot(); + }); - it("should return a default Input object with validation and default value", () => { - expect( - InputValidate( - mockSelf, - "plugins", - "what is your plugin?", - () => true, - "my-plugin", - true, - ), - ).toEqual({ - plugins: "my-plugin", - }); - }); + it("should return a default Input object with validation and default value", () => { + expect( + InputValidate(mockSelf, "plugins", "what is your plugin?", () => true, "my-plugin", true), + ).toEqual({ + plugins: "my-plugin", + }); }); + }); }); diff --git a/test/api/get-package-manager.test.js b/test/api/get-package-manager.test.js index d790ec0fc57..9bcb25da85a 100644 --- a/test/api/get-package-manager.test.js +++ b/test/api/get-package-manager.test.js @@ -2,12 +2,12 @@ const fs = require("fs"); const path = require("path"); const syncMock = jest.fn(() => { - return { - stdout: "1.0.0", - }; + return { + stdout: "1.0.0", + }; }); jest.setMock("execa", { - sync: syncMock, + sync: syncMock, }); const utilsDirectory = path.resolve(__dirname, "../../packages/webpack-cli/lib/utils/"); const getPackageManager = require(path.resolve(utilsDirectory, "./get-package-manager")); @@ -18,93 +18,93 @@ jest.setMock("global-modules", globalModulesNpmValue); jest.setMock(path.resolve(utilsDirectory, "./prompt"), jest.fn()); describe("packageUtils", () => { - describe("getPackageManager", () => { - const testYarnLockPath = path.resolve(__dirname, "test-yarn-lock"); - const testNpmLockPath = path.resolve(__dirname, "test-npm-lock"); - const testPnpmLockPath = path.resolve(__dirname, "test-pnpm-lock"); - const testNpmAndPnpmPath = path.resolve(__dirname, "test-npm-and-pnpm"); - const testNpmAndYarnPath = path.resolve(__dirname, "test-npm-and-yarn"); - const testYarnAndPnpmPath = path.resolve(__dirname, "test-yarn-and-pnpm"); - const testAllPath = path.resolve(__dirname, "test-all-lock"); - const noLockPath = path.resolve(__dirname, "no-lock-files"); + describe("getPackageManager", () => { + const testYarnLockPath = path.resolve(__dirname, "test-yarn-lock"); + const testNpmLockPath = path.resolve(__dirname, "test-npm-lock"); + const testPnpmLockPath = path.resolve(__dirname, "test-pnpm-lock"); + const testNpmAndPnpmPath = path.resolve(__dirname, "test-npm-and-pnpm"); + const testNpmAndYarnPath = path.resolve(__dirname, "test-npm-and-yarn"); + const testYarnAndPnpmPath = path.resolve(__dirname, "test-yarn-and-pnpm"); + const testAllPath = path.resolve(__dirname, "test-all-lock"); + const noLockPath = path.resolve(__dirname, "no-lock-files"); - const cwdSpy = jest.spyOn(process, "cwd"); + const cwdSpy = jest.spyOn(process, "cwd"); - beforeAll(() => { - // package-lock.json is ignored by .gitignore, so we simply - // write a lockfile here for testing - if (!fs.existsSync(testNpmLockPath)) { - fs.mkdirSync(testNpmLockPath); - } - fs.writeFileSync(path.resolve(testNpmLockPath, "package-lock.json"), ""); - fs.writeFileSync(path.resolve(testNpmAndPnpmPath, "package-lock.json"), ""); - fs.writeFileSync(path.resolve(testNpmAndYarnPath, "package-lock.json"), ""); - fs.writeFileSync(path.resolve(testAllPath, "package-lock.json"), ""); - }); + beforeAll(() => { + // package-lock.json is ignored by .gitignore, so we simply + // write a lockfile here for testing + if (!fs.existsSync(testNpmLockPath)) { + fs.mkdirSync(testNpmLockPath); + } + fs.writeFileSync(path.resolve(testNpmLockPath, "package-lock.json"), ""); + fs.writeFileSync(path.resolve(testNpmAndPnpmPath, "package-lock.json"), ""); + fs.writeFileSync(path.resolve(testNpmAndYarnPath, "package-lock.json"), ""); + fs.writeFileSync(path.resolve(testAllPath, "package-lock.json"), ""); + }); - beforeEach(() => { - syncMock.mockClear(); - }); + beforeEach(() => { + syncMock.mockClear(); + }); - it("should find yarn.lock", () => { - cwdSpy.mockReturnValue(testYarnLockPath); - expect(getPackageManager()).toEqual("yarn"); - expect(syncMock.mock.calls.length).toEqual(0); - }); + it("should find yarn.lock", () => { + cwdSpy.mockReturnValue(testYarnLockPath); + expect(getPackageManager()).toEqual("yarn"); + expect(syncMock.mock.calls.length).toEqual(0); + }); - it("should find package-lock.json", () => { - cwdSpy.mockReturnValue(testNpmLockPath); - expect(getPackageManager()).toEqual("npm"); - expect(syncMock.mock.calls.length).toEqual(0); - }); + it("should find package-lock.json", () => { + cwdSpy.mockReturnValue(testNpmLockPath); + expect(getPackageManager()).toEqual("npm"); + expect(syncMock.mock.calls.length).toEqual(0); + }); - it("should find pnpm-lock.yaml", () => { - cwdSpy.mockReturnValue(testPnpmLockPath); - expect(getPackageManager()).toEqual("pnpm"); - expect(syncMock.mock.calls.length).toEqual(0); - }); + it("should find pnpm-lock.yaml", () => { + cwdSpy.mockReturnValue(testPnpmLockPath); + expect(getPackageManager()).toEqual("pnpm"); + expect(syncMock.mock.calls.length).toEqual(0); + }); - it("should prioritize npm over pnpm", () => { - cwdSpy.mockReturnValue(testNpmAndPnpmPath); - expect(getPackageManager()).toEqual("npm"); - expect(syncMock.mock.calls.length).toEqual(0); - }); + it("should prioritize npm over pnpm", () => { + cwdSpy.mockReturnValue(testNpmAndPnpmPath); + expect(getPackageManager()).toEqual("npm"); + expect(syncMock.mock.calls.length).toEqual(0); + }); - it("should prioritize npm over yarn", () => { - cwdSpy.mockReturnValue(testNpmAndYarnPath); - expect(getPackageManager()).toEqual("npm"); - expect(syncMock.mock.calls.length).toEqual(0); - }); + it("should prioritize npm over yarn", () => { + cwdSpy.mockReturnValue(testNpmAndYarnPath); + expect(getPackageManager()).toEqual("npm"); + expect(syncMock.mock.calls.length).toEqual(0); + }); - it("should prioritize yarn over pnpm", () => { - cwdSpy.mockReturnValue(testYarnAndPnpmPath); - expect(getPackageManager()).toEqual("yarn"); - expect(syncMock.mock.calls.length).toEqual(0); - }); + it("should prioritize yarn over pnpm", () => { + cwdSpy.mockReturnValue(testYarnAndPnpmPath); + expect(getPackageManager()).toEqual("yarn"); + expect(syncMock.mock.calls.length).toEqual(0); + }); - it("should prioritize npm with many lock files", () => { - cwdSpy.mockReturnValue(testAllPath); - expect(getPackageManager()).toEqual("npm"); - expect(syncMock.mock.calls.length).toEqual(0); - }); + it("should prioritize npm with many lock files", () => { + cwdSpy.mockReturnValue(testAllPath); + expect(getPackageManager()).toEqual("npm"); + expect(syncMock.mock.calls.length).toEqual(0); + }); - it("should prioritize global npm over other package managers", () => { - cwdSpy.mockReturnValue(noLockPath); - expect(getPackageManager()).toEqual("npm"); - expect(syncMock.mock.calls.length).toEqual(1); - }); + it("should prioritize global npm over other package managers", () => { + cwdSpy.mockReturnValue(noLockPath); + expect(getPackageManager()).toEqual("npm"); + expect(syncMock.mock.calls.length).toEqual(1); + }); - it("should throw error if no package manager is found", () => { - syncMock.mockImplementation(() => { - throw new Error(); - }); - const mockExit = jest.spyOn(process, "exit").mockImplementation(() => {}); - // Do not print warning in CI - const consoleMock = jest.spyOn(console, "error").mockImplementation(() => {}); - expect(getPackageManager()).toBeFalsy(); - expect(mockExit).toBeCalledWith(2); - expect(consoleMock).toHaveBeenCalledTimes(1); - expect(syncMock.mock.calls.length).toEqual(3); // 3 calls for npm, yarn and pnpm - }); + it("should throw error if no package manager is found", () => { + syncMock.mockImplementation(() => { + throw new Error(); + }); + const mockExit = jest.spyOn(process, "exit").mockImplementation(() => {}); + // Do not print warning in CI + const consoleMock = jest.spyOn(console, "error").mockImplementation(() => {}); + expect(getPackageManager()).toBeFalsy(); + expect(mockExit).toBeCalledWith(2); + expect(consoleMock).toHaveBeenCalledTimes(1); + expect(syncMock.mock.calls.length).toEqual(3); // 3 calls for npm, yarn and pnpm }); + }); }); diff --git a/test/api/prompt-installation.test.js b/test/api/prompt-installation.test.js index 691b8b123b8..b3281c6f8fe 100644 --- a/test/api/prompt-installation.test.js +++ b/test/api/prompt-installation.test.js @@ -20,102 +20,102 @@ const runCommand = require(path.resolve(utilsDirectory, "./run-command")); const prompt = require(path.resolve(utilsDirectory, "./prompt")); describe("promptInstallation", () => { - beforeAll(() => { - packageExists.mockReturnValue(true); - }); - beforeEach(() => { - runCommand.mockClear(); - prompt.mockClear(); - }); + beforeAll(() => { + packageExists.mockReturnValue(true); + }); + beforeEach(() => { + runCommand.mockClear(); + prompt.mockClear(); + }); - it("should prompt to install using npm if npm is package manager", async () => { - prompt.mockReturnValue(true); + it("should prompt to install using npm if npm is package manager", async () => { + prompt.mockReturnValue(true); - getPackageManager.mockReturnValue("npm"); + getPackageManager.mockReturnValue("npm"); - const preMessage = jest.fn(); - const promptResult = await promptInstallation("test-package", preMessage); + const preMessage = jest.fn(); + const promptResult = await promptInstallation("test-package", preMessage); - expect(promptResult).toBeTruthy(); - expect(preMessage.mock.calls.length).toEqual(1); - expect(prompt.mock.calls.length).toEqual(1); - expect(runCommand.mock.calls.length).toEqual(1); - expect(stripAnsi(prompt.mock.calls[0][0].message)).toContain( - "Would you like to install 'test-package' package? (That will run 'npm install -D test-package')", - ); + expect(promptResult).toBeTruthy(); + expect(preMessage.mock.calls.length).toEqual(1); + expect(prompt.mock.calls.length).toEqual(1); + expect(runCommand.mock.calls.length).toEqual(1); + expect(stripAnsi(prompt.mock.calls[0][0].message)).toContain( + "Would you like to install 'test-package' package? (That will run 'npm install -D test-package')", + ); - // install the package using npm - expect(runCommand.mock.calls[0][0]).toEqual("npm install -D test-package"); - }); + // install the package using npm + expect(runCommand.mock.calls[0][0]).toEqual("npm install -D test-package"); + }); - it("should prompt to install using yarn if yarn is package manager", async () => { - prompt.mockReturnValue({ installConfirm: true }); + it("should prompt to install using yarn if yarn is package manager", async () => { + prompt.mockReturnValue({ installConfirm: true }); - getPackageManager.mockReturnValue("yarn"); + getPackageManager.mockReturnValue("yarn"); - const promptResult = await promptInstallation("test-package"); + const promptResult = await promptInstallation("test-package"); - expect(promptResult).toBeTruthy(); - expect(prompt.mock.calls.length).toEqual(1); - expect(runCommand.mock.calls.length).toEqual(1); - expect(stripAnsi(prompt.mock.calls[0][0].message)).toContain( - "Would you like to install 'test-package' package? (That will run 'yarn add -D test-package')", - ); + expect(promptResult).toBeTruthy(); + expect(prompt.mock.calls.length).toEqual(1); + expect(runCommand.mock.calls.length).toEqual(1); + expect(stripAnsi(prompt.mock.calls[0][0].message)).toContain( + "Would you like to install 'test-package' package? (That will run 'yarn add -D test-package')", + ); - // install the package using yarn - expect(runCommand.mock.calls[0][0]).toEqual("yarn add -D test-package"); - }); + // install the package using yarn + expect(runCommand.mock.calls[0][0]).toEqual("yarn add -D test-package"); + }); - it("should prompt to install using pnpm if pnpm is package manager", async () => { - prompt.mockReturnValue({ installConfirm: true }); + it("should prompt to install using pnpm if pnpm is package manager", async () => { + prompt.mockReturnValue({ installConfirm: true }); - getPackageManager.mockReturnValue("pnpm"); + getPackageManager.mockReturnValue("pnpm"); - const promptResult = await promptInstallation("test-package"); + const promptResult = await promptInstallation("test-package"); - expect(promptResult).toBeTruthy(); - expect(prompt.mock.calls.length).toEqual(1); - expect(runCommand.mock.calls.length).toEqual(1); - expect(stripAnsi(prompt.mock.calls[0][0].message)).toContain( - "Would you like to install 'test-package' package? (That will run 'pnpm install -D test-package')", - ); + expect(promptResult).toBeTruthy(); + expect(prompt.mock.calls.length).toEqual(1); + expect(runCommand.mock.calls.length).toEqual(1); + expect(stripAnsi(prompt.mock.calls[0][0].message)).toContain( + "Would you like to install 'test-package' package? (That will run 'pnpm install -D test-package')", + ); - // install the package using npm - expect(runCommand.mock.calls[0][0]).toEqual("pnpm install -D test-package"); - }); + // install the package using npm + expect(runCommand.mock.calls[0][0]).toEqual("pnpm install -D test-package"); + }); - it("should support pre message", async () => { - prompt.mockReturnValue({ installConfirm: true }); + it("should support pre message", async () => { + prompt.mockReturnValue({ installConfirm: true }); - getPackageManager.mockReturnValue("npm"); + getPackageManager.mockReturnValue("npm"); - const preMessage = jest.fn(); - const promptResult = await promptInstallation("test-package", preMessage); + const preMessage = jest.fn(); + const promptResult = await promptInstallation("test-package", preMessage); - expect(promptResult).toBeTruthy(); - expect(preMessage.mock.calls.length).toEqual(1); - expect(prompt.mock.calls.length).toEqual(1); - expect(runCommand.mock.calls.length).toEqual(1); - expect(stripAnsi(prompt.mock.calls[0][0].message)).toContain( - "Would you like to install 'test-package' package? (That will run 'npm install -D test-package')", - ); + expect(promptResult).toBeTruthy(); + expect(preMessage.mock.calls.length).toEqual(1); + expect(prompt.mock.calls.length).toEqual(1); + expect(runCommand.mock.calls.length).toEqual(1); + expect(stripAnsi(prompt.mock.calls[0][0].message)).toContain( + "Would you like to install 'test-package' package? (That will run 'npm install -D test-package')", + ); - // install the package using npm - expect(runCommand.mock.calls[0][0]).toEqual("npm install -D test-package"); - }); + // install the package using npm + expect(runCommand.mock.calls[0][0]).toEqual("npm install -D test-package"); + }); - it("should not install if install is not confirmed", async () => { - prompt.mockReturnValue(false); + it("should not install if install is not confirmed", async () => { + prompt.mockReturnValue(false); - const mockExit = jest.spyOn(process, "exit").mockImplementation(() => {}); - const promptResult = await promptInstallation("test-package"); + const mockExit = jest.spyOn(process, "exit").mockImplementation(() => {}); + const promptResult = await promptInstallation("test-package"); - expect(promptResult).toBeUndefined(); - expect(prompt.mock.calls.length).toEqual(1); - // runCommand should not be called, because the installation is not confirmed - expect(runCommand.mock.calls.length).toEqual(0); - expect(mockExit.mock.calls[0][0]).toEqual(2); + expect(promptResult).toBeUndefined(); + expect(prompt.mock.calls.length).toEqual(1); + // runCommand should not be called, because the installation is not confirmed + expect(runCommand.mock.calls.length).toEqual(0); + expect(mockExit.mock.calls[0][0]).toEqual(2); - mockExit.mockRestore(); - }); + mockExit.mockRestore(); + }); }); diff --git a/test/api/prompt.test.js b/test/api/prompt.test.js index 752f2aafb49..01805868a57 100755 --- a/test/api/prompt.test.js +++ b/test/api/prompt.test.js @@ -2,65 +2,65 @@ const prompt = require("../../packages/webpack-cli/lib/utils/prompt"); const { Writable } = require("stream"); describe("prompt", () => { - class MyWritable extends Writable { - constructor(answer) { - super(); - this.answer = answer; - } - _write(data, e, cb) { - process.stdin.push(this.answer); - cb(null, data); - } + class MyWritable extends Writable { + constructor(answer) { + super(); + this.answer = answer; } + _write(data, e, cb) { + process.stdin.push(this.answer); + cb(null, data); + } + } - it("should work with default response", async () => { - const myWritable = new MyWritable("\r"); - - const resultSuccess = await prompt({ - message: "message", - defaultResponse: "yes", - stream: myWritable, - }); + it("should work with default response", async () => { + const myWritable = new MyWritable("\r"); - const resultFail = await prompt({ - message: "message", - defaultResponse: "no", - stream: myWritable, - }); + const resultSuccess = await prompt({ + message: "message", + defaultResponse: "yes", + stream: myWritable, + }); - expect(resultSuccess).toBe(true); - expect(resultFail).toBe(false); + const resultFail = await prompt({ + message: "message", + defaultResponse: "no", + stream: myWritable, }); - it('should work with "yes" && "y" response', async () => { - const myWritable1 = new MyWritable("yes\r"); - const myWritable2 = new MyWritable("y\r"); + expect(resultSuccess).toBe(true); + expect(resultFail).toBe(false); + }); - const resultSuccess1 = await prompt({ - message: "message", - defaultResponse: "no", - stream: myWritable1, - }); + it('should work with "yes" && "y" response', async () => { + const myWritable1 = new MyWritable("yes\r"); + const myWritable2 = new MyWritable("y\r"); - const resultSuccess2 = await prompt({ - message: "message", - defaultResponse: "no", - stream: myWritable2, - }); + const resultSuccess1 = await prompt({ + message: "message", + defaultResponse: "no", + stream: myWritable1, + }); - expect(resultSuccess1).toBe(true); - expect(resultSuccess2).toBe(true); + const resultSuccess2 = await prompt({ + message: "message", + defaultResponse: "no", + stream: myWritable2, }); - it("should work with unknown response", async () => { - const myWritable = new MyWritable("unknown\r"); + expect(resultSuccess1).toBe(true); + expect(resultSuccess2).toBe(true); + }); - const result = await prompt({ - message: "message", - defaultResponse: "yes", - stream: myWritable, - }); + it("should work with unknown response", async () => { + const myWritable = new MyWritable("unknown\r"); - expect(result).toBe(false); + const result = await prompt({ + message: "message", + defaultResponse: "yes", + stream: myWritable, }); + + expect(result).toBe(false); + }); }); diff --git a/test/api/resolveConfig/env.webpack.config.cjs b/test/api/resolveConfig/env.webpack.config.cjs index ef09161948b..6195f34e444 100644 --- a/test/api/resolveConfig/env.webpack.config.cjs +++ b/test/api/resolveConfig/env.webpack.config.cjs @@ -1,7 +1,7 @@ module.exports = function (env) { - const configName = env.name; - return { - name: configName, - mode: env.test ? "staging" : "production", - }; + const configName = env.name; + return { + name: configName, + mode: env.test ? "staging" : "production", + }; }; diff --git a/test/api/resolveConfig/resolveConfig.test.js b/test/api/resolveConfig/resolveConfig.test.js index 83450146495..2d9ef6ef905 100644 --- a/test/api/resolveConfig/resolveConfig.test.js +++ b/test/api/resolveConfig/resolveConfig.test.js @@ -8,76 +8,76 @@ const promiseConfig = require("./webpack.promise.config.cjs"); const cli = new WebpackCLI(); describe("resolveConfig", function () { - it("should handle merge properly", async () => { - const result = await cli.resolveConfig({ - merge: true, - config: [resolve(__dirname, "./webpack.config.cjs")], - }); - - const expectedOptions = { - output: { - filename: "./dist-commonjs.js", - libraryTarget: "commonjs", - }, - entry: "./a.js", - name: "amd", - mode: "production", - devtool: "eval-cheap-module-source-map", - target: "node", - }; - - expect(result.options).toEqual(expectedOptions); + it("should handle merge properly", async () => { + const result = await cli.resolveConfig({ + merge: true, + config: [resolve(__dirname, "./webpack.config.cjs")], }); - it("should return array for multiple config", async () => { - const result = await cli.resolveConfig({ - config: [ - resolve(__dirname, "./webpack.config1.cjs"), - resolve(__dirname, "./webpack.config2.cjs"), - ], - }); - const expectedOptions = [config1, config2]; + const expectedOptions = { + output: { + filename: "./dist-commonjs.js", + libraryTarget: "commonjs", + }, + entry: "./a.js", + name: "amd", + mode: "production", + devtool: "eval-cheap-module-source-map", + target: "node", + }; - expect(result.options).toEqual(expectedOptions); + expect(result.options).toEqual(expectedOptions); + }); + + it("should return array for multiple config", async () => { + const result = await cli.resolveConfig({ + config: [ + resolve(__dirname, "./webpack.config1.cjs"), + resolve(__dirname, "./webpack.config2.cjs"), + ], }); + const expectedOptions = [config1, config2]; - it("should return config object for single config", async () => { - const result = await cli.resolveConfig({ - config: [resolve(__dirname, "./webpack.config1.cjs")], - }); + expect(result.options).toEqual(expectedOptions); + }); - expect(result.options).toEqual(config1); + it("should return config object for single config", async () => { + const result = await cli.resolveConfig({ + config: [resolve(__dirname, "./webpack.config1.cjs")], }); - it("should return resolved config object for promise config", async () => { - const result = await cli.resolveConfig({ - config: [resolve(__dirname, "./webpack.promise.config.cjs")], - }); - const expectedOptions = await promiseConfig(); + expect(result.options).toEqual(config1); + }); - expect(result.options).toEqual(expectedOptions); + it("should return resolved config object for promise config", async () => { + const result = await cli.resolveConfig({ + config: [resolve(__dirname, "./webpack.promise.config.cjs")], }); + const expectedOptions = await promiseConfig(); - it("should handle configs returning different types", async () => { - const result = await cli.resolveConfig({ - config: [ - resolve(__dirname, "./webpack.promise.config.cjs"), - resolve(__dirname, "./webpack.config.cjs"), - ], - }); - const resolvedPromiseConfig = await promiseConfig(); - const expectedOptions = [resolvedPromiseConfig, ...arrayConfig]; + expect(result.options).toEqual(expectedOptions); + }); - expect(result.options).toEqual(expectedOptions); + it("should handle configs returning different types", async () => { + const result = await cli.resolveConfig({ + config: [ + resolve(__dirname, "./webpack.promise.config.cjs"), + resolve(__dirname, "./webpack.config.cjs"), + ], }); + const resolvedPromiseConfig = await promiseConfig(); + const expectedOptions = [resolvedPromiseConfig, ...arrayConfig]; - it("should handle different env formats", async () => { - const result = await cli.resolveConfig({ - argv: { 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.options).toEqual(expectedOptions); + it("should handle different env formats", async () => { + const result = await cli.resolveConfig({ + argv: { env: { test: true, name: "Hisoka" } }, + config: [resolve(__dirname, "./env.webpack.config.cjs")], }); + const expectedOptions = { mode: "staging", name: "Hisoka" }; + + expect(result.options).toEqual(expectedOptions); + }); }); diff --git a/test/api/resolveConfig/webpack.config.cjs b/test/api/resolveConfig/webpack.config.cjs index 790bfaea913..3d7d3ef7ce6 100644 --- a/test/api/resolveConfig/webpack.config.cjs +++ b/test/api/resolveConfig/webpack.config.cjs @@ -1,21 +1,21 @@ module.exports = [ - { - output: { - filename: "./dist-amd.js", - libraryTarget: "amd", - }, - entry: "./a.js", - name: "amd", - mode: "development", - devtool: "eval-cheap-module-source-map", + { + output: { + filename: "./dist-amd.js", + libraryTarget: "amd", }, - { - output: { - filename: "./dist-commonjs.js", - libraryTarget: "commonjs", - }, - entry: "./a.js", - mode: "production", - target: "node", + entry: "./a.js", + name: "amd", + mode: "development", + devtool: "eval-cheap-module-source-map", + }, + { + output: { + filename: "./dist-commonjs.js", + libraryTarget: "commonjs", }, + entry: "./a.js", + mode: "production", + target: "node", + }, ]; diff --git a/test/api/resolveConfig/webpack.config1.cjs b/test/api/resolveConfig/webpack.config1.cjs index 9c66f25c9aa..c4b7df891f7 100644 --- a/test/api/resolveConfig/webpack.config1.cjs +++ b/test/api/resolveConfig/webpack.config1.cjs @@ -1,7 +1,7 @@ module.exports = { - output: { - libraryTarget: "amd", - }, - entry: "./a.js", - name: "amd", + output: { + libraryTarget: "amd", + }, + entry: "./a.js", + name: "amd", }; diff --git a/test/api/resolveConfig/webpack.config2.cjs b/test/api/resolveConfig/webpack.config2.cjs index f835b84a40f..854b414229c 100644 --- a/test/api/resolveConfig/webpack.config2.cjs +++ b/test/api/resolveConfig/webpack.config2.cjs @@ -1,8 +1,8 @@ module.exports = { - output: { - libraryTarget: "commonjs", - }, - entry: "./a.js", - mode: "production", - target: "node", + output: { + libraryTarget: "commonjs", + }, + entry: "./a.js", + mode: "production", + target: "node", }; diff --git a/test/api/resolveConfig/webpack.promise.config.cjs b/test/api/resolveConfig/webpack.promise.config.cjs index 97380066bba..ef94d888606 100644 --- a/test/api/resolveConfig/webpack.promise.config.cjs +++ b/test/api/resolveConfig/webpack.promise.config.cjs @@ -1,13 +1,13 @@ module.exports = () => { - return new Promise((resolve) => { - setTimeout(() => { - resolve({ - entry: "./a", - output: { - path: __dirname + "/binary", - filename: "promise.js", - }, - }); - }, 500); - }); + return new Promise((resolve) => { + setTimeout(() => { + resolve({ + entry: "./a", + output: { + path: __dirname + "/binary", + filename: "promise.js", + }, + }); + }, 500); + }); }; diff --git a/test/build/analyze/analyze-flag.test.js b/test/build/analyze/analyze-flag.test.js index 1b45e71a53d..2808f51c032 100644 --- a/test/build/analyze/analyze-flag.test.js +++ b/test/build/analyze/analyze-flag.test.js @@ -3,18 +3,18 @@ const { run, normalizeStdout } = require("../../utils/test-utils"); describe('"analyze" option', () => { - it("should not load webpack-bundle-analyzer plugin twice with --analyze flag and plugin", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "./analyze.config.js", - "--analyze", - ]); + it("should not load webpack-bundle-analyzer plugin twice with --analyze flag and plugin", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + "./analyze.config.js", + "--analyze", + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(normalizeStdout(stdout)).toContain("Webpack Bundle Analyzer saved report to"); - expect( - normalizeStdout(stdout).match(/Webpack Bundle Analyzer saved report to/g), - ).toHaveLength(1); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(normalizeStdout(stdout)).toContain("Webpack Bundle Analyzer saved report to"); + expect(normalizeStdout(stdout).match(/Webpack Bundle Analyzer saved report to/g)).toHaveLength( + 1, + ); + }); }); diff --git a/test/build/analyze/analyze.config.js b/test/build/analyze/analyze.config.js index a1671a29911..4d0783ac2d8 100644 --- a/test/build/analyze/analyze.config.js +++ b/test/build/analyze/analyze.config.js @@ -2,11 +2,11 @@ const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer"); module.exports = { - mode: "development", - plugins: [ - new BundleAnalyzerPlugin({ - analyzerMode: "static", - openAnalyzer: false, - }), - ], + mode: "development", + plugins: [ + new BundleAnalyzerPlugin({ + analyzerMode: "static", + openAnalyzer: false, + }), + ], }; diff --git a/test/build/analyze/webpack.config.js b/test/build/analyze/webpack.config.js index bbb2b37c677..23b9be1f1bd 100644 --- a/test/build/analyze/webpack.config.js +++ b/test/build/analyze/webpack.config.js @@ -1,4 +1,4 @@ module.exports = { - mode: "development", - plugins: [], + mode: "development", + plugins: [], }; diff --git a/test/build/bail/bail-and-watch-webpack.config.js b/test/build/bail/bail-and-watch-webpack.config.js index e29774ed94d..c58fb695d54 100644 --- a/test/build/bail/bail-and-watch-webpack.config.js +++ b/test/build/bail/bail-and-watch-webpack.config.js @@ -1,7 +1,7 @@ module.exports = { - entry: "./src/first.js", - devtool: false, - mode: "development", - bail: true, - watch: true, + entry: "./src/first.js", + devtool: false, + mode: "development", + bail: true, + watch: true, }; diff --git a/test/build/bail/bail-multi-webpack.config.js b/test/build/bail/bail-multi-webpack.config.js index c2890ba9fff..4fec2b3002d 100644 --- a/test/build/bail/bail-multi-webpack.config.js +++ b/test/build/bail/bail-multi-webpack.config.js @@ -1,21 +1,21 @@ module.exports = [ - { - devtool: false, - output: { - filename: "./dist-first.js", - }, - name: "first", - entry: "./src/first.js", - mode: "development", - bail: true, + { + devtool: false, + output: { + filename: "./dist-first.js", }, - { - devtool: false, - output: { - filename: "./dist-second.js", - }, - name: "second", - entry: "./src/second.js", - mode: "development", + name: "first", + entry: "./src/first.js", + mode: "development", + bail: true, + }, + { + devtool: false, + output: { + filename: "./dist-second.js", }, + name: "second", + entry: "./src/second.js", + mode: "development", + }, ]; diff --git a/test/build/bail/bail-webpack.config.js b/test/build/bail/bail-webpack.config.js index 67c7bb44a8f..0b80d86125f 100644 --- a/test/build/bail/bail-webpack.config.js +++ b/test/build/bail/bail-webpack.config.js @@ -1,6 +1,6 @@ module.exports = { - devtool: false, - entry: "./src/first.js", - mode: "development", - bail: true, + devtool: false, + entry: "./src/first.js", + mode: "development", + bail: true, }; diff --git a/test/build/bail/bail.test.js b/test/build/bail/bail.test.js index 9e246571648..b9c8854f81a 100644 --- a/test/build/bail/bail.test.js +++ b/test/build/bail/bail.test.js @@ -3,22 +3,19 @@ const { run } = require("../../utils/test-utils"); describe("bail and watch warning", () => { - it("should not log warning in not watch mode", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "bail-webpack.config.js"]); + it("should not log warning in not watch mode", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "bail-webpack.config.js"]); - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); - it('should not log warning in not watch mode without the "bail" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "no-bail-webpack.config.js", - ]); + it('should not log warning in not watch mode without the "bail" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "no-bail-webpack.config.js"]); - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/bail/multi-webpack.config.js b/test/build/bail/multi-webpack.config.js index 9fe0cb532f1..a3368d3bff6 100644 --- a/test/build/bail/multi-webpack.config.js +++ b/test/build/bail/multi-webpack.config.js @@ -1,22 +1,22 @@ module.exports = [ - { - devtool: false, - output: { - filename: "./dist-first.js", - }, - name: "first", - entry: "./src/first.js", - mode: "development", - bail: true, - watch: true, + { + devtool: false, + output: { + filename: "./dist-first.js", }, - { - devtool: false, - output: { - filename: "./dist-second.js", - }, - name: "second", - entry: "./src/second.js", - mode: "development", + name: "first", + entry: "./src/first.js", + mode: "development", + bail: true, + watch: true, + }, + { + devtool: false, + output: { + filename: "./dist-second.js", }, + name: "second", + entry: "./src/second.js", + mode: "development", + }, ]; diff --git a/test/build/bail/no-bail-webpack.config.js b/test/build/bail/no-bail-webpack.config.js index b55c39fc397..4063e312cc2 100644 --- a/test/build/bail/no-bail-webpack.config.js +++ b/test/build/bail/no-bail-webpack.config.js @@ -1,5 +1,5 @@ module.exports = { - devtool: false, - entry: "./src/first.js", - mode: "development", + devtool: false, + entry: "./src/first.js", + mode: "development", }; diff --git a/test/build/bail/watch-webpack.config.js b/test/build/bail/watch-webpack.config.js index bf6be48c2c7..f2d09a86f45 100644 --- a/test/build/bail/watch-webpack.config.js +++ b/test/build/bail/watch-webpack.config.js @@ -1,6 +1,6 @@ module.exports = { - devtool: false, - entry: "./src/first.js", - mode: "development", - watch: true, + devtool: false, + entry: "./src/first.js", + mode: "development", + watch: true, }; diff --git a/test/build/basic/basic.test.js b/test/build/basic/basic.test.js index a6a089e062e..56405d4f92a 100644 --- a/test/build/basic/basic.test.js +++ b/test/build/basic/basic.test.js @@ -4,191 +4,188 @@ const { resolve } = require("path"); const { run } = require("../../utils/test-utils"); describe("bundle command", () => { - it("should work without command (default command)", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it("should work without command and options (default command)", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "development"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it("should work with multiple entries syntax without command (default command)", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "./src/index.js", - "./src/other.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it("should work with multiple entries syntax without command with options (default command)", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "./src/index.js", - "./src/other.js", - "--mode", - "development", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it("should work with multiple entries syntax without command with options #2 (default command)", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--mode", - "development", - "./src/index.js", - "./src/other.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it("should work with multiple entries syntax without command with options #3 (default command)", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "./src/index.js", - "./src/other.js", - "--entry", - "./src/again.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it("should work with and override entries from the configuration", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "./src/index.js", - "./src/other.js", - "--config", - "./entry.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it('should work with the "build" alias', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["build"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it('should work with "bundle" alias', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["bundle"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it('should work with the "b" alias', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["b"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it('should work with entries syntax using the "build" alias', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["build", "./src/index.js"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it('should work with entries syntax using the "bundle" alias', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["bundle", "./src/index.js"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it('should work with entries syntax using the "b" alias', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["b", "./src/index.js"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it('should work with multiple entries syntax using the "build" alias', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "build", - "./src/index.js", - "./src/other.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it('should work with multiple entries syntax using the "build" alias and options', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "build", - "./src/index.js", - "./src/other.js", - "--mode", - "development", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it('should work with multiple entries syntax using the "build" alias and options', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "build", - "--mode", - "development", - "./src/index.js", - "./src/other.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it('should log error and suggest right name on the "buil" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["buil"]); - - expect(exitCode).toBe(2); - expect(stderr).toContain("Unknown command or entry 'buil'"); - expect(stderr).toContain("Did you mean 'build' (alias 'bundle, b')?"); - expect(stderr).toContain("Run 'webpack --help' to see available commands and options"); - expect(stdout).toBeFalsy(); - }); - - it("should log supplied config when logging level is log", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--config", "./log.config.js"]); - const configPath = resolve(__dirname, "./log.config.js"); - - expect(exitCode).toBe(0); - expect(stderr).toContain("Compiler starting..."); - expect(stderr).toContain(`Compiler is using config: '${configPath}'`); - expect(stderr).toContain("Compiler finished"); - expect(stdout).toBeTruthy(); - }); + it("should work without command (default command)", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("should work without command and options (default command)", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "development"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("should work with multiple entries syntax without command (default command)", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["./src/index.js", "./src/other.js"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("should work with multiple entries syntax without command with options (default command)", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "./src/index.js", + "./src/other.js", + "--mode", + "development", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("should work with multiple entries syntax without command with options #2 (default command)", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--mode", + "development", + "./src/index.js", + "./src/other.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("should work with multiple entries syntax without command with options #3 (default command)", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "./src/index.js", + "./src/other.js", + "--entry", + "./src/again.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("should work with and override entries from the configuration", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "./src/index.js", + "./src/other.js", + "--config", + "./entry.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it('should work with the "build" alias', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["build"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it('should work with "bundle" alias', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["bundle"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it('should work with the "b" alias', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["b"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it('should work with entries syntax using the "build" alias', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["build", "./src/index.js"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it('should work with entries syntax using the "bundle" alias', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["bundle", "./src/index.js"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it('should work with entries syntax using the "b" alias', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["b", "./src/index.js"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it('should work with multiple entries syntax using the "build" alias', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "build", + "./src/index.js", + "./src/other.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it('should work with multiple entries syntax using the "build" alias and options', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "build", + "./src/index.js", + "./src/other.js", + "--mode", + "development", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it('should work with multiple entries syntax using the "build" alias and options', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "build", + "--mode", + "development", + "./src/index.js", + "./src/other.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it('should log error and suggest right name on the "buil" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["buil"]); + + expect(exitCode).toBe(2); + expect(stderr).toContain("Unknown command or entry 'buil'"); + expect(stderr).toContain("Did you mean 'build' (alias 'bundle, b')?"); + expect(stderr).toContain("Run 'webpack --help' to see available commands and options"); + expect(stdout).toBeFalsy(); + }); + + it("should log supplied config when logging level is log", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--config", "./log.config.js"]); + const configPath = resolve(__dirname, "./log.config.js"); + + expect(exitCode).toBe(0); + expect(stderr).toContain("Compiler starting..."); + expect(stderr).toContain(`Compiler is using config: '${configPath}'`); + expect(stderr).toContain("Compiler finished"); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/basic/entry.config.js b/test/build/basic/entry.config.js index f562d8db416..f46fe91977b 100644 --- a/test/build/basic/entry.config.js +++ b/test/build/basic/entry.config.js @@ -1,4 +1,4 @@ module.exports = { - mode: "development", - entry: "./src/entry.js", + mode: "development", + entry: "./src/entry.js", }; diff --git a/test/build/basic/log.config.js b/test/build/basic/log.config.js index 5906a9bce94..d53a5228db5 100644 --- a/test/build/basic/log.config.js +++ b/test/build/basic/log.config.js @@ -1,6 +1,6 @@ module.exports = { - mode: "development", - infrastructureLogging: { - level: "log", - }, + mode: "development", + infrastructureLogging: { + level: "log", + }, }; diff --git a/test/build/build-errors/errors.test.js b/test/build/build-errors/errors.test.js index 874552f6a0d..0cdf8703e93 100644 --- a/test/build/build-errors/errors.test.js +++ b/test/build/build-errors/errors.test.js @@ -4,56 +4,56 @@ const { run, readFile } = require("../../utils/test-utils"); const { resolve } = require("path"); describe("errors", () => { - it("should output by default", async () => { - const { exitCode, stderr, stdout } = await run(__dirname); - - expect(exitCode).toBe(1); - expect(stderr).toBeFalsy(); - expect(stdout).toMatch(/ERROR/); - expect(stdout).toMatch(/Error: Can't resolve/); - }); - - it('should output JSON with the "json" flag', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--json"]); - - expect(exitCode).toBe(1); - expect(stderr).toBeFalsy(); - expect(() => JSON.parse(stdout)).not.toThrow(); - - const json = JSON.parse(stdout); - - expect(json["hash"]).toBeDefined(); - expect(json["errors"]).toHaveLength(1); - // `message` for `webpack@5` - expect(json["errors"][0].message ? json["errors"][0].message : json["errors"][0]).toMatch( - /Can't resolve/, - ); - }); - - it("should store json to a file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--json", "stats.json"]); - - expect(exitCode).toBe(1); - expect(stderr).toContain("stats are successfully stored as json to stats.json"); - expect(stdout).toBeFalsy(); - - let data; - - try { - data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); - } catch (error) { - expect(error).toBe(null); - } - - expect(() => JSON.parse(data)).not.toThrow(); - - const json = JSON.parse(data); - - expect(json["hash"]).toBeDefined(); - expect(json["errors"]).toHaveLength(1); - // `message` for `webpack@5` - expect(json["errors"][0].message ? json["errors"][0].message : json["errors"][0]).toMatch( - /Can't resolve/, - ); - }); + it("should output by default", async () => { + const { exitCode, stderr, stdout } = await run(__dirname); + + expect(exitCode).toBe(1); + expect(stderr).toBeFalsy(); + expect(stdout).toMatch(/ERROR/); + expect(stdout).toMatch(/Error: Can't resolve/); + }); + + it('should output JSON with the "json" flag', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--json"]); + + expect(exitCode).toBe(1); + expect(stderr).toBeFalsy(); + expect(() => JSON.parse(stdout)).not.toThrow(); + + const json = JSON.parse(stdout); + + expect(json["hash"]).toBeDefined(); + expect(json["errors"]).toHaveLength(1); + // `message` for `webpack@5` + expect(json["errors"][0].message ? json["errors"][0].message : json["errors"][0]).toMatch( + /Can't resolve/, + ); + }); + + it("should store json to a file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--json", "stats.json"]); + + expect(exitCode).toBe(1); + expect(stderr).toContain("stats are successfully stored as json to stats.json"); + expect(stdout).toBeFalsy(); + + let data; + + try { + data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); + } catch (error) { + expect(error).toBe(null); + } + + expect(() => JSON.parse(data)).not.toThrow(); + + const json = JSON.parse(data); + + expect(json["hash"]).toBeDefined(); + expect(json["errors"]).toHaveLength(1); + // `message` for `webpack@5` + expect(json["errors"][0].message ? json["errors"][0].message : json["errors"][0]).toMatch( + /Can't resolve/, + ); + }); }); diff --git a/test/build/build-variable/build-variable.test.js b/test/build/build-variable/build-variable.test.js index f7f8c1d2266..f261f70beb4 100644 --- a/test/build/build-variable/build-variable.test.js +++ b/test/build/build-variable/build-variable.test.js @@ -3,11 +3,11 @@ const { run } = require("../../utils/test-utils"); describe("bundle variable", () => { - it("compiles without flags and export variable", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); + it("compiles without flags and export variable", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("PASS"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("PASS"); + }); }); diff --git a/test/build/build-variable/webpack.config.js b/test/build/build-variable/webpack.config.js index ab0814d6de8..f94ad95960f 100644 --- a/test/build/build-variable/webpack.config.js +++ b/test/build/build-variable/webpack.config.js @@ -1,24 +1,24 @@ const isInProcess = process.env.WEBPACK_BUNDLE; 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"); - } - }); - } + 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_BUILD)], - }; + return { + mode: "development", + devtool: false, + plugins: [new CustomTestPlugin(env.WEBPACK_BUILD)], + }; }; diff --git a/test/build/build-warnings/warnings.test.js b/test/build/build-warnings/warnings.test.js index 2af5019f048..61f03a3434c 100644 --- a/test/build/build-warnings/warnings.test.js +++ b/test/build/build-warnings/warnings.test.js @@ -5,58 +5,58 @@ const { existsSync } = require("fs"); const { resolve } = require("path"); describe("warnings", () => { - it("should output by default", async () => { - const { exitCode, stderr, stdout } = await run(__dirname); + it("should output by default", async () => { + const { exitCode, stderr, stdout } = await run(__dirname); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toMatch(/WARNING/); - expect(stdout).toMatch(/Error: Can't resolve/); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toMatch(/WARNING/); + expect(stdout).toMatch(/Error: Can't resolve/); + }); - it('should output JSON with the "json" flag', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--json"]); + it('should output JSON with the "json" flag', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--json"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); - expect(() => JSON.parse(stdout)).not.toThrow(); + expect(() => JSON.parse(stdout)).not.toThrow(); - const json = JSON.parse(stdout); + const json = JSON.parse(stdout); - expect(json["hash"]).toBeDefined(); - expect(json["warnings"]).toHaveLength(2); - // `message` for `webpack@5` - expect( - json["warnings"][0].message ? json["warnings"][0].message : json["warnings"][0], - ).toMatch(/Can't resolve/); - }); + expect(json["hash"]).toBeDefined(); + expect(json["warnings"]).toHaveLength(2); + // `message` for `webpack@5` + expect(json["warnings"][0].message ? json["warnings"][0].message : json["warnings"][0]).toMatch( + /Can't resolve/, + ); + }); - it("should store json to a file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--json", "stats.json"]); + it("should store json to a file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--json", "stats.json"]); - expect(exitCode).toBe(0); - expect(stderr).toContain("stats are successfully stored as json to stats.json"); - expect(stdout).toBeFalsy(); - expect(existsSync(resolve(__dirname, "./stats.json"))).toBeTruthy(); + expect(exitCode).toBe(0); + expect(stderr).toContain("stats are successfully stored as json to stats.json"); + expect(stdout).toBeFalsy(); + expect(existsSync(resolve(__dirname, "./stats.json"))).toBeTruthy(); - let data; + let data; - try { - data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); - } catch (error) { - expect(error).toBe(null); - } + try { + data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); + } catch (error) { + expect(error).toBe(null); + } - expect(() => JSON.parse(data)).not.toThrow(); + expect(() => JSON.parse(data)).not.toThrow(); - const json = JSON.parse(data); + const json = JSON.parse(data); - expect(json["hash"]).toBeDefined(); - expect(json["warnings"]).toHaveLength(2); - // `message` for `webpack@5` - expect( - json["warnings"][0].message ? json["warnings"][0].message : json["warnings"][0], - ).toMatch(/Can't resolve/); - }); + expect(json["hash"]).toBeDefined(); + expect(json["warnings"]).toHaveLength(2); + // `message` for `webpack@5` + expect(json["warnings"][0].message ? json["warnings"][0].message : json["warnings"][0]).toMatch( + /Can't resolve/, + ); + }); }); diff --git a/test/build/bundle-variable/bundle-variable.test.js b/test/build/bundle-variable/bundle-variable.test.js index f7f8c1d2266..f261f70beb4 100644 --- a/test/build/bundle-variable/bundle-variable.test.js +++ b/test/build/bundle-variable/bundle-variable.test.js @@ -3,11 +3,11 @@ const { run } = require("../../utils/test-utils"); describe("bundle variable", () => { - it("compiles without flags and export variable", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); + it("compiles without flags and export variable", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("PASS"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("PASS"); + }); }); diff --git a/test/build/bundle-variable/webpack.config.js b/test/build/bundle-variable/webpack.config.js index b8e6919b2db..b443b7fe4fb 100644 --- a/test/build/bundle-variable/webpack.config.js +++ b/test/build/bundle-variable/webpack.config.js @@ -1,24 +1,24 @@ const isInProcess = process.env.WEBPACK_BUNDLE; 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"); - } - }); - } + 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_BUNDLE)], - }; + return { + mode: "development", + devtool: false, + plugins: [new CustomTestPlugin(env.WEBPACK_BUNDLE)], + }; }; diff --git a/test/build/cache/cache.test.js b/test/build/cache/cache.test.js index 496e7c7a04e..d2d8bbaab7e 100644 --- a/test/build/cache/cache.test.js +++ b/test/build/cache/cache.test.js @@ -6,258 +6,237 @@ const rimraf = require("rimraf"); const { run, isWebpack5 } = require("../../utils/test-utils"); describe("cache", () => { - it("should work", async () => { - rimraf.sync( - path.join( - __dirname, - "../../../node_modules/.cache/webpack/cache-test-default-development", - ), - ); - - let { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); - - expect(exitCode).toEqual(0); - - if (isWebpack5) { - expect(stderr.match(/No pack exists at/g)).toHaveLength(1); - expect(stderr.match(/Stored pack/g)).toHaveLength(1); - expect(stderr).toBeTruthy(); - expect(stdout).toBeTruthy(); - } - - ({ exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"])); - - expect(exitCode).toEqual(0); - - if (isWebpack5) { - expect(stderr.match(/restore cache container:/g)).toHaveLength(1); - expect(stderr.match(/restore cache content metadata:/g)).toHaveLength(1); - expect(stderr.match(/restore cache content \d+ \(.+\):/g)).toHaveLength(1); - expect(stderr).toBeTruthy(); - expect(stdout).toBeTruthy(); - } - }); - - it("should work in multi compiler mode", async () => { - rimraf.sync( - path.join( - __dirname, - "../../../node_modules/.cache/webpack/cache-test-first-development", - ), - ); - rimraf.sync( - path.join( - __dirname, - "../../../node_modules/.cache/webpack/cache-test-second-development", - ), - ); - - let { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./multi.config.js"]); - - expect(exitCode).toEqual(0); - - if (isWebpack5) { - expect(stderr.match(/No pack exists at/g)).toHaveLength(2); - expect(stderr.match(/Stored pack/g)).toHaveLength(2); - expect(stderr).toBeTruthy(); - expect(stdout).toBeTruthy(); - } - - ({ exitCode, stderr, stdout } = await run(__dirname, ["-c", "./multi.config.js"])); - - expect(exitCode).toEqual(0); - - if (isWebpack5) { - expect(stderr.match(/restore cache container:/g)).toHaveLength(2); - expect(stderr.match(/restore cache content metadata:/g)).toHaveLength(2); - expect(stderr.match(/restore cache content \d+ \(.+\):/g)).toHaveLength(2); - expect(stderr).toBeTruthy(); - expect(stdout).toBeTruthy(); - } - }); - - it("should work in multi compiler mode with the `--config-name` argument", async () => { - rimraf.sync( - path.join( - __dirname, - "../../../node_modules/.cache/webpack/cache-test-third-development", - ), - ); - - let { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "./multi.config.js", - "--config-name", - "cache-test-first", - "--name", - "cache-test-third", - ]); - - expect(exitCode).toEqual(0); - - if (isWebpack5) { - expect(stderr.match(/No pack exists at/g)).toHaveLength(1); - expect(stderr.match(/Stored pack/g)).toHaveLength(1); - expect(stderr).toBeTruthy(); - expect(stdout).toBeTruthy(); - } - - ({ exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "./multi.config.js", - "--config-name", - "cache-test-first", - "--name", - "cache-test-third", - ])); - - expect(exitCode).toEqual(0); - - if (isWebpack5) { - expect(stderr.match(/restore cache container:/g)).toHaveLength(1); - expect(stderr.match(/restore cache content metadata:/g)).toHaveLength(1); - expect(stderr.match(/restore cache content \d+ \(.+\):/g)).toHaveLength(1); - expect(stderr).toBeTruthy(); - expect(stdout).toBeTruthy(); - } - }); - - it("should work with the `--merge` argument", async () => { - rimraf.sync( - path.join( - __dirname, - "../../../node_modules/.cache/webpack/cache-test-fourth-development", - ), - ); - - let { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "./multi.config.js", - "-c", - "./webpack.config.js", - "--merge", - "--name", - "cache-test-fourth", - ]); - - expect(exitCode).toEqual(0); - - if (isWebpack5) { - expect(stderr.match(/No pack exists at/g)).toHaveLength(1); - expect(stderr.match(/Stored pack/g)).toHaveLength(1); - expect(stderr).toBeTruthy(); - expect(stdout).toBeTruthy(); - } - - ({ exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "./multi.config.js", - "-c", - "./webpack.config.js", - "--merge", - "--name", - "cache-test-fourth", - ])); - - expect(exitCode).toEqual(0); - - if (isWebpack5) { - expect(stderr.match(/restore cache container:/g)).toHaveLength(1); - expect(stderr.match(/restore cache content metadata:/g)).toHaveLength(1); - expect(stderr.match(/restore cache content \d+ \(.+\):/g)).toHaveLength(1); - expect(stderr).toBeTruthy(); - expect(stdout).toBeTruthy(); - } - }); - - it("should work with the `--config-name` and `--merge` argument", async () => { - rimraf.sync( - path.join( - __dirname, - "../../../node_modules/.cache/webpack/cache-test-fifth-development", - ), - ); - - let { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "./multi.config.js", - "-c", - "./webpack.config.js", - "--merge", - "--config-name", - "cache-test-first", - "--config-name", - "cache-test-second", - "--name", - "cache-test-fifth", - ]); - - expect(exitCode).toEqual(0); - - if (isWebpack5) { - expect(stderr.match(/No pack exists at/g)).toHaveLength(1); - expect(stderr.match(/Stored pack/g)).toHaveLength(1); - expect(stderr).toBeTruthy(); - expect(stdout).toBeTruthy(); - } - - ({ exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "./multi.config.js", - "-c", - "./webpack.config.js", - "--merge", - "--config-name", - "cache-test-first", - "--config-name", - "cache-test-second", - "--name", - "cache-test-fifth", - ])); - - expect(exitCode).toEqual(0); - - if (isWebpack5) { - expect(stderr.match(/restore cache container:/g)).toHaveLength(1); - expect(stderr.match(/restore cache content metadata:/g)).toHaveLength(1); - expect(stderr.match(/restore cache content \d+ \(.+\):/g)).toHaveLength(1); - expect(stderr).toBeTruthy(); - expect(stdout).toBeTruthy(); - } - }); - - it("should work with autoloading configuration", async () => { - rimraf.sync( - path.join( - __dirname, - "../../../node_modules/.cache/webpack/cache-test-autoloading-development", - ), - ); - - let { exitCode, stderr, stdout } = await run(__dirname, [ - "--name", - "cache-test-autoloading", - ]); - - expect(exitCode).toEqual(0); - - if (isWebpack5) { - expect(stderr.match(/No pack exists at/g)).toHaveLength(1); - expect(stderr.match(/Stored pack/g)).toHaveLength(1); - expect(stderr).toBeTruthy(); - expect(stdout).toBeTruthy(); - } - - ({ exitCode, stderr, stdout } = await run(__dirname, ["--name", "cache-test-autoloading"])); - - expect(exitCode).toEqual(0); - - if (isWebpack5) { - expect(stderr.match(/restore cache container:/g)).toHaveLength(1); - expect(stderr.match(/restore cache content metadata:/g)).toHaveLength(1); - expect(stderr.match(/restore cache content \d+ \(.+\):/g)).toHaveLength(1); - expect(stderr).toBeTruthy(); - expect(stdout).toBeTruthy(); - } - }); + it("should work", async () => { + rimraf.sync( + path.join(__dirname, "../../../node_modules/.cache/webpack/cache-test-default-development"), + ); + + let { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); + + expect(exitCode).toEqual(0); + + if (isWebpack5) { + expect(stderr.match(/No pack exists at/g)).toHaveLength(1); + expect(stderr.match(/Stored pack/g)).toHaveLength(1); + expect(stderr).toBeTruthy(); + expect(stdout).toBeTruthy(); + } + + ({ exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"])); + + expect(exitCode).toEqual(0); + + if (isWebpack5) { + expect(stderr.match(/restore cache container:/g)).toHaveLength(1); + expect(stderr.match(/restore cache content metadata:/g)).toHaveLength(1); + expect(stderr.match(/restore cache content \d+ \(.+\):/g)).toHaveLength(1); + expect(stderr).toBeTruthy(); + expect(stdout).toBeTruthy(); + } + }); + + it("should work in multi compiler mode", async () => { + rimraf.sync( + path.join(__dirname, "../../../node_modules/.cache/webpack/cache-test-first-development"), + ); + rimraf.sync( + path.join(__dirname, "../../../node_modules/.cache/webpack/cache-test-second-development"), + ); + + let { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./multi.config.js"]); + + expect(exitCode).toEqual(0); + + if (isWebpack5) { + expect(stderr.match(/No pack exists at/g)).toHaveLength(2); + expect(stderr.match(/Stored pack/g)).toHaveLength(2); + expect(stderr).toBeTruthy(); + expect(stdout).toBeTruthy(); + } + + ({ exitCode, stderr, stdout } = await run(__dirname, ["-c", "./multi.config.js"])); + + expect(exitCode).toEqual(0); + + if (isWebpack5) { + expect(stderr.match(/restore cache container:/g)).toHaveLength(2); + expect(stderr.match(/restore cache content metadata:/g)).toHaveLength(2); + expect(stderr.match(/restore cache content \d+ \(.+\):/g)).toHaveLength(2); + expect(stderr).toBeTruthy(); + expect(stdout).toBeTruthy(); + } + }); + + it("should work in multi compiler mode with the `--config-name` argument", async () => { + rimraf.sync( + path.join(__dirname, "../../../node_modules/.cache/webpack/cache-test-third-development"), + ); + + let { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + "./multi.config.js", + "--config-name", + "cache-test-first", + "--name", + "cache-test-third", + ]); + + expect(exitCode).toEqual(0); + + if (isWebpack5) { + expect(stderr.match(/No pack exists at/g)).toHaveLength(1); + expect(stderr.match(/Stored pack/g)).toHaveLength(1); + expect(stderr).toBeTruthy(); + expect(stdout).toBeTruthy(); + } + + ({ exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + "./multi.config.js", + "--config-name", + "cache-test-first", + "--name", + "cache-test-third", + ])); + + expect(exitCode).toEqual(0); + + if (isWebpack5) { + expect(stderr.match(/restore cache container:/g)).toHaveLength(1); + expect(stderr.match(/restore cache content metadata:/g)).toHaveLength(1); + expect(stderr.match(/restore cache content \d+ \(.+\):/g)).toHaveLength(1); + expect(stderr).toBeTruthy(); + expect(stdout).toBeTruthy(); + } + }); + + it("should work with the `--merge` argument", async () => { + rimraf.sync( + path.join(__dirname, "../../../node_modules/.cache/webpack/cache-test-fourth-development"), + ); + + let { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + "./multi.config.js", + "-c", + "./webpack.config.js", + "--merge", + "--name", + "cache-test-fourth", + ]); + + expect(exitCode).toEqual(0); + + if (isWebpack5) { + expect(stderr.match(/No pack exists at/g)).toHaveLength(1); + expect(stderr.match(/Stored pack/g)).toHaveLength(1); + expect(stderr).toBeTruthy(); + expect(stdout).toBeTruthy(); + } + + ({ exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + "./multi.config.js", + "-c", + "./webpack.config.js", + "--merge", + "--name", + "cache-test-fourth", + ])); + + expect(exitCode).toEqual(0); + + if (isWebpack5) { + expect(stderr.match(/restore cache container:/g)).toHaveLength(1); + expect(stderr.match(/restore cache content metadata:/g)).toHaveLength(1); + expect(stderr.match(/restore cache content \d+ \(.+\):/g)).toHaveLength(1); + expect(stderr).toBeTruthy(); + expect(stdout).toBeTruthy(); + } + }); + + it("should work with the `--config-name` and `--merge` argument", async () => { + rimraf.sync( + path.join(__dirname, "../../../node_modules/.cache/webpack/cache-test-fifth-development"), + ); + + let { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + "./multi.config.js", + "-c", + "./webpack.config.js", + "--merge", + "--config-name", + "cache-test-first", + "--config-name", + "cache-test-second", + "--name", + "cache-test-fifth", + ]); + + expect(exitCode).toEqual(0); + + if (isWebpack5) { + expect(stderr.match(/No pack exists at/g)).toHaveLength(1); + expect(stderr.match(/Stored pack/g)).toHaveLength(1); + expect(stderr).toBeTruthy(); + expect(stdout).toBeTruthy(); + } + + ({ exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + "./multi.config.js", + "-c", + "./webpack.config.js", + "--merge", + "--config-name", + "cache-test-first", + "--config-name", + "cache-test-second", + "--name", + "cache-test-fifth", + ])); + + expect(exitCode).toEqual(0); + + if (isWebpack5) { + expect(stderr.match(/restore cache container:/g)).toHaveLength(1); + expect(stderr.match(/restore cache content metadata:/g)).toHaveLength(1); + expect(stderr.match(/restore cache content \d+ \(.+\):/g)).toHaveLength(1); + expect(stderr).toBeTruthy(); + expect(stdout).toBeTruthy(); + } + }); + + it("should work with autoloading configuration", async () => { + rimraf.sync( + path.join( + __dirname, + "../../../node_modules/.cache/webpack/cache-test-autoloading-development", + ), + ); + + let { exitCode, stderr, stdout } = await run(__dirname, ["--name", "cache-test-autoloading"]); + + expect(exitCode).toEqual(0); + + if (isWebpack5) { + expect(stderr.match(/No pack exists at/g)).toHaveLength(1); + expect(stderr.match(/Stored pack/g)).toHaveLength(1); + expect(stderr).toBeTruthy(); + expect(stdout).toBeTruthy(); + } + + ({ exitCode, stderr, stdout } = await run(__dirname, ["--name", "cache-test-autoloading"])); + + expect(exitCode).toEqual(0); + + if (isWebpack5) { + expect(stderr.match(/restore cache container:/g)).toHaveLength(1); + expect(stderr.match(/restore cache content metadata:/g)).toHaveLength(1); + expect(stderr.match(/restore cache content \d+ \(.+\):/g)).toHaveLength(1); + expect(stderr).toBeTruthy(); + expect(stdout).toBeTruthy(); + } + }); }); diff --git a/test/build/cache/multi.config.js b/test/build/cache/multi.config.js index 3ea23f5ed96..ebcd496888d 100644 --- a/test/build/cache/multi.config.js +++ b/test/build/cache/multi.config.js @@ -1,48 +1,48 @@ const path = require("path"); module.exports = [ - { - mode: "development", - name: "cache-test-first", - cache: { - type: "filesystem", - buildDependencies: { - config: [__filename], - }, - }, - infrastructureLogging: { - debug: /cache/, - }, - entry: { - app: "./src/main.js", - }, - output: { - filename: "[name].bundle.js", - chunkFilename: "[name].bundle.js", - path: path.resolve(__dirname, "dist"), - publicPath: "/", - }, - }, - { - mode: "development", - name: "cache-test-second", - cache: { - type: "filesystem", - buildDependencies: { - config: [__filename], - }, - }, - infrastructureLogging: { - debug: /cache/, - }, - entry: { - app: "./src/main.js", - }, - output: { - filename: "[name].bundle.js", - chunkFilename: "[name].bundle.js", - path: path.resolve(__dirname, "dist"), - publicPath: "/", - }, + { + mode: "development", + name: "cache-test-first", + cache: { + type: "filesystem", + buildDependencies: { + config: [__filename], + }, }, + infrastructureLogging: { + debug: /cache/, + }, + entry: { + app: "./src/main.js", + }, + output: { + filename: "[name].bundle.js", + chunkFilename: "[name].bundle.js", + path: path.resolve(__dirname, "dist"), + publicPath: "/", + }, + }, + { + mode: "development", + name: "cache-test-second", + cache: { + type: "filesystem", + buildDependencies: { + config: [__filename], + }, + }, + infrastructureLogging: { + debug: /cache/, + }, + entry: { + app: "./src/main.js", + }, + output: { + filename: "[name].bundle.js", + chunkFilename: "[name].bundle.js", + path: path.resolve(__dirname, "dist"), + publicPath: "/", + }, + }, ]; diff --git a/test/build/cache/webpack.config.js b/test/build/cache/webpack.config.js index 5e46040979e..35851bfe3d8 100644 --- a/test/build/cache/webpack.config.js +++ b/test/build/cache/webpack.config.js @@ -1,24 +1,24 @@ const path = require("path"); module.exports = { - mode: "development", - name: "cache-test-default", - cache: { - type: "filesystem", - buildDependencies: { - config: [__filename], - }, - }, - infrastructureLogging: { - debug: /cache/, - }, - entry: { - app: "./src/main.js", - }, - output: { - filename: "[name].bundle.js", - chunkFilename: "[name].bundle.js", - path: path.resolve(__dirname, "dist"), - publicPath: "/", + mode: "development", + name: "cache-test-default", + cache: { + type: "filesystem", + buildDependencies: { + config: [__filename], }, + }, + infrastructureLogging: { + debug: /cache/, + }, + entry: { + app: "./src/main.js", + }, + output: { + filename: "[name].bundle.js", + chunkFilename: "[name].bundle.js", + path: path.resolve(__dirname, "dist"), + publicPath: "/", + }, }; diff --git a/test/build/colors/colors-false.webpack.config.js b/test/build/colors/colors-false.webpack.config.js index c313e8689e2..6a713362a21 100644 --- a/test/build/colors/colors-false.webpack.config.js +++ b/test/build/colors/colors-false.webpack.config.js @@ -1,6 +1,6 @@ module.exports = { - stats: { - colors: false, - }, - mode: "development", + stats: { + colors: false, + }, + mode: "development", }; diff --git a/test/build/colors/colors-true.webpack.config.js b/test/build/colors/colors-true.webpack.config.js index cd8f114f043..0e313dc1c3b 100644 --- a/test/build/colors/colors-true.webpack.config.js +++ b/test/build/colors/colors-true.webpack.config.js @@ -1,6 +1,6 @@ module.exports = { - stats: { - colors: true, - }, - mode: "development", + stats: { + colors: true, + }, + mode: "development", }; diff --git a/test/build/colors/colors.test.js b/test/build/colors/colors.test.js index 0132bc6fef1..e23642019a1 100644 --- a/test/build/colors/colors.test.js +++ b/test/build/colors/colors.test.js @@ -4,219 +4,216 @@ const { run, isWebpack5 } = require("../../utils/test-utils"); const { resolve } = require("path"); describe("colors", () => { - it("should output by default", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [], { - env: { FORCE_COLOR: true }, - }); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); - }); - - it('should work with the "stats" option from flags', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--stats=verbose"], { - env: { FORCE_COLOR: true }, - }); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); - }); - - it('should work with the "stats" option from flags and from configuration', async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--stats=verbose", `--config=${resolve(__dirname, "./no-stats.webpack.config.js")}`], - { env: { FORCE_COLOR: true } }, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); - }); - - it('should work with the "stats" option from flags and from configuration #2', async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--stats=verbose", "--config=stats-string.webpack.config.js"], - { - env: { FORCE_COLOR: true }, - }, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); - }); - - it('should work with the "stats" option and --color flags', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--stats=verbose", "--color"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); - }); - - it("should disable colored output with --no-color", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--stats=verbose", - "--no-color", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).not.toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); - expect(stdout).toContain(output); - }); - - it('should work with the "stats" option from the configuration', async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--config=stats-string.webpack.config.js"], - { - env: { FORCE_COLOR: true }, - }, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); - }); - - it('should work with the "stats" option from the configuration #1', async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--config=stats-boolean.webpack.config.js"], - { - env: { FORCE_COLOR: true }, - }, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); - }); - - it('should work with the "stats" option from the configuration #2', async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--config=no-stats.webpack.config.js"], - { - env: { FORCE_COLOR: true }, - }, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); - }); - - it('should work with the "stats" option from the configuration #3', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config=colors-true.webpack.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); - }); - - it('should work with the "stats" option from the configuration #4', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config=colors-false.webpack.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).not.toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); - expect(stdout).toContain(output); - }); - - it('should work with the "stats" option from the configuration #5', async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--config=stats-colors.webpack.config.js"], - { - env: { FORCE_COLOR: true }, - }, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).toContain(`\u001b[31m${output}\u001b[39m\u001b[22m`); - }); - - it('should work with the "stats" option from the configuration in multi compiler mode', async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--config=multi-stats-colors.webpack.config.js"], - { - env: { FORCE_COLOR: true }, - }, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - - if (isWebpack5) { - // red from first config - expect(stdout).toContain(`\u001b[31msuccessfully`); - // blue from second config - expect(stdout).toContain(`\u001b[34msuccessfully`); - } - }); - - it("should prioritize --color over colors in config", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config=colors-false.webpack.config.js", - "--color", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); - }); - - it("should prioritize --no-color over colors in config", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config=colors-true.webpack.config.js", - "--no-color", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - const output = isWebpack5 ? "successfully" : "main.js"; - expect(stdout).not.toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); - expect(stdout).toContain(output); - }); - - it("should work in multi compiler mode", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config=multiple-configs.js", - "--color", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - - if (isWebpack5) { - expect(stdout).toContain(`\u001b[1mfirst-config`); - expect(stdout).toContain(`\u001b[1msecond-config`); - expect(stdout).toContain(`\u001b[1m\u001b[32msuccessfully\u001b[39m\u001b[22m`); - } - }); + it("should output by default", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [], { + env: { FORCE_COLOR: true }, + }); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); + }); + + it('should work with the "stats" option from flags', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--stats=verbose"], { + env: { FORCE_COLOR: true }, + }); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); + }); + + it('should work with the "stats" option from flags and from configuration', async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--stats=verbose", `--config=${resolve(__dirname, "./no-stats.webpack.config.js")}`], + { env: { FORCE_COLOR: true } }, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); + }); + + it('should work with the "stats" option from flags and from configuration #2', async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--stats=verbose", "--config=stats-string.webpack.config.js"], + { + env: { FORCE_COLOR: true }, + }, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); + }); + + it('should work with the "stats" option and --color flags', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--stats=verbose", "--color"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); + }); + + it("should disable colored output with --no-color", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--stats=verbose", "--no-color"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).not.toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); + expect(stdout).toContain(output); + }); + + it('should work with the "stats" option from the configuration', async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--config=stats-string.webpack.config.js"], + { + env: { FORCE_COLOR: true }, + }, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); + }); + + it('should work with the "stats" option from the configuration #1', async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--config=stats-boolean.webpack.config.js"], + { + env: { FORCE_COLOR: true }, + }, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); + }); + + it('should work with the "stats" option from the configuration #2', async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--config=no-stats.webpack.config.js"], + { + env: { FORCE_COLOR: true }, + }, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); + }); + + it('should work with the "stats" option from the configuration #3', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config=colors-true.webpack.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); + }); + + it('should work with the "stats" option from the configuration #4', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config=colors-false.webpack.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).not.toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); + expect(stdout).toContain(output); + }); + + it('should work with the "stats" option from the configuration #5', async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--config=stats-colors.webpack.config.js"], + { + env: { FORCE_COLOR: true }, + }, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).toContain(`\u001b[31m${output}\u001b[39m\u001b[22m`); + }); + + it('should work with the "stats" option from the configuration in multi compiler mode', async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--config=multi-stats-colors.webpack.config.js"], + { + env: { FORCE_COLOR: true }, + }, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + + if (isWebpack5) { + // red from first config + expect(stdout).toContain(`\u001b[31msuccessfully`); + // blue from second config + expect(stdout).toContain(`\u001b[34msuccessfully`); + } + }); + + it("should prioritize --color over colors in config", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config=colors-false.webpack.config.js", + "--color", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); + }); + + it("should prioritize --no-color over colors in config", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config=colors-true.webpack.config.js", + "--no-color", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + const output = isWebpack5 ? "successfully" : "main.js"; + expect(stdout).not.toContain(`\u001b[1m\u001b[32m${output}\u001b[39m\u001b[22m`); + expect(stdout).toContain(output); + }); + + it("should work in multi compiler mode", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config=multiple-configs.js", + "--color", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + + if (isWebpack5) { + expect(stdout).toContain(`\u001b[1mfirst-config`); + expect(stdout).toContain(`\u001b[1msecond-config`); + expect(stdout).toContain(`\u001b[1m\u001b[32msuccessfully\u001b[39m\u001b[22m`); + } + }); }); diff --git a/test/build/colors/multi-stats-colors.webpack.config.js b/test/build/colors/multi-stats-colors.webpack.config.js index c9675f190a2..d0506f3c024 100644 --- a/test/build/colors/multi-stats-colors.webpack.config.js +++ b/test/build/colors/multi-stats-colors.webpack.config.js @@ -1,22 +1,22 @@ module.exports = [ - { - name: "first-config", - entry: "./src/first.js", - stats: { - colors: { - green: "\u001b[31m", // overwriting with red for test - }, - }, - mode: "development", + { + name: "first-config", + entry: "./src/first.js", + stats: { + colors: { + green: "\u001b[31m", // overwriting with red for test + }, }, - { - name: "second-config", - entry: "./src/second.js", - stats: { - colors: { - green: "\u001b[34m", // overwriting with blue for test - }, - }, - mode: "development", + mode: "development", + }, + { + name: "second-config", + entry: "./src/second.js", + stats: { + colors: { + green: "\u001b[34m", // overwriting with blue for test + }, }, + mode: "development", + }, ]; diff --git a/test/build/colors/multiple-configs.js b/test/build/colors/multiple-configs.js index 5ef28ccfd71..208a277b151 100644 --- a/test/build/colors/multiple-configs.js +++ b/test/build/colors/multiple-configs.js @@ -1,14 +1,14 @@ module.exports = [ - { - name: "first-config", - entry: "./src/first.js", - stats: "normal", - mode: "development", - }, - { - name: "second-config", - entry: "./src/second.js", - stats: "normal", - mode: "development", - }, + { + name: "first-config", + entry: "./src/first.js", + stats: "normal", + mode: "development", + }, + { + name: "second-config", + entry: "./src/second.js", + stats: "normal", + mode: "development", + }, ]; diff --git a/test/build/colors/no-stats.webpack.config.js b/test/build/colors/no-stats.webpack.config.js index 931bbe238fb..866de5a7d77 100644 --- a/test/build/colors/no-stats.webpack.config.js +++ b/test/build/colors/no-stats.webpack.config.js @@ -1,4 +1,4 @@ module.exports = { - name: "test", - mode: "development", + name: "test", + mode: "development", }; diff --git a/test/build/colors/stats-boolean.webpack.config.js b/test/build/colors/stats-boolean.webpack.config.js index 7abc3543a50..d150442b1f3 100644 --- a/test/build/colors/stats-boolean.webpack.config.js +++ b/test/build/colors/stats-boolean.webpack.config.js @@ -1,4 +1,4 @@ module.exports = { - stats: true, - mode: "development", + stats: true, + mode: "development", }; diff --git a/test/build/colors/stats-colors.webpack.config.js b/test/build/colors/stats-colors.webpack.config.js index 210b807952f..2487b8f84d6 100644 --- a/test/build/colors/stats-colors.webpack.config.js +++ b/test/build/colors/stats-colors.webpack.config.js @@ -1,8 +1,8 @@ module.exports = { - stats: { - colors: { - green: "\u001b[31m", // overwriting with red for test - }, + stats: { + colors: { + green: "\u001b[31m", // overwriting with red for test }, - mode: "development", + }, + mode: "development", }; diff --git a/test/build/colors/stats-string.webpack.config.js b/test/build/colors/stats-string.webpack.config.js index 404fa404f68..3293f66070f 100644 --- a/test/build/colors/stats-string.webpack.config.js +++ b/test/build/colors/stats-string.webpack.config.js @@ -1,4 +1,4 @@ module.exports = { - stats: "verbose", - mode: "development", + stats: "verbose", + mode: "development", }; diff --git a/test/build/colors/webpack.config.js b/test/build/colors/webpack.config.js index 11623bb6280..6871a7c4df3 100644 --- a/test/build/colors/webpack.config.js +++ b/test/build/colors/webpack.config.js @@ -1,3 +1,3 @@ module.exports = { - mode: "development", + mode: "development", }; diff --git a/test/build/config-format/coffee/coffee.test.js b/test/build/config-format/coffee/coffee.test.js index c0aa525ac1f..646d4d33fc5 100644 --- a/test/build/config-format/coffee/coffee.test.js +++ b/test/build/config-format/coffee/coffee.test.js @@ -1,19 +1,19 @@ const { run } = require("../../../utils/test-utils"); describe("webpack cli", () => { - it("should support coffeescript file as flag", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "webpack.config.coffee"]); + it("should support coffeescript file as flag", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "webpack.config.coffee"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); - it("should load coffeescript file by default", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); + it("should load coffeescript file by default", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/config-format/commonjs-default/commonjs-default.test.js b/test/build/config-format/commonjs-default/commonjs-default.test.js index d1dbfad3b2d..30ea62f75ee 100644 --- a/test/build/config-format/commonjs-default/commonjs-default.test.js +++ b/test/build/config-format/commonjs-default/commonjs-default.test.js @@ -1,11 +1,11 @@ const { run } = require("../../../utils/test-utils"); describe("webpack cli", () => { - it("should support CommonJS file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "webpack.config.cjs"]); + it("should support CommonJS file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "webpack.config.cjs"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/config-format/commonjs-default/webpack.config.cjs b/test/build/config-format/commonjs-default/webpack.config.cjs index c8befd13af8..5ac5037995f 100644 --- a/test/build/config-format/commonjs-default/webpack.config.cjs +++ b/test/build/config-format/commonjs-default/webpack.config.cjs @@ -1,12 +1,12 @@ const path = require("path"); const config = { - mode: "production", - entry: "./main.js", - output: { - path: path.resolve(__dirname, "dist"), - filename: "foo.bundle.js", - }, + mode: "production", + entry: "./main.js", + output: { + path: path.resolve(__dirname, "dist"), + filename: "foo.bundle.js", + }, }; module.exports.default = config; diff --git a/test/build/config-format/commonjs/commonjs.test.js b/test/build/config-format/commonjs/commonjs.test.js index d1dbfad3b2d..30ea62f75ee 100644 --- a/test/build/config-format/commonjs/commonjs.test.js +++ b/test/build/config-format/commonjs/commonjs.test.js @@ -1,11 +1,11 @@ const { run } = require("../../../utils/test-utils"); describe("webpack cli", () => { - it("should support CommonJS file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "webpack.config.cjs"]); + it("should support CommonJS file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "webpack.config.cjs"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/config-format/commonjs/webpack.config.cjs b/test/build/config-format/commonjs/webpack.config.cjs index 7aee196b1d9..931c439e129 100644 --- a/test/build/config-format/commonjs/webpack.config.cjs +++ b/test/build/config-format/commonjs/webpack.config.cjs @@ -1,12 +1,12 @@ const path = require("path"); const config = { - mode: "production", - entry: "./main.js", - output: { - path: path.resolve(__dirname, "dist"), - filename: "foo.bundle.js", - }, + mode: "production", + entry: "./main.js", + output: { + path: path.resolve(__dirname, "dist"), + filename: "foo.bundle.js", + }, }; module.exports = config; diff --git a/test/build/config-format/failure/failure.test.js b/test/build/config-format/failure/failure.test.js index ffa5ad01270..796e1709ca5 100644 --- a/test/build/config-format/failure/failure.test.js +++ b/test/build/config-format/failure/failure.test.js @@ -3,17 +3,15 @@ const path = require("path"); const { run } = require("../../../utils/test-utils"); describe("failure", () => { - it("should log error on not installed registers", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "webpack.config.iced"]); + it("should log error on not installed registers", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "webpack.config.iced"]); - expect(exitCode).toBe(2); - expect(stderr).toContain( - `Unable load '${path.resolve(__dirname, "./webpack.config.iced")}'`, - ); - expect(stderr).toContain('Unable to use specified module loaders for ".iced".'); - expect(stderr).toContain("Cannot find module 'iced-coffee-script/register'"); - expect(stderr).toContain("Cannot find module 'iced-coffee-script'"); - expect(stderr).toContain("Please install one of them"); - expect(stdout).toBeFalsy(); - }); + expect(exitCode).toBe(2); + expect(stderr).toContain(`Unable load '${path.resolve(__dirname, "./webpack.config.iced")}'`); + expect(stderr).toContain('Unable to use specified module loaders for ".iced".'); + expect(stderr).toContain("Cannot find module 'iced-coffee-script/register'"); + expect(stderr).toContain("Cannot find module 'iced-coffee-script'"); + expect(stderr).toContain("Please install one of them"); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/config-format/mjs/mjs.test.js b/test/build/config-format/mjs/mjs.test.js index baf15f4f698..590e8212847 100644 --- a/test/build/config-format/mjs/mjs.test.js +++ b/test/build/config-format/mjs/mjs.test.js @@ -1,18 +1,18 @@ const { run } = require("../../../utils/test-utils"); describe("webpack cli", () => { - it("should support mjs config format", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "webpack.config.mjs"], { - env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, - }); - - if (/Error: Not supported/.test(stderr)) { - expect(exitCode).toBe(2); - expect(stdout).toBeFalsy(); - } else { - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - } + it("should support mjs config format", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "webpack.config.mjs"], { + env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, }); + + if (/Error: Not supported/.test(stderr)) { + expect(exitCode).toBe(2); + expect(stdout).toBeFalsy(); + } else { + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + } + }); }); diff --git a/test/build/config-format/mjs/webpack.config.mjs b/test/build/config-format/mjs/webpack.config.mjs index 987f3685e67..b32e7d7be42 100644 --- a/test/build/config-format/mjs/webpack.config.mjs +++ b/test/build/config-format/mjs/webpack.config.mjs @@ -2,10 +2,10 @@ import { fileURLToPath } from "url"; import path from "path"; export default { - mode: "production", - entry: "./main.js", - output: { - path: path.resolve(path.dirname(fileURLToPath(import.meta.url)), "dist"), - filename: "foo.bundle.js", - }, + mode: "production", + entry: "./main.js", + output: { + path: path.resolve(path.dirname(fileURLToPath(import.meta.url)), "dist"), + filename: "foo.bundle.js", + }, }; diff --git a/test/build/config-format/typescript-esnext/typescript.test.js b/test/build/config-format/typescript-esnext/typescript.test.js index ac916906038..d8d17ef684f 100644 --- a/test/build/config-format/typescript-esnext/typescript.test.js +++ b/test/build/config-format/typescript-esnext/typescript.test.js @@ -4,27 +4,27 @@ const { existsSync } = require("fs"); const { resolve } = require("path"); describe("webpack cli", () => { - it("should support typescript esnext file", async () => { - const isMacOS = process.platform === "darwin"; - const majorNodeVersion = process.version.slice(1, 3); - if (majorNodeVersion < 14) { - expect(true).toBe(true); + it("should support typescript esnext file", async () => { + const isMacOS = process.platform === "darwin"; + const majorNodeVersion = process.version.slice(1, 3); + if (majorNodeVersion < 14) { + expect(true).toBe(true); - return; - } + return; + } - if (isMacOS && !isWebpack5) { - expect(true).toBe(true); + if (isMacOS && !isWebpack5) { + expect(true).toBe(true); - return; - } + return; + } - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.ts"], { - nodeOptions: ["--loader=ts-node/esm"], - }); - expect(stderr).not.toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(exitCode).toBe(0); - expect(existsSync(resolve(__dirname, "dist/foo.bundle.js"))).toBeTruthy(); + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.ts"], { + nodeOptions: ["--loader=ts-node/esm"], }); + expect(stderr).not.toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); + expect(existsSync(resolve(__dirname, "dist/foo.bundle.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config-format/typescript-esnext/webpack.config.ts b/test/build/config-format/typescript-esnext/webpack.config.ts index 4790b3d8029..4dcffcff3be 100644 --- a/test/build/config-format/typescript-esnext/webpack.config.ts +++ b/test/build/config-format/typescript-esnext/webpack.config.ts @@ -2,12 +2,12 @@ import * as path from "path"; const config = { - mode: "production", - entry: "./main.ts", - output: { - path: path.resolve("dist"), - filename: "foo.bundle.js", - }, + mode: "production", + entry: "./main.ts", + output: { + path: path.resolve("dist"), + filename: "foo.bundle.js", + }, }; export default config; diff --git a/test/build/config-format/typescript/typescript.test.js b/test/build/config-format/typescript/typescript.test.js index 08f1a7e8b8d..02a630653b9 100644 --- a/test/build/config-format/typescript/typescript.test.js +++ b/test/build/config-format/typescript/typescript.test.js @@ -3,12 +3,12 @@ const { existsSync } = require("fs"); const { resolve } = require("path"); describe("webpack cli", () => { - it("should support typescript file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.ts"]); + it("should support typescript file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.ts"]); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(exitCode).toBe(0); - expect(existsSync(resolve(__dirname, "dist/foo.bundle.js"))).toBeTruthy(); - }); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); + expect(existsSync(resolve(__dirname, "dist/foo.bundle.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config-format/typescript/webpack.config.ts b/test/build/config-format/typescript/webpack.config.ts index c46268523b5..22f8d9130fe 100644 --- a/test/build/config-format/typescript/webpack.config.ts +++ b/test/build/config-format/typescript/webpack.config.ts @@ -3,12 +3,12 @@ import * as path from "path"; const config = { - mode: "production", - entry: "./main.ts", - output: { - path: path.resolve(__dirname, "dist"), - filename: "foo.bundle.js", - }, + mode: "production", + entry: "./main.ts", + output: { + path: path.resolve(__dirname, "dist"), + filename: "foo.bundle.js", + }, }; export = config; diff --git a/test/build/config-lookup/custom-name/config.webpack.js b/test/build/config-lookup/custom-name/config.webpack.js index 950e44a8b2a..f3ac06f1dd2 100644 --- a/test/build/config-lookup/custom-name/config.webpack.js +++ b/test/build/config-lookup/custom-name/config.webpack.js @@ -1,9 +1,9 @@ const { resolve } = require("path"); module.exports = { - entry: resolve("./a.js"), - output: { - path: resolve(__dirname, "binary"), - filename: "a.bundle.js", - }, + entry: resolve("./a.js"), + output: { + path: resolve(__dirname, "binary"), + filename: "a.bundle.js", + }, }; diff --git a/test/build/config-lookup/custom-name/config.webpack.mjs b/test/build/config-lookup/custom-name/config.webpack.mjs index 3b0545deb81..72a49f4c11c 100644 --- a/test/build/config-lookup/custom-name/config.webpack.mjs +++ b/test/build/config-lookup/custom-name/config.webpack.mjs @@ -2,9 +2,9 @@ import { fileURLToPath } from "url"; import path from "path"; export default { - entry: "./a.js", - output: { - path: path.resolve(path.dirname(fileURLToPath(import.meta.url)), "dist"), - filename: "a.bundle.js", - }, + entry: "./a.js", + output: { + path: path.resolve(path.dirname(fileURLToPath(import.meta.url)), "dist"), + filename: "a.bundle.js", + }, }; diff --git a/test/build/config-lookup/custom-name/custom-name.test.js b/test/build/config-lookup/custom-name/custom-name.test.js index ab211df7819..a555d7130a7 100644 --- a/test/build/config-lookup/custom-name/custom-name.test.js +++ b/test/build/config-lookup/custom-name/custom-name.test.js @@ -4,33 +4,33 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("custom config file", () => { - it("should work with cjs format", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config", - resolve(__dirname, "config.webpack.js"), - ]); + it("should work with cjs format", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config", + resolve(__dirname, "config.webpack.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); - it("should work with esm format", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--config", resolve(__dirname, "config.webpack.mjs")], - { - env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, - }, - ); + it("should work with esm format", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--config", resolve(__dirname, "config.webpack.mjs")], + { + env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, + }, + ); - if (/Error: Not supported/.test(stderr)) { - expect(exitCode).toBe(2); - expect(stdout).toBeFalsy(); - } else { - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - } - }); + if (/Error: Not supported/.test(stderr)) { + expect(exitCode).toBe(2); + expect(stdout).toBeFalsy(); + } else { + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + } + }); }); diff --git a/test/build/config-lookup/dotfolder-array/.webpack/webpack.config.js b/test/build/config-lookup/dotfolder-array/.webpack/webpack.config.js index ffc4f604abb..0d5eb3906d6 100644 --- a/test/build/config-lookup/dotfolder-array/.webpack/webpack.config.js +++ b/test/build/config-lookup/dotfolder-array/.webpack/webpack.config.js @@ -1,22 +1,22 @@ module.exports = [ - { - output: { - filename: './dist-amd.js', - libraryTarget: 'amd', - }, - name: 'amd', - entry: './a.js', - mode: 'development', - devtool: 'eval-cheap-module-source-map', + { + output: { + filename: "./dist-amd.js", + libraryTarget: "amd", }, - { - output: { - filename: './dist-commonjs.js', - libraryTarget: 'commonjs', - }, - name: 'commonjs', - entry: './a.js', - mode: 'development', - target: 'node', + name: "amd", + entry: "./a.js", + mode: "development", + devtool: "eval-cheap-module-source-map", + }, + { + output: { + filename: "./dist-commonjs.js", + libraryTarget: "commonjs", }, + name: "commonjs", + entry: "./a.js", + mode: "development", + target: "node", + }, ]; diff --git a/test/build/config-lookup/dotfolder-array/dotfolder-array.test.js b/test/build/config-lookup/dotfolder-array/dotfolder-array.test.js index 36d4cbff5d3..bd0a5d24fdd 100644 --- a/test/build/config-lookup/dotfolder-array/dotfolder-array.test.js +++ b/test/build/config-lookup/dotfolder-array/dotfolder-array.test.js @@ -4,13 +4,13 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("dotfolder array config lookup", () => { - it("should find a webpack array configuration in a dotfolder", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); + it("should find a webpack array configuration in a dotfolder", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./dist/dist-commonjs.js"))).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./dist/dist-amd.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./dist/dist-commonjs.js"))).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./dist/dist-amd.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config-lookup/dotfolder-single/.webpack/webpack.config.js b/test/build/config-lookup/dotfolder-single/.webpack/webpack.config.js index a7921511836..03efd3e7a18 100644 --- a/test/build/config-lookup/dotfolder-single/.webpack/webpack.config.js +++ b/test/build/config-lookup/dotfolder-single/.webpack/webpack.config.js @@ -1,3 +1,3 @@ module.exports = { - entry: './index_two.js', + entry: "./index_two.js", }; diff --git a/test/build/config-lookup/dotfolder-single/dotfolder-single.test.js b/test/build/config-lookup/dotfolder-single/dotfolder-single.test.js index a71ab9b51f9..6113c69b772 100644 --- a/test/build/config-lookup/dotfolder-single/dotfolder-single.test.js +++ b/test/build/config-lookup/dotfolder-single/dotfolder-single.test.js @@ -6,13 +6,13 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("dotfolder single config lookup", () => { - it("should find a webpack configuration in a dotfolder", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); + it("should find a webpack configuration in a dotfolder", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).not.toContain("Module not found"); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./dist/main.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).not.toContain("Module not found"); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./dist/main.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config-lookup/relative/basic-config.test.js b/test/build/config-lookup/relative/basic-config.test.js index cb07beb1082..1dd5d093896 100644 --- a/test/build/config-lookup/relative/basic-config.test.js +++ b/test/build/config-lookup/relative/basic-config.test.js @@ -3,29 +3,29 @@ const { run } = require("../../../utils/test-utils"); describe("relative path to config", () => { - it("should work", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "webpack.config.js", - "--output-path", - "./binary/a", - ]); + it("should work", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + "webpack.config.js", + "--output-path", + "./binary/a", + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); - it("should work #2", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "./webpack.config.js", - "--output-path", - "./binary/b", - ]); + it("should work #2", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + "./webpack.config.js", + "--output-path", + "./binary/b", + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/config-lookup/relative/webpack.config.js b/test/build/config-lookup/relative/webpack.config.js index 70a68756b2f..9043cafbd4b 100644 --- a/test/build/config-lookup/relative/webpack.config.js +++ b/test/build/config-lookup/relative/webpack.config.js @@ -1,9 +1,9 @@ const { resolve } = require("path"); module.exports = { - entry: "./a.js", - output: { - path: resolve(__dirname, "binary"), - filename: "a.bundle.js", - }, + entry: "./a.js", + output: { + path: resolve(__dirname, "binary"), + filename: "a.bundle.js", + }, }; diff --git a/test/build/config-name/config-name.test.js b/test/build/config-name/config-name.test.js index 4dee9145219..22a3515b595 100644 --- a/test/build/config-name/config-name.test.js +++ b/test/build/config-name/config-name.test.js @@ -3,140 +3,140 @@ const { run } = require("../../utils/test-utils"); describe("--config-name flag", () => { - it("should select only the config whose name is passed with --config-name", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--config-name", "first"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("first"); - expect(stdout).not.toContain("second"); - expect(stdout).not.toContain("third"); - }); - - it("should work with multiple values for --config-name", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config-name", - "first", - "--config-name", - "third", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("first"); - expect(stdout).not.toContain("second"); - expect(stdout).toContain("third"); - }); - - it("should work with multiple values for --config-name and multiple configurations", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - [ - "-c", - "./function-config.js", - "-c", - "./single-other-config.js", - "--config-name", - "first", - "--config-name", - "four", - ], - false, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("first"); - expect(stdout).not.toContain("second"); - expect(stdout).not.toContain("third"); - expect(stdout).toContain("four"); - }); - - it("should log error if invalid config name is provided", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--config-name", "test"]); - - expect(exitCode).toBe(2); - expect(stderr).toContain('Configuration with the name "test" was not found.'); - expect(stdout).toBeFalsy(); - }); - - it("should log error if multiple configurations are not found", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config-name", - "test", - "-c", - "single-config.js", - ]); - - expect(exitCode).toBe(2); - expect(stderr).toContain('Configuration with the name "test" was not found.'); - expect(stdout).toBeFalsy(); - }); - - it("should log error if multiple configurations are not found #1", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--config-name", "test", "--config-name", "bar", "-c", "single-config.js"], - false, - ); - - expect(exitCode).toBe(2); - expect(stderr).toContain('Configuration with the name "test" was not found.'); - expect(stderr).toContain('Configuration with the name "bar" was not found.'); - expect(stdout).toBeFalsy(); - }); - - it("should log error if multiple configurations are not found #2", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--config-name", "first", "--config-name", "bar", "-c", "single-config.js"], - false, - ); - - expect(exitCode).toBe(2); - expect(stderr).toContain('Configuration with the name "bar" was not found.'); - expect(stdout).toBeFalsy(); - }); - - it("should work with config as a function", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config", - "function-config.js", - "--config-name", - "first", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("first"); - expect(stdout).not.toContain("second"); - expect(stdout).not.toContain("third"); - }); - - it("should work with multiple values for --config-name when the config is a function", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--config", "function-config.js", "--config-name", "first", "--config-name", "third"], - false, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("first"); - expect(stdout).not.toContain("second"); - expect(stdout).toContain("third"); - }); - - it("should log error if invalid config name is provided ", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config", - "function-config.js", - "--config-name", - "test", - ]); - - expect(exitCode).toBe(2); - expect(stderr).toContain('Configuration with the name "test" was not found.'); - expect(stdout).toBeFalsy(); - }); + it("should select only the config whose name is passed with --config-name", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--config-name", "first"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("first"); + expect(stdout).not.toContain("second"); + expect(stdout).not.toContain("third"); + }); + + it("should work with multiple values for --config-name", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config-name", + "first", + "--config-name", + "third", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("first"); + expect(stdout).not.toContain("second"); + expect(stdout).toContain("third"); + }); + + it("should work with multiple values for --config-name and multiple configurations", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + [ + "-c", + "./function-config.js", + "-c", + "./single-other-config.js", + "--config-name", + "first", + "--config-name", + "four", + ], + false, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("first"); + expect(stdout).not.toContain("second"); + expect(stdout).not.toContain("third"); + expect(stdout).toContain("four"); + }); + + it("should log error if invalid config name is provided", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--config-name", "test"]); + + expect(exitCode).toBe(2); + expect(stderr).toContain('Configuration with the name "test" was not found.'); + expect(stdout).toBeFalsy(); + }); + + it("should log error if multiple configurations are not found", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config-name", + "test", + "-c", + "single-config.js", + ]); + + expect(exitCode).toBe(2); + expect(stderr).toContain('Configuration with the name "test" was not found.'); + expect(stdout).toBeFalsy(); + }); + + it("should log error if multiple configurations are not found #1", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--config-name", "test", "--config-name", "bar", "-c", "single-config.js"], + false, + ); + + expect(exitCode).toBe(2); + expect(stderr).toContain('Configuration with the name "test" was not found.'); + expect(stderr).toContain('Configuration with the name "bar" was not found.'); + expect(stdout).toBeFalsy(); + }); + + it("should log error if multiple configurations are not found #2", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--config-name", "first", "--config-name", "bar", "-c", "single-config.js"], + false, + ); + + expect(exitCode).toBe(2); + expect(stderr).toContain('Configuration with the name "bar" was not found.'); + expect(stdout).toBeFalsy(); + }); + + it("should work with config as a function", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config", + "function-config.js", + "--config-name", + "first", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("first"); + expect(stdout).not.toContain("second"); + expect(stdout).not.toContain("third"); + }); + + it("should work with multiple values for --config-name when the config is a function", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--config", "function-config.js", "--config-name", "first", "--config-name", "third"], + false, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("first"); + expect(stdout).not.toContain("second"); + expect(stdout).toContain("third"); + }); + + it("should log error if invalid config name is provided ", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config", + "function-config.js", + "--config-name", + "test", + ]); + + expect(exitCode).toBe(2); + expect(stderr).toContain('Configuration with the name "test" was not found.'); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/config-name/function-config.js b/test/build/config-name/function-config.js index 1f3c3343254..a7939ecba26 100644 --- a/test/build/config-name/function-config.js +++ b/test/build/config-name/function-config.js @@ -1,26 +1,26 @@ module.exports = () => [ - { - output: { - filename: "./dist-first.js", - }, - name: "first", - entry: "./src/first.js", - mode: "development", + { + output: { + filename: "./dist-first.js", }, - { - output: { - filename: "./dist-second.js", - }, - name: "second", - entry: "./src/second.js", - mode: "development", + name: "first", + entry: "./src/first.js", + mode: "development", + }, + { + output: { + filename: "./dist-second.js", }, - { - output: { - filename: "./dist-third.js", - }, - name: "third", - entry: "./src/third.js", - mode: "none", + name: "second", + entry: "./src/second.js", + mode: "development", + }, + { + output: { + filename: "./dist-third.js", }, + name: "third", + entry: "./src/third.js", + mode: "none", + }, ]; diff --git a/test/build/config-name/single-config.js b/test/build/config-name/single-config.js index aa3c87af2b5..373b96ac747 100644 --- a/test/build/config-name/single-config.js +++ b/test/build/config-name/single-config.js @@ -1,8 +1,8 @@ module.exports = { - output: { - filename: "./dist-single.js", - }, - name: "first", - entry: "./src/first.js", - mode: "development", + output: { + filename: "./dist-single.js", + }, + name: "first", + entry: "./src/first.js", + mode: "development", }; diff --git a/test/build/config-name/single-other-config.js b/test/build/config-name/single-other-config.js index 46055e1a635..4a8caf5b6e4 100644 --- a/test/build/config-name/single-other-config.js +++ b/test/build/config-name/single-other-config.js @@ -1,8 +1,8 @@ module.exports = { - output: { - filename: "./dist-single.js", - }, - name: "four", - entry: "./src/first.js", - mode: "development", + output: { + filename: "./dist-single.js", + }, + name: "four", + entry: "./src/first.js", + mode: "development", }; diff --git a/test/build/config-name/webpack.config.js b/test/build/config-name/webpack.config.js index 97ae11c7127..d800bd67bc3 100644 --- a/test/build/config-name/webpack.config.js +++ b/test/build/config-name/webpack.config.js @@ -1,27 +1,27 @@ module.exports = [ - { - output: { - filename: "./dist-first.js", - }, - name: "first", - entry: "./src/first.js", - mode: "development", + { + output: { + filename: "./dist-first.js", }, - { - output: { - filename: "./dist-second.js", - }, - name: "second", - entry: "./src/second.js", - mode: "development", + name: "first", + entry: "./src/first.js", + mode: "development", + }, + { + output: { + filename: "./dist-second.js", }, - { - output: { - filename: "./dist-third.js", - }, - name: "third", - entry: "./src/third.js", - mode: "none", - stats: "verbose", + name: "second", + entry: "./src/second.js", + mode: "development", + }, + { + output: { + filename: "./dist-third.js", }, + name: "third", + entry: "./src/third.js", + mode: "none", + stats: "verbose", + }, ]; diff --git a/test/build/config/absent/config-absent.test.js b/test/build/config/absent/config-absent.test.js index 9442d6b6199..d79d5f7ddfe 100644 --- a/test/build/config/absent/config-absent.test.js +++ b/test/build/config/absent/config-absent.test.js @@ -4,18 +4,18 @@ const path = require("path"); const { run } = require("../../../utils/test-utils"); describe("Config:", () => { - it("supplied config file is absent", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - path.resolve(__dirname, "webpack.config.js"), - ]); + it("supplied config file is absent", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + path.resolve(__dirname, "webpack.config.js"), + ]); - // should throw with correct exit code - expect(exitCode).toBe(2); - // Should contain the correct error message - expect(stderr).toContain( - `Failed to load '${path.resolve(__dirname, "webpack.config.js")}' config`, - ); - expect(stdout).toBeFalsy(); - }); + // should throw with correct exit code + expect(exitCode).toBe(2); + // Should contain the correct error message + expect(stderr).toContain( + `Failed to load '${path.resolve(__dirname, "webpack.config.js")}' config`, + ); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/config/absent/webpack.config-absent.js b/test/build/config/absent/webpack.config-absent.js index 70a68756b2f..9043cafbd4b 100644 --- a/test/build/config/absent/webpack.config-absent.js +++ b/test/build/config/absent/webpack.config-absent.js @@ -1,9 +1,9 @@ const { resolve } = require("path"); module.exports = { - entry: "./a.js", - output: { - path: resolve(__dirname, "binary"), - filename: "a.bundle.js", - }, + entry: "./a.js", + output: { + path: resolve(__dirname, "binary"), + filename: "a.bundle.js", + }, }; diff --git a/test/build/config/basic/basic-config.test.js b/test/build/config/basic/basic-config.test.js index 3fa970ffdc4..180041bdce4 100644 --- a/test/build/config/basic/basic-config.test.js +++ b/test/build/config/basic/basic-config.test.js @@ -4,15 +4,15 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("basic config file", () => { - it("is able to understand and parse a very basic configuration file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - "--output-path", - "./binary", - ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + it("is able to understand and parse a very basic configuration file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + "--output-path", + "./binary", + ]); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/config/basic/webpack.config.js b/test/build/config/basic/webpack.config.js index 70a68756b2f..9043cafbd4b 100644 --- a/test/build/config/basic/webpack.config.js +++ b/test/build/config/basic/webpack.config.js @@ -1,9 +1,9 @@ const { resolve } = require("path"); module.exports = { - entry: "./a.js", - output: { - path: resolve(__dirname, "binary"), - filename: "a.bundle.js", - }, + entry: "./a.js", + output: { + path: resolve(__dirname, "binary"), + filename: "a.bundle.js", + }, }; diff --git a/test/build/config/defaults/basic-config/default-js-config.test.js b/test/build/config/defaults/basic-config/default-js-config.test.js index 4c8545729c8..012e50e97a4 100644 --- a/test/build/config/defaults/basic-config/default-js-config.test.js +++ b/test/build/config/defaults/basic-config/default-js-config.test.js @@ -3,25 +3,25 @@ const path = require("path"); const { run, isWebpack5 } = require("../../../../utils/test-utils"); describe("Zero Config", () => { - it("runs when config is present but not supplied via flag", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); + it("runs when config is present but not supplied via flag", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); - // default entry should be used - expect(stdout).toContain("./src/index.js"); - // should pick up the output path from config - expect(stdout).toContain("test-output"); + // default entry should be used + expect(stdout).toContain("./src/index.js"); + // should pick up the output path from config + expect(stdout).toContain("test-output"); - if (!isWebpack5) { - expect(stdout).toContain("Hash"); - expect(stdout).toContain("Version"); - expect(stdout).toContain("Built at"); - expect(stdout).toContain("Time"); - } + if (!isWebpack5) { + expect(stdout).toContain("Hash"); + expect(stdout).toContain("Version"); + expect(stdout).toContain("Built at"); + expect(stdout).toContain("Time"); + } - // check that the output file exists - expect(fs.existsSync(path.join(__dirname, "/dist/test-output.js"))).toBeTruthy(); - }); + // check that the output file exists + expect(fs.existsSync(path.join(__dirname, "/dist/test-output.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/defaults/basic-config/webpack.config.js b/test/build/config/defaults/basic-config/webpack.config.js index e153ad2935b..f5ec877c982 100644 --- a/test/build/config/defaults/basic-config/webpack.config.js +++ b/test/build/config/defaults/basic-config/webpack.config.js @@ -1,6 +1,6 @@ module.exports = { - mode: "development", - output: { - filename: "test-output.js", - }, + mode: "development", + output: { + filename: "test-output.js", + }, }; diff --git a/test/build/config/defaults/cjs-config/default-cjs-config.test.js b/test/build/config/defaults/cjs-config/default-cjs-config.test.js index 096652549bf..80ff2007dc0 100644 --- a/test/build/config/defaults/cjs-config/default-cjs-config.test.js +++ b/test/build/config/defaults/cjs-config/default-cjs-config.test.js @@ -3,24 +3,24 @@ const path = require("path"); const { run, isWebpack5 } = require("../../../../utils/test-utils"); describe("Default Config:", () => { - it("Should be able to pick cjs config by default", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); + it("Should be able to pick cjs config by default", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); - // default entry should be used - expect(stdout).toContain("./src/index.js"); - // should pick up the output path from config - expect(stdout).toContain("test-output"); + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); + // default entry should be used + expect(stdout).toContain("./src/index.js"); + // should pick up the output path from config + expect(stdout).toContain("test-output"); - if (!isWebpack5) { - expect(stdout).toContain("Hash"); - expect(stdout).toContain("Version"); - expect(stdout).toContain("Built at"); - expect(stdout).toContain("Time"); - } + if (!isWebpack5) { + expect(stdout).toContain("Hash"); + expect(stdout).toContain("Version"); + expect(stdout).toContain("Built at"); + expect(stdout).toContain("Time"); + } - // check that the output file exists - expect(fs.existsSync(path.join(__dirname, "/dist/test-output.js"))).toBeTruthy(); - }); + // check that the output file exists + expect(fs.existsSync(path.join(__dirname, "/dist/test-output.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/defaults/cjs-config/webpack.config.cjs b/test/build/config/defaults/cjs-config/webpack.config.cjs index e153ad2935b..f5ec877c982 100644 --- a/test/build/config/defaults/cjs-config/webpack.config.cjs +++ b/test/build/config/defaults/cjs-config/webpack.config.cjs @@ -1,6 +1,6 @@ module.exports = { - mode: "development", - output: { - filename: "test-output.js", - }, + mode: "development", + output: { + filename: "test-output.js", + }, }; diff --git a/test/build/config/defaults/dot-webpack-directory-webpackfile/.webpack/webpackfile.js b/test/build/config/defaults/dot-webpack-directory-webpackfile/.webpack/webpackfile.js index 251a60f7352..68096e0980a 100644 --- a/test/build/config/defaults/dot-webpack-directory-webpackfile/.webpack/webpackfile.js +++ b/test/build/config/defaults/dot-webpack-directory-webpackfile/.webpack/webpackfile.js @@ -1,9 +1,9 @@ -const { resolve } = require('path'); +const { resolve } = require("path"); module.exports = { - entry: './index.js', - output: { - path: resolve(__dirname, '../binary'), - filename: 'dev.folder.js', - }, + entry: "./index.js", + output: { + path: resolve(__dirname, "../binary"), + filename: "dev.folder.js", + }, }; diff --git a/test/build/config/defaults/dot-webpack-directory-webpackfile/multiple-location-config.test.js b/test/build/config/defaults/dot-webpack-directory-webpackfile/multiple-location-config.test.js index d5bc1d8ad9c..9a4960a5928 100644 --- a/test/build/config/defaults/dot-webpack-directory-webpackfile/multiple-location-config.test.js +++ b/test/build/config/defaults/dot-webpack-directory-webpackfile/multiple-location-config.test.js @@ -4,11 +4,11 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("multiple dev config files with webpack.config.js", () => { - it("Uses webpack.config.development.js", async () => { - const { stdout, stderr, exitCode } = await run(__dirname, []); - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); - expect(stdout).not.toBe(undefined); - expect(existsSync(resolve(__dirname, "./binary/dev.folder.js"))).toBeTruthy(); - }); + it("Uses webpack.config.development.js", async () => { + const { stdout, stderr, exitCode } = await run(__dirname, []); + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); + expect(stdout).not.toBe(undefined); + expect(existsSync(resolve(__dirname, "./binary/dev.folder.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/defaults/dot-webpack-directory/.webpack/webpack.config.js b/test/build/config/defaults/dot-webpack-directory/.webpack/webpack.config.js index ba00a518a7d..b8cdf08a939 100644 --- a/test/build/config/defaults/dot-webpack-directory/.webpack/webpack.config.js +++ b/test/build/config/defaults/dot-webpack-directory/.webpack/webpack.config.js @@ -1,9 +1,9 @@ -const { resolve } = require('path'); +const { resolve } = require("path"); module.exports = { - entry: './index.js', - output: { - path: resolve(__dirname, '../binary'), - filename: 'dev.bundle.js', - }, + entry: "./index.js", + output: { + path: resolve(__dirname, "../binary"), + filename: "dev.bundle.js", + }, }; diff --git a/test/build/config/defaults/dot-webpack-directory/dev-none-config.test.js b/test/build/config/defaults/dot-webpack-directory/dev-none-config.test.js index c4948bebd66..466ba729d2e 100644 --- a/test/build/config/defaults/dot-webpack-directory/dev-none-config.test.js +++ b/test/build/config/defaults/dot-webpack-directory/dev-none-config.test.js @@ -4,11 +4,11 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("multiple config files", () => { - it("Uses dev config when both dev and none are present", async () => { - const { stdout, stderr, exitCode } = await run(__dirname, []); - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); - expect(stdout).not.toBe(undefined); - expect(existsSync(resolve(__dirname, "./binary/dev.bundle.js"))).toBeTruthy(); - }); + it("Uses dev config when both dev and none are present", async () => { + const { stdout, stderr, exitCode } = await run(__dirname, []); + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); + expect(stdout).not.toBe(undefined); + expect(existsSync(resolve(__dirname, "./binary/dev.bundle.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/defaults/mjs-config/default-mjs-config.test.js b/test/build/config/defaults/mjs-config/default-mjs-config.test.js index 3577a417d1d..1b73a13983d 100644 --- a/test/build/config/defaults/mjs-config/default-mjs-config.test.js +++ b/test/build/config/defaults/mjs-config/default-mjs-config.test.js @@ -3,31 +3,31 @@ const path = require("path"); const { run, isWebpack5 } = require("../../../../utils/test-utils"); describe("Default Config:", () => { - it("Should be able to pick mjs config by default", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [], { - env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, - }); + it("Should be able to pick mjs config by default", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [], { + env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, + }); - if (/Error: Not supported/.test(stderr)) { - expect(exitCode).toEqual(2); - expect(stdout).toBeFalsy(); - } else { - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); - // default entry should be used - expect(stdout).toContain("./src/index.js"); - // should pick up the output path from config - expect(stdout).toContain("test-output"); + if (/Error: Not supported/.test(stderr)) { + expect(exitCode).toEqual(2); + expect(stdout).toBeFalsy(); + } else { + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); + // default entry should be used + expect(stdout).toContain("./src/index.js"); + // should pick up the output path from config + expect(stdout).toContain("test-output"); - if (!isWebpack5) { - expect(stdout).toContain("Hash"); - expect(stdout).toContain("Version"); - expect(stdout).toContain("Built at"); - expect(stdout).toContain("Time"); - } + if (!isWebpack5) { + expect(stdout).toContain("Hash"); + expect(stdout).toContain("Version"); + expect(stdout).toContain("Built at"); + expect(stdout).toContain("Time"); + } - // check that the output file exists - expect(fs.existsSync(path.join(__dirname, "/dist/test-output.js"))).toBeTruthy(); - } - }); + // check that the output file exists + expect(fs.existsSync(path.join(__dirname, "/dist/test-output.js"))).toBeTruthy(); + } + }); }); diff --git a/test/build/config/defaults/mjs-config/webpack.config.mjs b/test/build/config/defaults/mjs-config/webpack.config.mjs index 07661617d18..577322bda5a 100644 --- a/test/build/config/defaults/mjs-config/webpack.config.mjs +++ b/test/build/config/defaults/mjs-config/webpack.config.mjs @@ -1,6 +1,6 @@ export default { - mode: "development", - output: { - filename: "test-output.js", - }, + mode: "development", + output: { + filename: "test-output.js", + }, }; diff --git a/test/build/config/defaults/with-mode/multiple-config.test.js b/test/build/config/defaults/with-mode/multiple-config.test.js index 65fca69f2ee..189ca39770b 100644 --- a/test/build/config/defaults/with-mode/multiple-config.test.js +++ b/test/build/config/defaults/with-mode/multiple-config.test.js @@ -4,11 +4,11 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("multiple config files", () => { - it("Uses dev config when development mode is supplied", async () => { - const { stdout, stderr, exitCode } = await run(__dirname, ["--mode", "development"]); - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); - expect(stdout).not.toBe(undefined); - expect(existsSync(resolve(__dirname, "./binary/dev.bundle.js"))).toBeTruthy(); - }); + it("Uses dev config when development mode is supplied", async () => { + const { stdout, stderr, exitCode } = await run(__dirname, ["--mode", "development"]); + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); + expect(stdout).not.toBe(undefined); + expect(existsSync(resolve(__dirname, "./binary/dev.bundle.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/defaults/with-mode/webpack.config.js b/test/build/config/defaults/with-mode/webpack.config.js index 5bba6294662..650c20ac873 100644 --- a/test/build/config/defaults/with-mode/webpack.config.js +++ b/test/build/config/defaults/with-mode/webpack.config.js @@ -1,9 +1,9 @@ const { resolve } = require("path"); module.exports = { - entry: "./index.js", - output: { - path: resolve(__dirname, "./binary"), - filename: "dev.bundle.js", - }, + entry: "./index.js", + output: { + path: resolve(__dirname, "./binary"), + filename: "dev.bundle.js", + }, }; diff --git a/test/build/config/empty-array/empty-array.test.js b/test/build/config/empty-array/empty-array.test.js index ec3ef7203b4..eb87fab2587 100644 --- a/test/build/config/empty-array/empty-array.test.js +++ b/test/build/config/empty-array/empty-array.test.js @@ -3,14 +3,14 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("config flag with empty config file", () => { - it("should throw error with no configuration or index file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("should throw error with no configuration or index file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/config/empty-function/empty-function.test.js b/test/build/config/empty-function/empty-function.test.js index ec3ef7203b4..eb87fab2587 100644 --- a/test/build/config/empty-function/empty-function.test.js +++ b/test/build/config/empty-function/empty-function.test.js @@ -3,14 +3,14 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("config flag with empty config file", () => { - it("should throw error with no configuration or index file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("should throw error with no configuration or index file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/config/empty-function/webpack.config.js b/test/build/config/empty-function/webpack.config.js index 3b86b2a2eac..d57b111be72 100644 --- a/test/build/config/empty-function/webpack.config.js +++ b/test/build/config/empty-function/webpack.config.js @@ -1,3 +1,3 @@ module.exports = () => { - return {}; + return {}; }; diff --git a/test/build/config/empty-promise/empty-promise.test.js b/test/build/config/empty-promise/empty-promise.test.js index ec3ef7203b4..eb87fab2587 100644 --- a/test/build/config/empty-promise/empty-promise.test.js +++ b/test/build/config/empty-promise/empty-promise.test.js @@ -3,14 +3,14 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("config flag with empty config file", () => { - it("should throw error with no configuration or index file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("should throw error with no configuration or index file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/config/empty-promise/webpack.config.js b/test/build/config/empty-promise/webpack.config.js index c8a4865f9d6..6c33878ce07 100644 --- a/test/build/config/empty-promise/webpack.config.js +++ b/test/build/config/empty-promise/webpack.config.js @@ -1,3 +1,3 @@ module.exports = new Promise((resolve) => { - resolve({}); + resolve({}); }); diff --git a/test/build/config/empty/empty.test.js b/test/build/config/empty/empty.test.js index ec3ef7203b4..eb87fab2587 100644 --- a/test/build/config/empty/empty.test.js +++ b/test/build/config/empty/empty.test.js @@ -3,14 +3,14 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("config flag with empty config file", () => { - it("should throw error with no configuration or index file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("should throw error with no configuration or index file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/config/error-array/config-array-error.test.js b/test/build/config/error-array/config-array-error.test.js index b803321dd7e..a16f4e4f507 100644 --- a/test/build/config/error-array/config-array-error.test.js +++ b/test/build/config/error-array/config-array-error.test.js @@ -2,10 +2,10 @@ const { run } = require("../../../utils/test-utils"); describe("array config error", () => { - it("should throw syntax error and exit with non-zero exit code when even 1 object has syntax error", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); - expect(exitCode).toBe(2); - expect(stderr).toContain("SyntaxError: Unexpected token"); - expect(stdout).toBeFalsy(); - }); + it("should throw syntax error and exit with non-zero exit code when even 1 object has syntax error", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); + expect(exitCode).toBe(2); + expect(stderr).toContain("SyntaxError: Unexpected token"); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/config/error-commonjs/config-error.test.js b/test/build/config/error-commonjs/config-error.test.js index 89f2969234d..e5baa11acde 100644 --- a/test/build/config/error-commonjs/config-error.test.js +++ b/test/build/config/error-commonjs/config-error.test.js @@ -3,26 +3,26 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("config error", () => { - it("should throw error with invalid configuration", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("should throw error with invalid configuration", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(2); - expect(stderr).toContain("Invalid configuration object"); - expect(stderr).toContain(`"development" | "production" | "none"`); - expect(stdout).toBeFalsy(); - }); + expect(exitCode).toBe(2); + expect(stderr).toContain("Invalid configuration object"); + expect(stderr).toContain(`"development" | "production" | "none"`); + expect(stdout).toBeFalsy(); + }); - it("should throw syntax error and exit with non-zero exit code", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "syntax-error.js"), - ]); + it("should throw syntax error and exit with non-zero exit code", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "syntax-error.js"), + ]); - expect(exitCode).toBe(2); - expect(stderr).toContain("SyntaxError: Unexpected token"); - expect(stdout).toBeFalsy(); - }); + expect(exitCode).toBe(2); + expect(stderr).toContain("SyntaxError: Unexpected token"); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/config/error-commonjs/webpack.config.js b/test/build/config/error-commonjs/webpack.config.js index a54311d53f7..e3b5357d892 100644 --- a/test/build/config/error-commonjs/webpack.config.js +++ b/test/build/config/error-commonjs/webpack.config.js @@ -1,5 +1,5 @@ module.exports = { - name: "config-error", - mode: "unknown", //error - target: "node", + name: "config-error", + mode: "unknown", //error + target: "node", }; diff --git a/test/build/config/error-mjs/config-error.test.js b/test/build/config/error-mjs/config-error.test.js index 6a69898ca13..ad0276b4679 100644 --- a/test/build/config/error-mjs/config-error.test.js +++ b/test/build/config/error-mjs/config-error.test.js @@ -3,40 +3,40 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("config error", () => { - it("should throw error with invalid configuration", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["-c", resolve(__dirname, "webpack.config.mjs")], - { - env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, - }, - ); - - expect(exitCode).toBe(2); - - if (!/Error: Not supported/.test(stderr)) { - expect(stderr).toContain("Invalid configuration object"); - expect(stderr).toContain(`"development" | "production" | "none"`); - } - - expect(stdout).toBeFalsy(); - }); - - it("should throw syntax error and exit with non-zero exit code", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["-c", resolve(__dirname, "syntax-error.mjs")], - { - env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, - }, - ); - - expect(exitCode).toBe(2); - - if (!/Error: Not supported/.test(stderr)) { - expect(stderr).toContain("SyntaxError: Unexpected token"); - } - - expect(stdout).toBeFalsy(); - }); + it("should throw error with invalid configuration", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["-c", resolve(__dirname, "webpack.config.mjs")], + { + env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, + }, + ); + + expect(exitCode).toBe(2); + + if (!/Error: Not supported/.test(stderr)) { + expect(stderr).toContain("Invalid configuration object"); + expect(stderr).toContain(`"development" | "production" | "none"`); + } + + expect(stdout).toBeFalsy(); + }); + + it("should throw syntax error and exit with non-zero exit code", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["-c", resolve(__dirname, "syntax-error.mjs")], + { + env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, + }, + ); + + expect(exitCode).toBe(2); + + if (!/Error: Not supported/.test(stderr)) { + expect(stderr).toContain("SyntaxError: Unexpected token"); + } + + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/config/error-mjs/webpack.config.mjs b/test/build/config/error-mjs/webpack.config.mjs index 6f46f196806..bd95fc87948 100644 --- a/test/build/config/error-mjs/webpack.config.mjs +++ b/test/build/config/error-mjs/webpack.config.mjs @@ -1,5 +1,5 @@ export default { - name: "config-error", - mode: "unknown", //error - target: "node", + name: "config-error", + mode: "unknown", //error + target: "node", }; diff --git a/test/build/config/function/functional-config.test.js b/test/build/config/function/functional-config.test.js index 034ece3a855..d657588d99a 100644 --- a/test/build/config/function/functional-config.test.js +++ b/test/build/config/function/functional-config.test.js @@ -5,29 +5,29 @@ const { existsSync } = require("fs"); const { run } = require("../../../utils/test-utils"); describe("functional config", () => { - it("should work as expected in case of single config", async () => { - const { stderr, stdout, exitCode } = await run(__dirname, [ - "--config", - resolve(__dirname, "single-webpack.config.js"), - ]); + it("should work as expected in case of single config", async () => { + const { stderr, stdout, exitCode } = await run(__dirname, [ + "--config", + resolve(__dirname, "single-webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("./src/index.js"); - expect(existsSync(resolve(__dirname, "./dist/dist-single.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("./src/index.js"); + expect(existsSync(resolve(__dirname, "./dist/dist-single.js"))).toBeTruthy(); + }); - it("should work as expected in case of multiple config", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config", - resolve(__dirname, "multi-webpack.config.js"), - ]); + it("should work as expected in case of multiple config", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config", + resolve(__dirname, "multi-webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("first"); - expect(stdout).toContain("second"); - expect(existsSync(resolve(__dirname, "./dist/dist-first.js"))).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./dist/dist-second.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("first"); + expect(stdout).toContain("second"); + expect(existsSync(resolve(__dirname, "./dist/dist-first.js"))).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./dist/dist-second.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/function/multi-webpack.config.js b/test/build/config/function/multi-webpack.config.js index e2d8ab2eb43..f82f79ada0a 100644 --- a/test/build/config/function/multi-webpack.config.js +++ b/test/build/config/function/multi-webpack.config.js @@ -1,20 +1,20 @@ module.exports = () => [ - { - output: { - filename: "./dist-first.js", - }, - name: "first", - entry: "./src/first.js", - mode: "development", - stats: "minimal", + { + output: { + filename: "./dist-first.js", }, - { - output: { - filename: "./dist-second.js", - }, - name: "second", - entry: "./src/second.js", - mode: "development", - stats: "minimal", + name: "first", + entry: "./src/first.js", + mode: "development", + stats: "minimal", + }, + { + output: { + filename: "./dist-second.js", }, + name: "second", + entry: "./src/second.js", + mode: "development", + stats: "minimal", + }, ]; diff --git a/test/build/config/function/single-webpack.config.js b/test/build/config/function/single-webpack.config.js index c4f546f3f5d..88248fb42b1 100644 --- a/test/build/config/function/single-webpack.config.js +++ b/test/build/config/function/single-webpack.config.js @@ -1,9 +1,9 @@ module.exports = () => { - return { - output: { - filename: "./dist-single.js", - }, - name: "single", - mode: "development", - }; + return { + output: { + filename: "./dist-single.js", + }, + name: "single", + mode: "development", + }; }; diff --git a/test/build/config/invalid-export/invalid-export.test.js b/test/build/config/invalid-export/invalid-export.test.js index 7a70a7d5fa8..e47054e71df 100644 --- a/test/build/config/invalid-export/invalid-export.test.js +++ b/test/build/config/invalid-export/invalid-export.test.js @@ -3,16 +3,16 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("invalid export", () => { - it("should throw error with no configuration or index file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("should throw error with no configuration or index file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(2); - expect(stderr).toContain( - `Invalid configuration in '${resolve(__dirname, "webpack.config.js")}'`, - ); - expect(stdout).toBeFalsy(); - }); + expect(exitCode).toBe(2); + expect(stderr).toContain( + `Invalid configuration in '${resolve(__dirname, "webpack.config.js")}'`, + ); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/config/invalid-path/invalid-path.test.js b/test/build/config/invalid-path/invalid-path.test.js index 6b73ece3b70..d54df8c455e 100644 --- a/test/build/config/invalid-path/invalid-path.test.js +++ b/test/build/config/invalid-path/invalid-path.test.js @@ -3,16 +3,16 @@ const path = require("path"); const { run } = require("../../../utils/test-utils"); describe("basic config file", () => { - it("is able to understand and parse a very basic configuration file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - path.resolve(__dirname, "invalid-webpack.config.js"), - ]); + it("is able to understand and parse a very basic configuration file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + path.resolve(__dirname, "invalid-webpack.config.js"), + ]); - expect(exitCode).toBe(2); - expect(stderr).toContain( - `Failed to load '${path.resolve(__dirname, "invalid-webpack.config.js")}' config`, - ); - expect(stdout).toBeFalsy(); - }); + expect(exitCode).toBe(2); + expect(stderr).toContain( + `Failed to load '${path.resolve(__dirname, "invalid-webpack.config.js")}' config`, + ); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/config/invalid-path/webpack.config.js b/test/build/config/invalid-path/webpack.config.js index 70a68756b2f..9043cafbd4b 100644 --- a/test/build/config/invalid-path/webpack.config.js +++ b/test/build/config/invalid-path/webpack.config.js @@ -1,9 +1,9 @@ const { resolve } = require("path"); module.exports = { - entry: "./a.js", - output: { - path: resolve(__dirname, "binary"), - filename: "a.bundle.js", - }, + entry: "./a.js", + output: { + path: resolve(__dirname, "binary"), + filename: "a.bundle.js", + }, }; diff --git a/test/build/config/multiple-with-one-compilation/multiple-with-one-compilation.test.js b/test/build/config/multiple-with-one-compilation/multiple-with-one-compilation.test.js index 3fa970ffdc4..180041bdce4 100644 --- a/test/build/config/multiple-with-one-compilation/multiple-with-one-compilation.test.js +++ b/test/build/config/multiple-with-one-compilation/multiple-with-one-compilation.test.js @@ -4,15 +4,15 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("basic config file", () => { - it("is able to understand and parse a very basic configuration file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - "--output-path", - "./binary", - ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + it("is able to understand and parse a very basic configuration file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + "--output-path", + "./binary", + ]); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/config/multiple-with-one-compilation/webpack.config.js b/test/build/config/multiple-with-one-compilation/webpack.config.js index 43c9fb9da62..c8f44781036 100644 --- a/test/build/config/multiple-with-one-compilation/webpack.config.js +++ b/test/build/config/multiple-with-one-compilation/webpack.config.js @@ -1,11 +1,11 @@ const { resolve } = require("path"); module.exports = [ - { - entry: "./a.js", - output: { - path: resolve(__dirname, "binary"), - filename: "a.bundle.js", - }, + { + entry: "./a.js", + output: { + path: resolve(__dirname, "binary"), + filename: "a.bundle.js", }, + }, ]; diff --git a/test/build/config/multiple/multiple-config.test.js b/test/build/config/multiple/multiple-config.test.js index fea09f2d6f7..c63293b0641 100644 --- a/test/build/config/multiple/multiple-config.test.js +++ b/test/build/config/multiple/multiple-config.test.js @@ -3,19 +3,19 @@ const { run } = require("../../../utils/test-utils"); describe("Multiple config flag: ", () => { - it("spawns multiple compilers for multiple configs", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config", - "webpack1.config.js", - "--config", - "webpack2.config.js", - ]); + it("spawns multiple compilers for multiple configs", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config", + "webpack1.config.js", + "--config", + "webpack2.config.js", + ]); - // Should contain the correct exit code - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); - // Should spawn multiple compilers - expect(stdout).toContain("amd:"); - expect(stdout).toContain("commonjs:"); - }); + // Should contain the correct exit code + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); + // Should spawn multiple compilers + expect(stdout).toContain("amd:"); + expect(stdout).toContain("commonjs:"); + }); }); diff --git a/test/build/config/multiple/webpack1.config.js b/test/build/config/multiple/webpack1.config.js index 7cc9c7ab4d8..45407434b18 100644 --- a/test/build/config/multiple/webpack1.config.js +++ b/test/build/config/multiple/webpack1.config.js @@ -1,10 +1,10 @@ module.exports = { - output: { - filename: "./dist-amd.js", - libraryTarget: "amd", - }, - name: "amd", - entry: "./init.js", - mode: "development", - devtool: "eval-cheap-module-source-map", + output: { + filename: "./dist-amd.js", + libraryTarget: "amd", + }, + name: "amd", + entry: "./init.js", + mode: "development", + devtool: "eval-cheap-module-source-map", }; diff --git a/test/build/config/multiple/webpack2.config.js b/test/build/config/multiple/webpack2.config.js index ec3198f969e..cb8acbb44ba 100644 --- a/test/build/config/multiple/webpack2.config.js +++ b/test/build/config/multiple/webpack2.config.js @@ -1,10 +1,10 @@ module.exports = { - output: { - filename: "./dist-commonjs.js", - libraryTarget: "commonjs", - }, - name: "commonjs", - entry: "./init.js", - mode: "development", - target: "node", + output: { + filename: "./dist-commonjs.js", + libraryTarget: "commonjs", + }, + name: "commonjs", + entry: "./init.js", + mode: "development", + target: "node", }; diff --git a/test/build/config/no-config-array/no-config-array.test.js b/test/build/config/no-config-array/no-config-array.test.js index 24593003722..aa56ae7267c 100644 --- a/test/build/config/no-config-array/no-config-array.test.js +++ b/test/build/config/no-config-array/no-config-array.test.js @@ -4,14 +4,14 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("no configs in array", () => { - it("is able to understand and parse a very basic configuration file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("is able to understand and parse a very basic configuration file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeFalsy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/config/no-config-object/no-config-object.test.js b/test/build/config/no-config-object/no-config-object.test.js index faba425b674..e88b1339d03 100644 --- a/test/build/config/no-config-object/no-config-object.test.js +++ b/test/build/config/no-config-object/no-config-object.test.js @@ -4,16 +4,16 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("empty config", () => { - it("should work", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - "--mode", - "development", - ]); + it("should work", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + "--mode", + "development", + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/config/top-multi-compilers-options/top-multi-compilers-options.test.js b/test/build/config/top-multi-compilers-options/top-multi-compilers-options.test.js index 607a82e3e3c..7602e464cd7 100644 --- a/test/build/config/top-multi-compilers-options/top-multi-compilers-options.test.js +++ b/test/build/config/top-multi-compilers-options/top-multi-compilers-options.test.js @@ -4,32 +4,32 @@ const { resolve } = require("path"); const { run, isWebpack5 } = require("../../../utils/test-utils"); describe("top multi compiler options", () => { - it("should work without provided configuration", async () => { - const { exitCode, stderr, stdout } = await run(__dirname); + it("should work without provided configuration", async () => { + const { exitCode, stderr, stdout } = await run(__dirname); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); - if (isWebpack5) { - expect(stdout).toContain("Done build0\nDone build1\nDone build2\nDone build3"); - } else { - expect(stdout).toBeTruthy(); - } - }); + if (isWebpack5) { + expect(stdout).toContain("Done build0\nDone build1\nDone build2\nDone build3"); + } else { + expect(stdout).toBeTruthy(); + } + }); - it("should work with provided configuration", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("should work with provided configuration", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); - if (isWebpack5) { - expect(stdout).toContain("Done build0\nDone build1\nDone build2\nDone build3"); - } else { - expect(stdout).toBeTruthy(); - } - }); + if (isWebpack5) { + expect(stdout).toContain("Done build0\nDone build1\nDone build2\nDone build3"); + } else { + expect(stdout).toBeTruthy(); + } + }); }); diff --git a/test/build/config/top-multi-compilers-options/webpack.config.js b/test/build/config/top-multi-compilers-options/webpack.config.js index 42189f57083..75d72f4d210 100644 --- a/test/build/config/top-multi-compilers-options/webpack.config.js +++ b/test/build/config/top-multi-compilers-options/webpack.config.js @@ -1,42 +1,42 @@ class SimpleProgressWebpackPlugin { - constructor(options) { - this.options = options; - } + constructor(options) { + this.options = options; + } - apply(compiler) { - compiler.hooks.done.tap("test", () => { - console.log("Done", this.options.name); - }); - } + apply(compiler) { + compiler.hooks.done.tap("test", () => { + console.log("Done", this.options.name); + }); + } } const configs = []; for (let i = 0; i < 3; i++) { - configs.push({ - mode: "development", + configs.push({ + mode: "development", + name: `build${i}`, + entry: "./index.js", + plugins: [ + new SimpleProgressWebpackPlugin({ name: `build${i}`, - entry: "./index.js", - plugins: [ - new SimpleProgressWebpackPlugin({ - name: `build${i}`, - }), - ], - }); + }), + ], + }); } configs.push(async () => { - return { - mode: "development", + return { + mode: "development", + name: `build${3}`, + entry: "./index.js", + plugins: [ + new SimpleProgressWebpackPlugin({ name: `build${3}`, - entry: "./index.js", - plugins: [ - new SimpleProgressWebpackPlugin({ - name: `build${3}`, - format: "simple", - }), - ], - }; + format: "simple", + }), + ], + }; }); module.exports = configs; diff --git a/test/build/config/type/array-function-with-argv/function-with-argv.test.js b/test/build/config/type/array-function-with-argv/function-with-argv.test.js index 51827b912a6..db5a6301520 100644 --- a/test/build/config/type/array-function-with-argv/function-with-argv.test.js +++ b/test/build/config/type/array-function-with-argv/function-with-argv.test.js @@ -4,13 +4,13 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("array of function with args", () => { - it("is able to understand a configuration file as a function", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "development"]); + it("is able to understand a configuration file as a function", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "development"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./dist/a-dev.js"))); - expect(existsSync(resolve(__dirname, "./dist/b-dev.js"))); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./dist/a-dev.js"))); + expect(existsSync(resolve(__dirname, "./dist/b-dev.js"))); + }); }); diff --git a/test/build/config/type/array-function-with-argv/webpack.config.js b/test/build/config/type/array-function-with-argv/webpack.config.js index 6756d1b368e..fb3e2a65c0c 100644 --- a/test/build/config/type/array-function-with-argv/webpack.config.js +++ b/test/build/config/type/array-function-with-argv/webpack.config.js @@ -1,22 +1,22 @@ module.exports = [ - (env, argv) => { - const { mode } = argv; - return { - entry: "./a.js", - name: "first", - output: { - filename: mode === "production" ? "a-prod.js" : "a-dev.js", - }, - }; - }, - (env, argv) => { - const { mode } = argv; - return { - entry: "./b.js", - name: "second", - output: { - filename: mode === "production" ? "b-prod.js" : "b-dev.js", - }, - }; - }, + (env, argv) => { + const { mode } = argv; + return { + entry: "./a.js", + name: "first", + output: { + filename: mode === "production" ? "a-prod.js" : "a-dev.js", + }, + }; + }, + (env, argv) => { + const { mode } = argv; + return { + entry: "./b.js", + name: "second", + output: { + filename: mode === "production" ? "b-prod.js" : "b-dev.js", + }, + }; + }, ]; diff --git a/test/build/config/type/array-function-with-env/array-function-with-env.test.js b/test/build/config/type/array-function-with-env/array-function-with-env.test.js index 16274153435..d4d92e70ab0 100644 --- a/test/build/config/type/array-function-with-env/array-function-with-env.test.js +++ b/test/build/config/type/array-function-with-env/array-function-with-env.test.js @@ -4,13 +4,13 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("array of functions with env", () => { - it("is able to understand a configuration file as a function", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "development"]); + it("is able to understand a configuration file as a function", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "development"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./dist/a-dev.js"))); - expect(existsSync(resolve(__dirname, "./dist/b-dev.js"))); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./dist/a-dev.js"))); + expect(existsSync(resolve(__dirname, "./dist/b-dev.js"))); + }); }); diff --git a/test/build/config/type/array-function-with-env/webpack.config.js b/test/build/config/type/array-function-with-env/webpack.config.js index 6756d1b368e..fb3e2a65c0c 100644 --- a/test/build/config/type/array-function-with-env/webpack.config.js +++ b/test/build/config/type/array-function-with-env/webpack.config.js @@ -1,22 +1,22 @@ module.exports = [ - (env, argv) => { - const { mode } = argv; - return { - entry: "./a.js", - name: "first", - output: { - filename: mode === "production" ? "a-prod.js" : "a-dev.js", - }, - }; - }, - (env, argv) => { - const { mode } = argv; - return { - entry: "./b.js", - name: "second", - output: { - filename: mode === "production" ? "b-prod.js" : "b-dev.js", - }, - }; - }, + (env, argv) => { + const { mode } = argv; + return { + entry: "./a.js", + name: "first", + output: { + filename: mode === "production" ? "a-prod.js" : "a-dev.js", + }, + }; + }, + (env, argv) => { + const { mode } = argv; + return { + entry: "./b.js", + name: "second", + output: { + filename: mode === "production" ? "b-prod.js" : "b-dev.js", + }, + }; + }, ]; diff --git a/test/build/config/type/array-functions/array-functions.test.js b/test/build/config/type/array-functions/array-functions.test.js index 23fa310800e..f7b6e1fb06d 100644 --- a/test/build/config/type/array-functions/array-functions.test.js +++ b/test/build/config/type/array-functions/array-functions.test.js @@ -4,16 +4,16 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("array of functions", () => { - it("is able to understand a configuration file as a function", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("is able to understand a configuration file as a function", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./binary/a-functor.js"))).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./binary/b-functor.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./binary/a-functor.js"))).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./binary/b-functor.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/type/array-functions/webpack.config.js b/test/build/config/type/array-functions/webpack.config.js index 81aaa17333c..6de4ce1c952 100644 --- a/test/build/config/type/array-functions/webpack.config.js +++ b/test/build/config/type/array-functions/webpack.config.js @@ -1,22 +1,22 @@ module.exports = [ - () => { - return { - entry: "./a", - name: "first", - output: { - path: __dirname + "/binary", - filename: "a-functor.js", - }, - }; - }, - () => { - return { - entry: "./b", - name: "second", - output: { - path: __dirname + "/binary", - filename: "b-functor.js", - }, - }; - }, + () => { + return { + entry: "./a", + name: "first", + output: { + path: __dirname + "/binary", + filename: "a-functor.js", + }, + }; + }, + () => { + return { + entry: "./b", + name: "second", + output: { + path: __dirname + "/binary", + filename: "b-functor.js", + }, + }; + }, ]; diff --git a/test/build/config/type/array-promises/array-promises.test.js b/test/build/config/type/array-promises/array-promises.test.js index 40a7824e913..dea2bb347d6 100644 --- a/test/build/config/type/array-promises/array-promises.test.js +++ b/test/build/config/type/array-promises/array-promises.test.js @@ -4,13 +4,13 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("array of promises", () => { - it("is able to understand a configuration file as a promise", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); + it("is able to understand a configuration file as a promise", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./binary/a-promise.js"))).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./binary/b-promise.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./binary/a-promise.js"))).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./binary/b-promise.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/type/array-promises/webpack.config.js b/test/build/config/type/array-promises/webpack.config.js index 483521b0405..99bbf87b153 100644 --- a/test/build/config/type/array-promises/webpack.config.js +++ b/test/build/config/type/array-promises/webpack.config.js @@ -1,26 +1,26 @@ module.exports = [ - new Promise((resolve) => { - setTimeout(() => { - resolve({ - entry: "./a", - name: "first", - output: { - path: __dirname + "/binary", - filename: "a-promise.js", - }, - }); - }, 0); - }), - new Promise((resolve) => { - setTimeout(() => { - resolve({ - entry: "./b", - name: "second", - output: { - path: __dirname + "/binary", - filename: "b-promise.js", - }, - }); - }, 0); - }), + new Promise((resolve) => { + setTimeout(() => { + resolve({ + entry: "./a", + name: "first", + output: { + path: __dirname + "/binary", + filename: "a-promise.js", + }, + }); + }, 0); + }), + new Promise((resolve) => { + setTimeout(() => { + resolve({ + entry: "./b", + name: "second", + output: { + path: __dirname + "/binary", + filename: "b-promise.js", + }, + }); + }, 0); + }), ]; diff --git a/test/build/config/type/array/array.test.js b/test/build/config/type/array/array.test.js index 60e82208882..946d554c7ae 100644 --- a/test/build/config/type/array/array.test.js +++ b/test/build/config/type/array/array.test.js @@ -4,27 +4,27 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("array config", () => { - it("is able to understand a configuration file in array format", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("is able to understand a configuration file in array format", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./dist/dist-commonjs.js"))).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./dist/dist-amd.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./dist/dist-commonjs.js"))).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./dist/dist-amd.js"))).toBeTruthy(); + }); - it("respect cli args with config as an array", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--stats", "none"]); + it("respect cli args with config as an array", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--stats", "none"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - // should not print anything because of stats: none - expect(stdout).toBeFalsy(); - expect(existsSync(resolve(__dirname, "./dist/dist-commonjs.js"))).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./dist/dist-amd.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + // should not print anything because of stats: none + expect(stdout).toBeFalsy(); + expect(existsSync(resolve(__dirname, "./dist/dist-commonjs.js"))).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./dist/dist-amd.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/type/array/webpack.config.js b/test/build/config/type/array/webpack.config.js index 69bb0919988..7d26cbd7da6 100644 --- a/test/build/config/type/array/webpack.config.js +++ b/test/build/config/type/array/webpack.config.js @@ -1,24 +1,24 @@ module.exports = [ - { - output: { - filename: "./dist-amd.js", - libraryTarget: "amd", - }, - name: "amd", - entry: "./a.js", - mode: "development", - stats: "verbose", - devtool: "eval-cheap-module-source-map", + { + output: { + filename: "./dist-amd.js", + libraryTarget: "amd", }, - { - output: { - filename: "./dist-commonjs.js", - libraryTarget: "commonjs", - }, - name: "commonjs", - entry: "./a.js", - mode: "development", - stats: "detailed", - target: "node", + name: "amd", + entry: "./a.js", + mode: "development", + stats: "verbose", + devtool: "eval-cheap-module-source-map", + }, + { + output: { + filename: "./dist-commonjs.js", + libraryTarget: "commonjs", }, + name: "commonjs", + entry: "./a.js", + mode: "development", + stats: "detailed", + target: "node", + }, ]; diff --git a/test/build/config/type/function-array/function-array.test.js b/test/build/config/type/function-array/function-array.test.js index 92df4e46ed0..339559da7d6 100644 --- a/test/build/config/type/function-array/function-array.test.js +++ b/test/build/config/type/function-array/function-array.test.js @@ -4,16 +4,16 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("function array", () => { - it("is able to understand a configuration file as a function", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("is able to understand a configuration file as a function", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./binary/a-functor.js"))).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./binary/b-functor.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./binary/a-functor.js"))).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./binary/b-functor.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/type/function-array/webpack.config.js b/test/build/config/type/function-array/webpack.config.js index eae05c3c191..9e7b613c089 100644 --- a/test/build/config/type/function-array/webpack.config.js +++ b/test/build/config/type/function-array/webpack.config.js @@ -1,18 +1,18 @@ module.exports = () => [ - { - entry: "./a", - name: "first", - output: { - path: __dirname + "/binary", - filename: "a-functor.js", - }, + { + entry: "./a", + name: "first", + output: { + path: __dirname + "/binary", + filename: "a-functor.js", }, - { - entry: "./b", - name: "second", - output: { - path: __dirname + "/binary", - filename: "b-functor.js", - }, + }, + { + entry: "./b", + name: "second", + output: { + path: __dirname + "/binary", + filename: "b-functor.js", }, + }, ]; diff --git a/test/build/config/type/function-async/function-async.test.js b/test/build/config/type/function-async/function-async.test.js index 29e27a7e789..915d3d0b1f1 100644 --- a/test/build/config/type/function-async/function-async.test.js +++ b/test/build/config/type/function-async/function-async.test.js @@ -4,15 +4,15 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("function async", () => { - it("is able to understand a configuration file as a function", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("is able to understand a configuration file as a function", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./binary/functor.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./binary/functor.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/type/function-async/webpack.config.js b/test/build/config/type/function-async/webpack.config.js index 41f47ea6162..e9ea73acf01 100644 --- a/test/build/config/type/function-async/webpack.config.js +++ b/test/build/config/type/function-async/webpack.config.js @@ -1,9 +1,9 @@ module.exports = async () => { - return { - entry: "./a", - output: { - path: __dirname + "/binary", - filename: "functor.js", - }, - }; + return { + entry: "./a", + output: { + path: __dirname + "/binary", + filename: "functor.js", + }, + }; }; diff --git a/test/build/config/type/function-promise/function-promise.test.js b/test/build/config/type/function-promise/function-promise.test.js index 236c1edd1cc..ce43136414e 100644 --- a/test/build/config/type/function-promise/function-promise.test.js +++ b/test/build/config/type/function-promise/function-promise.test.js @@ -4,15 +4,15 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("function promise", () => { - it("is able to understand a configuration file as a function", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("is able to understand a configuration file as a function", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./binary/functor.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./binary/functor.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/type/function-promise/webpack.config.js b/test/build/config/type/function-promise/webpack.config.js index 90723f2035c..12311c7de65 100644 --- a/test/build/config/type/function-promise/webpack.config.js +++ b/test/build/config/type/function-promise/webpack.config.js @@ -1,13 +1,13 @@ module.exports = () => { - return new Promise((resolve) => { - setTimeout(() => { - resolve({ - entry: "./a", - output: { - path: __dirname + "/binary", - filename: "functor.js", - }, - }); - }); - }, 0); + return new Promise((resolve) => { + setTimeout(() => { + resolve({ + entry: "./a", + output: { + path: __dirname + "/binary", + filename: "functor.js", + }, + }); + }); + }, 0); }; diff --git a/test/build/config/type/function-with-argv/function-with-argv.test.js b/test/build/config/type/function-with-argv/function-with-argv.test.js index f9857bd5f65..8b03f65531a 100644 --- a/test/build/config/type/function-with-argv/function-with-argv.test.js +++ b/test/build/config/type/function-with-argv/function-with-argv.test.js @@ -4,15 +4,15 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("function configuration", () => { - it("is able to understand a configuration file as a function", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "development"]); + it("is able to understand a configuration file as a function", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "development"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(stdout).toContain("WEBPACK_BUNDLE: true"); - expect(stdout).toContain("WEBPACK_BUILD: true"); - expect(stdout).toContain("mode: 'development'"); - expect(existsSync(resolve(__dirname, "./dist/dev.js"))); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(stdout).toContain("WEBPACK_BUNDLE: true"); + expect(stdout).toContain("WEBPACK_BUILD: true"); + expect(stdout).toContain("mode: 'development'"); + expect(existsSync(resolve(__dirname, "./dist/dev.js"))); + }); }); diff --git a/test/build/config/type/function-with-argv/webpack.config.js b/test/build/config/type/function-with-argv/webpack.config.js index 15b337ac978..1785e5e0efa 100644 --- a/test/build/config/type/function-with-argv/webpack.config.js +++ b/test/build/config/type/function-with-argv/webpack.config.js @@ -1,10 +1,10 @@ module.exports = (env, argv) => { - console.log({ argv }); - const { mode } = argv; - return { - entry: "./a.js", - output: { - filename: mode === "production" ? "prod.js" : "dev.js", - }, - }; + console.log({ argv }); + const { mode } = argv; + return { + entry: "./a.js", + output: { + filename: mode === "production" ? "prod.js" : "dev.js", + }, + }; }; diff --git a/test/build/config/type/function-with-env/a.js b/test/build/config/type/function-with-env/a.js index 95512b73637..645a701e5fe 100644 --- a/test/build/config/type/function-with-env/a.js +++ b/test/build/config/type/function-with-env/a.js @@ -1,5 +1,5 @@ console.log("chuntaro"); // eslint-disable-next-line no-undef if (envMessage) { - console.log("env message present"); + console.log("env message present"); } diff --git a/test/build/config/type/function-with-env/function-with-env.test.js b/test/build/config/type/function-with-env/function-with-env.test.js index 4ba8da5d904..4e48c406639 100644 --- a/test/build/config/type/function-with-env/function-with-env.test.js +++ b/test/build/config/type/function-with-env/function-with-env.test.js @@ -4,193 +4,193 @@ const { resolve } = require("path"); const { run, readFile } = require("../../../../utils/test-utils"); describe("function configuration", () => { - it("should throw when env is not supplied", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--env"]); - - expect(exitCode).toBe(2); - expect(stderr).toContain("Error: Option '--env ' argument missing"); - expect(stdout).toBeFalsy(); - }); - - it("is able to understand a configuration file as a function", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--env", "isProd"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - // Should generate the appropriate files - expect(existsSync(resolve(__dirname, "./dist/prod.js"))).toBeTruthy(); - }); - - it("is able to understand a configuration file as a function", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--env", "isDev"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - // Should generate the appropriate files - expect(existsSync(resolve(__dirname, "./dist/dev.js"))).toBeTruthy(); - }); - - it("Supports passing string in env", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--env", - "environment=production", - "--env", - "app.title=Luffy", - "-c", - "webpack.env.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - // Should generate the appropriate files - expect(existsSync(resolve(__dirname, "./dist/Luffy.js"))).toBeTruthy(); - }); - - it("Supports long nested values in env", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--env", - "file.name.is.this=Atsumu", - "--env", - "environment=production", - "-c", - "webpack.env.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - // Should generate the appropriate files - expect(existsSync(resolve(__dirname, "./dist/Atsumu.js"))).toBeTruthy(); - }); - - it("Supports multiple equal in a string", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--env", - "file=name=is=Eren", - "--env", - "environment=multipleq", - "-c", - "webpack.env.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - // Should generate the appropriate files - expect(existsSync(resolve(__dirname, "./dist/name=is=Eren.js"))).toBeTruthy(); - }); - - it("Supports dot at the end", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--env", - "name.=Hisoka", - "--env", - "environment=dot", - "-c", - "webpack.env.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - // Should generate the appropriate files - expect(existsSync(resolve(__dirname, "./dist/Hisoka.js"))).toBeTruthy(); - }); - - it("Supports dot at the end", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--env", - "name.", - "--env", - "environment=dot", - "-c", - "webpack.env.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - // Should generate the appropriate files - expect(existsSync(resolve(__dirname, "./dist/true.js"))).toBeTruthy(); - }); - - it("Supports empty string", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--env", `foo=''`]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - // Should generate the appropriate files - expect(existsSync(resolve(__dirname, "./dist/empty-string.js"))).toBeTruthy(); - }); - - it('Supports empty string with multiple "="', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--env", `foo=bar=''`]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - // Should generate the appropriate files - expect(existsSync(resolve(__dirname, "./dist/new-empty-string.js"))).toBeTruthy(); - }); - - it('Supports env variable with "=" at the end', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--env", `foo=`]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - // Should generate the appropriate files - expect(existsSync(resolve(__dirname, "./dist/equal-at-the-end.js"))).toBeTruthy(); - }); - - it("is able to understand multiple env flags", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--env", - "isDev", - "--env", - "verboseStats", - "--env", - "envMessage", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - // check that the verbose env is respected - expect(stdout).toContain("LOG from webpack"); - - let data; - - try { - data = await readFile(resolve(__dirname, "./dist/dev.js"), "utf-8"); - } catch (error) { - expect(error).toBe(null); - } - - // check if the values from DefinePlugin make it to the compiled code - expect(data).toContain("env message present"); - }); - - it("is able to apply last flag with same name", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--env", - "name.=foo", - "--env", - "name.=baz", - "--env", - "environment=dot", - "-c", - "webpack.env.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - // Should generate the appropriate files - expect(existsSync(resolve(__dirname, "./dist/baz.js"))).toBeTruthy(); - }); + it("should throw when env is not supplied", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--env"]); + + expect(exitCode).toBe(2); + expect(stderr).toContain("Error: Option '--env ' argument missing"); + expect(stdout).toBeFalsy(); + }); + + it("is able to understand a configuration file as a function", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--env", "isProd"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + // Should generate the appropriate files + expect(existsSync(resolve(__dirname, "./dist/prod.js"))).toBeTruthy(); + }); + + it("is able to understand a configuration file as a function", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--env", "isDev"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + // Should generate the appropriate files + expect(existsSync(resolve(__dirname, "./dist/dev.js"))).toBeTruthy(); + }); + + it("Supports passing string in env", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--env", + "environment=production", + "--env", + "app.title=Luffy", + "-c", + "webpack.env.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + // Should generate the appropriate files + expect(existsSync(resolve(__dirname, "./dist/Luffy.js"))).toBeTruthy(); + }); + + it("Supports long nested values in env", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--env", + "file.name.is.this=Atsumu", + "--env", + "environment=production", + "-c", + "webpack.env.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + // Should generate the appropriate files + expect(existsSync(resolve(__dirname, "./dist/Atsumu.js"))).toBeTruthy(); + }); + + it("Supports multiple equal in a string", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--env", + "file=name=is=Eren", + "--env", + "environment=multipleq", + "-c", + "webpack.env.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + // Should generate the appropriate files + expect(existsSync(resolve(__dirname, "./dist/name=is=Eren.js"))).toBeTruthy(); + }); + + it("Supports dot at the end", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--env", + "name.=Hisoka", + "--env", + "environment=dot", + "-c", + "webpack.env.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + // Should generate the appropriate files + expect(existsSync(resolve(__dirname, "./dist/Hisoka.js"))).toBeTruthy(); + }); + + it("Supports dot at the end", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--env", + "name.", + "--env", + "environment=dot", + "-c", + "webpack.env.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + // Should generate the appropriate files + expect(existsSync(resolve(__dirname, "./dist/true.js"))).toBeTruthy(); + }); + + it("Supports empty string", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--env", `foo=''`]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + // Should generate the appropriate files + expect(existsSync(resolve(__dirname, "./dist/empty-string.js"))).toBeTruthy(); + }); + + it('Supports empty string with multiple "="', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--env", `foo=bar=''`]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + // Should generate the appropriate files + expect(existsSync(resolve(__dirname, "./dist/new-empty-string.js"))).toBeTruthy(); + }); + + it('Supports env variable with "=" at the end', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--env", `foo=`]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + // Should generate the appropriate files + expect(existsSync(resolve(__dirname, "./dist/equal-at-the-end.js"))).toBeTruthy(); + }); + + it("is able to understand multiple env flags", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--env", + "isDev", + "--env", + "verboseStats", + "--env", + "envMessage", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + // check that the verbose env is respected + expect(stdout).toContain("LOG from webpack"); + + let data; + + try { + data = await readFile(resolve(__dirname, "./dist/dev.js"), "utf-8"); + } catch (error) { + expect(error).toBe(null); + } + + // check if the values from DefinePlugin make it to the compiled code + expect(data).toContain("env message present"); + }); + + it("is able to apply last flag with same name", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--env", + "name.=foo", + "--env", + "name.=baz", + "--env", + "environment=dot", + "-c", + "webpack.env.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + // Should generate the appropriate files + expect(existsSync(resolve(__dirname, "./dist/baz.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/type/function-with-env/webpack.config.js b/test/build/config/type/function-with-env/webpack.config.js index ecb9daebd6e..edd85d25427 100644 --- a/test/build/config/type/function-with-env/webpack.config.js +++ b/test/build/config/type/function-with-env/webpack.config.js @@ -1,49 +1,49 @@ const { DefinePlugin } = require("webpack"); module.exports = (env) => { - if (env.isProd) { - return { - entry: "./a.js", - output: { - filename: "prod.js", - }, - }; - } - if (env.foo === `''`) { - return { - entry: "./a.js", - output: { - filename: "empty-string.js", - }, - }; - } - if (env.foo === `bar=''`) { - return { - entry: "./a.js", - output: { - filename: "new-empty-string.js", - }, - }; - } - if (env["foo="]) { - return { - entry: "./a.js", - output: { - filename: "equal-at-the-end.js", - }, - }; - } + if (env.isProd) { return { - entry: "./a.js", - mode: "development", - stats: env.verboseStats ? "verbose" : "normal", - plugins: [ - new DefinePlugin({ - envMessage: env.envMessage ? JSON.stringify("env message present") : false, - }), - ], - output: { - filename: "dev.js", - }, + entry: "./a.js", + output: { + filename: "prod.js", + }, }; + } + if (env.foo === `''`) { + return { + entry: "./a.js", + output: { + filename: "empty-string.js", + }, + }; + } + if (env.foo === `bar=''`) { + return { + entry: "./a.js", + output: { + filename: "new-empty-string.js", + }, + }; + } + if (env["foo="]) { + return { + entry: "./a.js", + output: { + filename: "equal-at-the-end.js", + }, + }; + } + return { + entry: "./a.js", + mode: "development", + stats: env.verboseStats ? "verbose" : "normal", + plugins: [ + new DefinePlugin({ + envMessage: env.envMessage ? JSON.stringify("env message present") : false, + }), + ], + output: { + filename: "dev.js", + }, + }; }; diff --git a/test/build/config/type/function-with-env/webpack.env.config.js b/test/build/config/type/function-with-env/webpack.env.config.js index 3e789b2406e..531aa2a6352 100644 --- a/test/build/config/type/function-with-env/webpack.env.config.js +++ b/test/build/config/type/function-with-env/webpack.env.config.js @@ -1,32 +1,32 @@ module.exports = (env) => { - const { environment, app, file } = env; - const customName = file && file.name && file.name.is && file.name.is.this; - const appTitle = app && app.title; - if (environment === "production") { - return { - entry: "./a.js", - output: { - filename: `${customName ? customName : appTitle}.js`, - }, - }; - } - if (environment === "multipleq") { - const { file } = env; - return { - entry: "./a.js", - output: { - filename: `${file}.js`, - }, - }; - } - if (environment === "dot") { - const file = env["name."]; - return { - entry: "./a.js", - output: { - filename: `${file}.js`, - }, - }; - } - return {}; + const { environment, app, file } = env; + const customName = file && file.name && file.name.is && file.name.is.this; + const appTitle = app && app.title; + if (environment === "production") { + return { + entry: "./a.js", + output: { + filename: `${customName ? customName : appTitle}.js`, + }, + }; + } + if (environment === "multipleq") { + const { file } = env; + return { + entry: "./a.js", + output: { + filename: `${file}.js`, + }, + }; + } + if (environment === "dot") { + const file = env["name."]; + return { + entry: "./a.js", + output: { + filename: `${file}.js`, + }, + }; + } + return {}; }; diff --git a/test/build/config/type/function/function.test.js b/test/build/config/type/function/function.test.js index e507bddc6fb..b24bc427d60 100644 --- a/test/build/config/type/function/function.test.js +++ b/test/build/config/type/function/function.test.js @@ -4,15 +4,15 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("function", () => { - it("is able to understand a configuration file as a function", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.config.js"), - ]); + it("is able to understand a configuration file as a function", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./binary/functor.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./binary/functor.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/type/function/webpack.config.js b/test/build/config/type/function/webpack.config.js index b5bfe25cc36..0ce625953fb 100644 --- a/test/build/config/type/function/webpack.config.js +++ b/test/build/config/type/function/webpack.config.js @@ -1,9 +1,9 @@ module.exports = () => { - return { - entry: "./a", - output: { - path: __dirname + "/binary", - filename: "functor.js", - }, - }; + return { + entry: "./a", + output: { + path: __dirname + "/binary", + filename: "functor.js", + }, + }; }; diff --git a/test/build/config/type/promise-array/promise-array.test.js b/test/build/config/type/promise-array/promise-array.test.js index 930be8997d4..4e8aeaccd19 100644 --- a/test/build/config/type/promise-array/promise-array.test.js +++ b/test/build/config/type/promise-array/promise-array.test.js @@ -4,13 +4,13 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("promise array", () => { - it("is able to understand a configuration file as a promise", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); + it("is able to understand a configuration file as a promise", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); - expect(exitCode).toBe(0); - expect(stdout).toBeTruthy(); - expect(stderr).toBeFalsy(); - expect(existsSync(resolve(__dirname, "./binary/a-promise.js"))).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./binary/a-promise.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stdout).toBeTruthy(); + expect(stderr).toBeFalsy(); + expect(existsSync(resolve(__dirname, "./binary/a-promise.js"))).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./binary/a-promise.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/type/promise-array/webpack.config.js b/test/build/config/type/promise-array/webpack.config.js index 36bcba559aa..0a39b5917a7 100644 --- a/test/build/config/type/promise-array/webpack.config.js +++ b/test/build/config/type/promise-array/webpack.config.js @@ -1,20 +1,20 @@ module.exports = new Promise((resolve) => { - setTimeout(() => { - resolve([ - { - entry: "./a", - output: { - path: __dirname + "/binary", - filename: "a-promise.js", - }, - }, - { - entry: "./b", - output: { - path: __dirname + "/binary", - filename: "b-promise.js", - }, - }, - ]); - }, 0); + setTimeout(() => { + resolve([ + { + entry: "./a", + output: { + path: __dirname + "/binary", + filename: "a-promise.js", + }, + }, + { + entry: "./b", + output: { + path: __dirname + "/binary", + filename: "b-promise.js", + }, + }, + ]); + }, 0); }); diff --git a/test/build/config/type/promise-function/promise-function.test.js b/test/build/config/type/promise-function/promise-function.test.js index fb641cde158..f5c20efe952 100644 --- a/test/build/config/type/promise-function/promise-function.test.js +++ b/test/build/config/type/promise-function/promise-function.test.js @@ -4,13 +4,13 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("promise function", () => { - it("is able to understand a configuration file as a promise", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); + it("is able to understand a configuration file as a promise", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./binary/promise.js"))).toBeTruthy(); - }); + expect(existsSync(resolve(__dirname, "./binary/promise.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/type/promise-function/webpack.config.js b/test/build/config/type/promise-function/webpack.config.js index 88a78b1548f..42fad11f10f 100644 --- a/test/build/config/type/promise-function/webpack.config.js +++ b/test/build/config/type/promise-function/webpack.config.js @@ -1,11 +1,11 @@ module.exports = new Promise((resolve) => { - setTimeout(() => { - resolve(() => ({ - entry: "./a", - output: { - path: __dirname + "/binary", - filename: "promise.js", - }, - })); - }, 0); + setTimeout(() => { + resolve(() => ({ + entry: "./a", + output: { + path: __dirname + "/binary", + filename: "promise.js", + }, + })); + }, 0); }); diff --git a/test/build/config/type/promise/promise.test.js b/test/build/config/type/promise/promise.test.js index 7aa0d25cbbc..cc4528901d8 100644 --- a/test/build/config/type/promise/promise.test.js +++ b/test/build/config/type/promise/promise.test.js @@ -4,12 +4,12 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("promise", () => { - it("is able to understand a configuration file as a promise", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); + it("is able to understand a configuration file as a promise", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./binary/promise.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./binary/promise.js"))).toBeTruthy(); + }); }); diff --git a/test/build/config/type/promise/webpack.config.js b/test/build/config/type/promise/webpack.config.js index 3e56fb16bf9..b5806feab53 100644 --- a/test/build/config/type/promise/webpack.config.js +++ b/test/build/config/type/promise/webpack.config.js @@ -1,12 +1,12 @@ module.exports = () => - new Promise((resolve) => { - setTimeout(() => { - resolve({ - entry: "./a", - output: { - path: __dirname + "/binary", - filename: "promise.js", - }, - }); - }, 0); - }); + new Promise((resolve) => { + setTimeout(() => { + resolve({ + entry: "./a", + output: { + path: __dirname + "/binary", + filename: "promise.js", + }, + }); + }, 0); + }); diff --git a/test/build/core-flags/core-flags.test.js b/test/build/core-flags/core-flags.test.js index 4e71ba4bd0d..411152b6ea9 100644 --- a/test/build/core-flags/core-flags.test.js +++ b/test/build/core-flags/core-flags.test.js @@ -4,271 +4,271 @@ const { resolve } = require("path"); const { run, isWindows } = require("../../utils/test-utils"); describe("core flags", () => { - describe("boolean type flags", () => { - it("should set bail to true", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--bail"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("bail: true"); - }); - - it("should set bail to false", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--no-bail"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("bail: false"); - }); + describe("boolean type flags", () => { + it("should set bail to true", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--bail"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("bail: true"); }); - describe("RegExp type flags", () => { - it("should ignore the warning emitted", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--ignore-warnings", - /Generated Warning/, - "--config", - "warning.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).not.toContain("Module Warning (from ./my-warning-loader.js):"); - expect(stdout).not.toContain("Generated Warning"); - }); - - it("should reset options.ignoreWarnings", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--ignore-warnings", - /Generated Warning/, - "--ignore-warnings-reset", - "--config", - "warning.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("Module Warning (from ./my-warning-loader.js):"); - expect(stdout).toContain("Generated Warning"); - }); - - it("should throw error for an invalid value", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--ignore-warnings", "abc"]); - - expect(exitCode).toBe(2); - expect(stderr).toContain(`Invalid value 'abc' for the '--ignore-warnings' option`); - expect(stderr).toContain(`Expected: 'regular expression (example: /ab?c*/)'`); - expect(stdout).toBeFalsy(); - }); + it("should set bail to false", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--no-bail"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("bail: false"); + }); + }); + + describe("RegExp type flags", () => { + it("should ignore the warning emitted", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--ignore-warnings", + /Generated Warning/, + "--config", + "warning.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).not.toContain("Module Warning (from ./my-warning-loader.js):"); + expect(stdout).not.toContain("Generated Warning"); }); - describe("reset type flags", () => { - it("should reset entry correctly", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--entry-reset", - "--entry", - "./src/entry.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("src/entry.js"); - expect(stdout).not.toContain("src/main.js"); - }); - - it("should throw error if entry is an empty array", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--entry-reset"]); - - expect(exitCode).toBe(2); - expect(stderr).toContain("Invalid configuration object"); - expect(stdout).toBeFalsy(); - }); + it("should reset options.ignoreWarnings", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--ignore-warnings", + /Generated Warning/, + "--ignore-warnings-reset", + "--config", + "warning.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("Module Warning (from ./my-warning-loader.js):"); + expect(stdout).toContain("Generated Warning"); }); - describe("number type flags", () => { - it("should set parallelism option correctly", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--parallelism", 10]); + it("should throw error for an invalid value", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--ignore-warnings", "abc"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("parallelism: 10"); - }); + expect(exitCode).toBe(2); + expect(stderr).toContain(`Invalid value 'abc' for the '--ignore-warnings' option`); + expect(stderr).toContain(`Expected: 'regular expression (example: /ab?c*/)'`); + expect(stdout).toBeFalsy(); + }); + }); + + describe("reset type flags", () => { + it("should reset entry correctly", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--entry-reset", + "--entry", + "./src/entry.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("src/entry.js"); + expect(stdout).not.toContain("src/main.js"); + }); - it("should set parallelism option correctly using `=`", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--parallelism=10"]); + it("should throw error if entry is an empty array", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--entry-reset"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("parallelism: 10"); - }); + expect(exitCode).toBe(2); + expect(stderr).toContain("Invalid configuration object"); + expect(stdout).toBeFalsy(); }); + }); + + describe("number type flags", () => { + it("should set parallelism option correctly", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--parallelism", 10]); - describe("enum type flags", () => { - it("should not allow `true` for amd", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--amd"]); - - expect(exitCode).toBe(2); - expect(stderr).toContain(`Invalid value 'true' for the '--amd' option`); - expect(stderr).toContain(`Expected: 'false'`); - expect(stdout).toBeFalsy(); - }); - - it("should allow `false` for amd", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--no-amd"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("amd: false"); - }); - - it("should correctly set `infrastructureLogging.level`", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--infrastructure-logging-level", - "verbose", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toContain(`Compiler 'compiler' starting...`); - expect(stdout).toContain("level: 'verbose'"); - }); - - it("should throw error for invalid `infrastructureLogging.level`", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--infrastructure-logging-level", - "test", - ]); - - expect(exitCode).toBe(2); - expect(stderr).toContain( - `Invalid value 'test' for the '--infrastructure-logging-level' option`, - ); - expect(stderr).toContain(`Expected: 'none | error | warn | info | log | verbose'`); - expect(stdout).toBeFalsy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("parallelism: 10"); }); - describe("path type flags", () => { - it("should set context option correctly", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--context", "./"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - - if (isWindows) { - const windowsPath = resolve(__dirname, "./").replace(/\\/g, "\\\\"); - expect(stdout).toContain(`'${windowsPath}'`); - } else { - expect(stdout).toContain(`'${resolve(__dirname, "./")}'`); - } - }); - - it("should throw module not found error for invalid context", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--context", - "/invalid-context-path", - ]); - - expect(exitCode).toBe(1); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`Module not found: Error: Can't resolve './src/main.js'`); - }); + it("should set parallelism option correctly using `=`", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--parallelism=10"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("parallelism: 10"); }); + }); - describe("string type flags", () => { - it("should set dependencies option correctly", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--dependencies", "lodash"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`dependencies: [ 'lodash' ]`); - }); - - it("should allow to set multiple dependencies", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--dependencies", - "lodash", - "react", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`dependencies: [ 'lodash', 'react' ]`); - }); + describe("enum type flags", () => { + it("should not allow `true` for amd", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--amd"]); + + expect(exitCode).toBe(2); + expect(stderr).toContain(`Invalid value 'true' for the '--amd' option`); + expect(stderr).toContain(`Expected: 'false'`); + expect(stdout).toBeFalsy(); + }); + + it("should allow `false` for amd", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--no-amd"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("amd: false"); }); - describe("flags with multiple types", () => { - it("should allow string value for `infrastructureLogging.debug`", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--infrastructure-logging-debug", - "MyPlugin", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`debug: [ 'MyPlugin' ]`); - }); - - it("should allow RegExp value for `infrastructureLogging.debug`", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--infrastructure-logging-debug", - /MyPlugin/, - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`debug: [ /MyPlugin/ ],`); - }); - - it("should allow multiple values for `infrastructureLogging.debug`", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--infrastructure-logging-debug", - "MyPlugin", - /MyAnotherPlugin/, - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`debug: [ 'MyPlugin', /MyAnotherPlugin/ ]`); - }); - - it("should allow string value devtool option", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--devtool", "source-map"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`devtool: 'source-map'`); - }); - - it("should allow string value devtool option using alias", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-d", "source-map"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`devtool: 'source-map'`); - }); - - it("should allow string value devtool option using alias #1", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-dsource-map"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`devtool: 'source-map'`); - }); - - it("should allow --no-devtool", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--no-devtool"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`devtool: false`); - }); - - it("should log error for invalid devtool value", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--devtool", "invalid"]); - - expect(exitCode).toBe(2); - expect(stderr).toContain("Invalid configuration object"); - expect(stdout).toBeFalsy(); - }); + it("should correctly set `infrastructureLogging.level`", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--infrastructure-logging-level", + "verbose", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toContain(`Compiler 'compiler' starting...`); + expect(stdout).toContain("level: 'verbose'"); + }); + + it("should throw error for invalid `infrastructureLogging.level`", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--infrastructure-logging-level", + "test", + ]); + + expect(exitCode).toBe(2); + expect(stderr).toContain( + `Invalid value 'test' for the '--infrastructure-logging-level' option`, + ); + expect(stderr).toContain(`Expected: 'none | error | warn | info | log | verbose'`); + expect(stdout).toBeFalsy(); + }); + }); + + describe("path type flags", () => { + it("should set context option correctly", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--context", "./"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + + if (isWindows) { + const windowsPath = resolve(__dirname, "./").replace(/\\/g, "\\\\"); + expect(stdout).toContain(`'${windowsPath}'`); + } else { + expect(stdout).toContain(`'${resolve(__dirname, "./")}'`); + } + }); + + it("should throw module not found error for invalid context", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--context", + "/invalid-context-path", + ]); + + expect(exitCode).toBe(1); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`Module not found: Error: Can't resolve './src/main.js'`); + }); + }); + + describe("string type flags", () => { + it("should set dependencies option correctly", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--dependencies", "lodash"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`dependencies: [ 'lodash' ]`); + }); + + it("should allow to set multiple dependencies", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--dependencies", + "lodash", + "react", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`dependencies: [ 'lodash', 'react' ]`); + }); + }); + + describe("flags with multiple types", () => { + it("should allow string value for `infrastructureLogging.debug`", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--infrastructure-logging-debug", + "MyPlugin", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`debug: [ 'MyPlugin' ]`); + }); + + it("should allow RegExp value for `infrastructureLogging.debug`", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--infrastructure-logging-debug", + /MyPlugin/, + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`debug: [ /MyPlugin/ ],`); + }); + + it("should allow multiple values for `infrastructureLogging.debug`", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--infrastructure-logging-debug", + "MyPlugin", + /MyAnotherPlugin/, + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`debug: [ 'MyPlugin', /MyAnotherPlugin/ ]`); + }); + + it("should allow string value devtool option", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--devtool", "source-map"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`devtool: 'source-map'`); + }); + + it("should allow string value devtool option using alias", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-d", "source-map"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`devtool: 'source-map'`); + }); + + it("should allow string value devtool option using alias #1", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-dsource-map"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`devtool: 'source-map'`); + }); + + it("should allow --no-devtool", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--no-devtool"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`devtool: false`); + }); + + it("should log error for invalid devtool value", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--devtool", "invalid"]); + + expect(exitCode).toBe(2); + expect(stderr).toContain("Invalid configuration object"); + expect(stdout).toBeFalsy(); }); + }); }); diff --git a/test/build/core-flags/my-warning-loader.js b/test/build/core-flags/my-warning-loader.js index d72b4775718..c379a6731d0 100644 --- a/test/build/core-flags/my-warning-loader.js +++ b/test/build/core-flags/my-warning-loader.js @@ -1,5 +1,5 @@ module.exports = function loader(source) { - const { emitWarning } = this; - emitWarning("Generated Warning"); - return source; + const { emitWarning } = this; + emitWarning("Generated Warning"); + return source; }; diff --git a/test/build/core-flags/warning.config.js b/test/build/core-flags/warning.config.js index 8535fb996b6..56f01ef692e 100644 --- a/test/build/core-flags/warning.config.js +++ b/test/build/core-flags/warning.config.js @@ -1,24 +1,24 @@ const path = require("path"); module.exports = { - mode: "development", - entry: "./src/main.js", - module: { - rules: [ - { - test: /.(js|jsx)?$/, - loader: "my-warning-loader", - include: [path.resolve(__dirname, "src")], - exclude: [/node_modules/], - }, - ], - }, - resolveLoader: { - alias: { - "my-warning-loader": require.resolve("./my-warning-loader"), - }, - }, - performance: { - hints: "warning", + mode: "development", + entry: "./src/main.js", + module: { + rules: [ + { + test: /.(js|jsx)?$/, + loader: "my-warning-loader", + include: [path.resolve(__dirname, "src")], + exclude: [/node_modules/], + }, + ], + }, + resolveLoader: { + alias: { + "my-warning-loader": require.resolve("./my-warning-loader"), }, + }, + performance: { + hints: "warning", + }, }; diff --git a/test/build/core-flags/webpack.cache.config.js b/test/build/core-flags/webpack.cache.config.js index cfeed391a1e..982aee938ff 100644 --- a/test/build/core-flags/webpack.cache.config.js +++ b/test/build/core-flags/webpack.cache.config.js @@ -1,12 +1,12 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); module.exports = { - entry: "./src/main.js", - mode: "development", - cache: { - type: "filesystem", - name: "config-cache", - }, - name: "compiler-cache", - plugins: [new WebpackCLITestPlugin(["cache"])], + entry: "./src/main.js", + mode: "development", + cache: { + type: "filesystem", + name: "config-cache", + }, + name: "compiler-cache", + plugins: [new WebpackCLITestPlugin(["cache"])], }; diff --git a/test/build/core-flags/webpack.config.js b/test/build/core-flags/webpack.config.js index 124ca164206..a11796f1afb 100644 --- a/test/build/core-flags/webpack.config.js +++ b/test/build/core-flags/webpack.config.js @@ -1,8 +1,8 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); module.exports = { - entry: "./src/main.js", - mode: "development", - name: "compiler", - plugins: [new WebpackCLITestPlugin(["module", "entry", "resolve", "resolveLoader", "cache"])], + entry: "./src/main.js", + mode: "development", + name: "compiler", + plugins: [new WebpackCLITestPlugin(["module", "entry", "resolve", "resolveLoader", "cache"])], }; diff --git a/test/build/custom-webpack/custom-webpack.test.js b/test/build/custom-webpack/custom-webpack.test.js index 92c8bd922de..34aed49d46c 100644 --- a/test/build/custom-webpack/custom-webpack.test.js +++ b/test/build/custom-webpack/custom-webpack.test.js @@ -4,25 +4,25 @@ const { resolve } = require("path"); const { run } = require("../../utils/test-utils"); describe("custom-webpack", () => { - it("should use custom-webpack.js", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [], { - env: { WEBPACK_PACKAGE: resolve(__dirname, "./custom-webpack.js") }, - }); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("main.js"); + it("should use custom-webpack.js", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [], { + env: { WEBPACK_PACKAGE: resolve(__dirname, "./custom-webpack.js") }, }); - it("should throw an error for invalid-webpack.js", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [], { - env: { - WEBPACK_PACKAGE: resolve(__dirname, "./invalid-webpack.js"), - }, - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("main.js"); + }); - expect(exitCode).toBe(2); - expect(stderr).toContain(`Error: Cannot find module`); - expect(stdout).toBeFalsy(); + it("should throw an error for invalid-webpack.js", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [], { + env: { + WEBPACK_PACKAGE: resolve(__dirname, "./invalid-webpack.js"), + }, }); + + expect(exitCode).toBe(2); + expect(stderr).toContain(`Error: Cannot find module`); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/custom-webpack/webpack.config.js b/test/build/custom-webpack/webpack.config.js index 529ce401c0c..e9bba3dc5e9 100644 --- a/test/build/custom-webpack/webpack.config.js +++ b/test/build/custom-webpack/webpack.config.js @@ -1,3 +1,3 @@ module.exports = { - mode: "production", + mode: "production", }; diff --git a/test/build/defaults/output-defaults.test.js b/test/build/defaults/output-defaults.test.js index f4f2bff82b3..a2db3e26f2a 100644 --- a/test/build/defaults/output-defaults.test.js +++ b/test/build/defaults/output-defaults.test.js @@ -5,40 +5,40 @@ const { resolve } = require("path"); const { run } = require("../../utils/test-utils"); describe("output flag defaults", () => { - it("should create default file for a given directory", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--entry", - "./a.js", - "--output-path", - "./binary", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - // Should print warning about config fallback - expect(stdout).toContain("option has not been set, webpack will fallback to"); - - expect(existsSync(resolve(__dirname, "./binary/main.js"))).toBeTruthy(); - }); - - it("set default output directory on no output flag", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--entry", "./a.js"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./binary/main.js"))).toBeTruthy(); - }); - - it("throw error on empty output flag", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--entry", - "./a.js", - "--output-path", - ]); - - expect(exitCode).toBe(2); - expect(stderr).toContain("Error: Option '-o, --output-path ' argument missing"); - expect(stdout).toBeFalsy(); - }); + it("should create default file for a given directory", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--entry", + "./a.js", + "--output-path", + "./binary", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + // Should print warning about config fallback + expect(stdout).toContain("option has not been set, webpack will fallback to"); + + expect(existsSync(resolve(__dirname, "./binary/main.js"))).toBeTruthy(); + }); + + it("set default output directory on no output flag", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--entry", "./a.js"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./binary/main.js"))).toBeTruthy(); + }); + + it("throw error on empty output flag", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--entry", + "./a.js", + "--output-path", + ]); + + expect(exitCode).toBe(2); + expect(stderr).toContain("Error: Option '-o, --output-path ' argument missing"); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/devtool/array/source-map-array.test.js b/test/build/devtool/array/source-map-array.test.js index ee45e79dd06..63a8dbf81e0 100644 --- a/test/build/devtool/array/source-map-array.test.js +++ b/test/build/devtool/array/source-map-array.test.js @@ -4,46 +4,46 @@ const { resolve } = require("path"); const { run, readdir } = require("../../../utils/test-utils"); describe("source-map object", () => { - it("should treat source-map settings right", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - // multi compilers - expect(stdout).toContain("devtool: 'source-map'"); - expect(stdout).toContain("devtool: 'eval-cheap-module-source-map'"); - - let files; - - try { - files = await readdir(resolve(__dirname, "dist")); - } catch (error) { - expect(error).toBe(null); - } - - expect(files.length).toBe(3); - }); - - it("should override entire array on flag", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--devtool", - "source-map", - "--output-path", - "./binary", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("devtool: 'source-map'"); - - let files; - - try { - files = await readdir(resolve(__dirname, "binary")); - } catch (error) { - expect(error).toBe(null); - } - - expect(files.length).toBe(4); - }); + it("should treat source-map settings right", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + // multi compilers + expect(stdout).toContain("devtool: 'source-map'"); + expect(stdout).toContain("devtool: 'eval-cheap-module-source-map'"); + + let files; + + try { + files = await readdir(resolve(__dirname, "dist")); + } catch (error) { + expect(error).toBe(null); + } + + expect(files.length).toBe(3); + }); + + it("should override entire array on flag", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--devtool", + "source-map", + "--output-path", + "./binary", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("devtool: 'source-map'"); + + let files; + + try { + files = await readdir(resolve(__dirname, "binary")); + } catch (error) { + expect(error).toBe(null); + } + + expect(files.length).toBe(4); + }); }); diff --git a/test/build/devtool/array/webpack.config.js b/test/build/devtool/array/webpack.config.js index 8e8d0582195..24a0e2a107a 100644 --- a/test/build/devtool/array/webpack.config.js +++ b/test/build/devtool/array/webpack.config.js @@ -1,27 +1,27 @@ const WebpackCLITestPlugin = require("../../../utils/webpack-cli-test-plugin"); module.exports = [ - { - output: { - filename: "./dist-amd.js", - libraryTarget: "amd", - }, - name: "amd", - entry: "./index.js", - mode: "development", - devtool: "eval-cheap-module-source-map", - plugins: [new WebpackCLITestPlugin()], + { + output: { + filename: "./dist-amd.js", + libraryTarget: "amd", }, - { - output: { - filename: "./dist-commonjs.js", - libraryTarget: "commonjs", - }, - name: "commonjs", - entry: "./index.js", - mode: "development", - devtool: "source-map", - target: "node", - plugins: [new WebpackCLITestPlugin()], + name: "amd", + entry: "./index.js", + mode: "development", + devtool: "eval-cheap-module-source-map", + plugins: [new WebpackCLITestPlugin()], + }, + { + output: { + filename: "./dist-commonjs.js", + libraryTarget: "commonjs", }, + name: "commonjs", + entry: "./index.js", + mode: "development", + devtool: "source-map", + target: "node", + plugins: [new WebpackCLITestPlugin()], + }, ]; diff --git a/test/build/devtool/object/source-map-object.test.js b/test/build/devtool/object/source-map-object.test.js index 77be45d52ac..ffd2d90c508 100644 --- a/test/build/devtool/object/source-map-object.test.js +++ b/test/build/devtool/object/source-map-object.test.js @@ -4,62 +4,56 @@ const { resolve } = require("path"); const { run, readdir } = require("../../../utils/test-utils"); describe("source-map object", () => { - it("should not write a source map for obj config", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "./webpack.eval.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("devtool: 'eval-cheap-module-source-map'"); - - let files; - - try { - files = await readdir(resolve(__dirname, "dist")); - } catch (error) { - expect(error).toBe(null); - } - - expect(files.length).toBeGreaterThanOrEqual(1); - }); - - it("should write a sourcemap file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "./webpack.source.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("devtool: 'source-map'"); - expect(existsSync(resolve(__dirname, "dist/dist-amd.js.map"))).toBeTruthy(); - }); - - it("should override config with source-map", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["-c", "./webpack.eval.config.js", "--devtool", "source-map", "-o", "./binary"], - false, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("devtool: 'source-map'"); - expect(existsSync(resolve(__dirname, "binary/dist-amd.js.map"))).toBeTruthy(); - }); - - it("should override config with devtool false", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["-c", "./webpack.eval.config.js", "--no-devtool", "-o", "./binary"], - false, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("devtool: false"); - expect(existsSync(resolve(__dirname, "binary/dist-amd.js.map"))).toBeTruthy(); - }); + it("should not write a source map for obj config", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.eval.config.js"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("devtool: 'eval-cheap-module-source-map'"); + + let files; + + try { + files = await readdir(resolve(__dirname, "dist")); + } catch (error) { + expect(error).toBe(null); + } + + expect(files.length).toBeGreaterThanOrEqual(1); + }); + + it("should write a sourcemap file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.source.config.js"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("devtool: 'source-map'"); + expect(existsSync(resolve(__dirname, "dist/dist-amd.js.map"))).toBeTruthy(); + }); + + it("should override config with source-map", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["-c", "./webpack.eval.config.js", "--devtool", "source-map", "-o", "./binary"], + false, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("devtool: 'source-map'"); + expect(existsSync(resolve(__dirname, "binary/dist-amd.js.map"))).toBeTruthy(); + }); + + it("should override config with devtool false", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["-c", "./webpack.eval.config.js", "--no-devtool", "-o", "./binary"], + false, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("devtool: false"); + expect(existsSync(resolve(__dirname, "binary/dist-amd.js.map"))).toBeTruthy(); + }); }); diff --git a/test/build/devtool/object/webpack.eval.config.js b/test/build/devtool/object/webpack.eval.config.js index 39643fefd9f..a43ce95a225 100644 --- a/test/build/devtool/object/webpack.eval.config.js +++ b/test/build/devtool/object/webpack.eval.config.js @@ -1,13 +1,13 @@ const WebpackCLITestPlugin = require("../../../utils/webpack-cli-test-plugin"); module.exports = { - output: { - filename: "./dist-amd.js", - libraryTarget: "amd", - }, - name: "amd", - entry: "./index.js", - mode: "development", - devtool: "eval-cheap-module-source-map", - plugins: [new WebpackCLITestPlugin()], + output: { + filename: "./dist-amd.js", + libraryTarget: "amd", + }, + name: "amd", + entry: "./index.js", + mode: "development", + devtool: "eval-cheap-module-source-map", + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/devtool/object/webpack.source.config.js b/test/build/devtool/object/webpack.source.config.js index 2972b444959..f17f4a8f6c1 100644 --- a/test/build/devtool/object/webpack.source.config.js +++ b/test/build/devtool/object/webpack.source.config.js @@ -1,13 +1,13 @@ const WebpackCLITestPlugin = require("../../../utils/webpack-cli-test-plugin"); module.exports = { - output: { - filename: "./dist-amd.js", - libraryTarget: "amd", - }, - name: "amd", - entry: "./index.js", - mode: "development", - devtool: "source-map", - plugins: [new WebpackCLITestPlugin()], + output: { + filename: "./dist-amd.js", + libraryTarget: "amd", + }, + name: "amd", + entry: "./index.js", + mode: "development", + devtool: "source-map", + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/entry/config-entry/1.js b/test/build/entry/config-entry/1.js index fd01d9ae015..fdad90b5934 100644 --- a/test/build/entry/config-entry/1.js +++ b/test/build/entry/config-entry/1.js @@ -1,11 +1,11 @@ const { resolve } = require("path"); module.exports = { - entry: { - index: "../a.js", - }, - output: { - path: resolve(process.cwd(), "binary"), - filename: "[name].bundle.js", - }, + entry: { + index: "../a.js", + }, + output: { + path: resolve(process.cwd(), "binary"), + filename: "[name].bundle.js", + }, }; diff --git a/test/build/entry/config-entry/entry-with-config/entry-with-config.test.js b/test/build/entry/config-entry/entry-with-config/entry-with-config.test.js index c63e2723bf9..07234938083 100644 --- a/test/build/entry/config-entry/entry-with-config/entry-with-config.test.js +++ b/test/build/entry/config-entry/entry-with-config/entry-with-config.test.js @@ -4,12 +4,12 @@ const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); describe("default entry and config entry all exist", () => { - it("should use config entry if config entry existed", async () => { - const { stdout, stderr, exitCode } = await run(__dirname, ["-c", "../1.js"]); + it("should use config entry if config entry existed", async () => { + const { stdout, stderr, exitCode } = await run(__dirname, ["-c", "../1.js"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("./a.js"); - expect(existsSync(resolve(__dirname, "./binary/index.bundle.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("./a.js"); + expect(existsSync(resolve(__dirname, "./binary/index.bundle.js"))).toBeTruthy(); + }); }); diff --git a/test/build/entry/config-entry/entry-with-index/entry-with-config.test.js b/test/build/entry/config-entry/entry-with-index/entry-with-config.test.js index b4de568e1e0..bdd76333fb2 100644 --- a/test/build/entry/config-entry/entry-with-index/entry-with-config.test.js +++ b/test/build/entry/config-entry/entry-with-index/entry-with-config.test.js @@ -3,18 +3,18 @@ const { run } = require("../../../../utils/test-utils"); describe("default entry and config entry all exist", () => { - it("should use config entry if config entry existed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); + it("should use config entry if config entry existed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - // Should contain the relevant entry - expect(stdout).toContain("./src/app.js"); - expect(stdout).toContain("./src/print.js"); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + // Should contain the relevant entry + expect(stdout).toContain("./src/app.js"); + expect(stdout).toContain("./src/print.js"); - // Should contain the relevant bundle - expect(stdout).toContain("app.bundle.js"); - expect(stdout).toContain("print.bundle.js"); - expect(stdout).not.toContain("index.js"); - }); + // Should contain the relevant bundle + expect(stdout).toContain("app.bundle.js"); + expect(stdout).toContain("print.bundle.js"); + expect(stdout).not.toContain("index.js"); + }); }); diff --git a/test/build/entry/config-entry/entry-with-index/webpack.config.js b/test/build/entry/config-entry/entry-with-index/webpack.config.js index daa57e5a211..420d4f5c189 100644 --- a/test/build/entry/config-entry/entry-with-index/webpack.config.js +++ b/test/build/entry/config-entry/entry-with-index/webpack.config.js @@ -1,13 +1,13 @@ const path = require("path"); module.exports = { - mode: "development", - entry: { - app: "./src/app.js", - print: "./src/print.js", - }, - output: { - filename: "[name].bundle.js", - path: path.resolve(__dirname, "dist"), - }, + mode: "development", + entry: { + app: "./src/app.js", + print: "./src/print.js", + }, + output: { + filename: "[name].bundle.js", + path: path.resolve(__dirname, "dist"), + }, }; diff --git a/test/build/entry/defaults-empty/entry-single-arg.test.js b/test/build/entry/defaults-empty/entry-single-arg.test.js index 0d4deab2e67..a82dee90dea 100644 --- a/test/build/entry/defaults-empty/entry-single-arg.test.js +++ b/test/build/entry/defaults-empty/entry-single-arg.test.js @@ -3,11 +3,11 @@ const { run } = require("../../../utils/test-utils"); describe("single entry flag empty project", () => { - it("sets default entry, compiles but throw missing module error", async () => { - const { exitCode, stderr, stdout } = await run(__dirname); + it("sets default entry, compiles but throw missing module error", async () => { + const { exitCode, stderr, stdout } = await run(__dirname); - expect(exitCode).toBe(1); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`not found: Error: Can't resolve`); - }); + expect(exitCode).toBe(1); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`not found: Error: Can't resolve`); + }); }); diff --git a/test/build/entry/defaults-index/entry-multi-args.test.js b/test/build/entry/defaults-index/entry-multi-args.test.js index eab4821ffd7..d97f65804d4 100644 --- a/test/build/entry/defaults-index/entry-multi-args.test.js +++ b/test/build/entry/defaults-index/entry-multi-args.test.js @@ -6,21 +6,21 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("single entry flag index present", () => { - it("finds default index file and compiles successfully", async () => { - const { stderr, stdout, exitCode } = await run(__dirname); + it("finds default index file and compiles successfully", async () => { + const { stderr, stdout, exitCode } = await run(__dirname); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stderr).not.toContain("Module not found"); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stderr).not.toContain("Module not found"); + expect(stdout).toBeTruthy(); + }); - it("finds default index file, compiles and overrides with flags successfully", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--output-path", "bin"]); + it("finds default index file, compiles and overrides with flags successfully", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--output-path", "bin"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./bin/main.js"))).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./bin/main.js"))).toBeTruthy(); + }); }); diff --git a/test/build/entry/flag-entry/entry-with-flag.test.js b/test/build/entry/flag-entry/entry-with-flag.test.js index aea0411bb0f..01173107c25 100644 --- a/test/build/entry/flag-entry/entry-with-flag.test.js +++ b/test/build/entry/flag-entry/entry-with-flag.test.js @@ -5,50 +5,50 @@ const { existsSync } = require("fs"); const { resolve } = require("path"); describe("entry flag", () => { - it("should resolve the path to src/index.cjs", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--entry", - "./src/index.cjs", - "-o", - "./dist/", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it("should load ./src/a.js as entry", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--entry", "./src/a.js"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it("should resolve the path to /src/a.js as ./src/a.js", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--entry", "/src/a.js"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./dist/main.js"))).toBeTruthy(); - - let data; - - try { - data = await readFile(resolve(__dirname, "./dist/main.js"), "utf-8"); - } catch (error) { - expect(error).toBe(null); - } - - expect(data).toContain("Hello from a.js"); - }); - - it("should throw error for invalid entry file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--entry", "./src/test.js"]); - - expect(exitCode).toEqual(1); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("Module not found: Error: Can't resolve"); - }); + it("should resolve the path to src/index.cjs", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--entry", + "./src/index.cjs", + "-o", + "./dist/", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("should load ./src/a.js as entry", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--entry", "./src/a.js"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("should resolve the path to /src/a.js as ./src/a.js", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--entry", "/src/a.js"]); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./dist/main.js"))).toBeTruthy(); + + let data; + + try { + data = await readFile(resolve(__dirname, "./dist/main.js"), "utf-8"); + } catch (error) { + expect(error).toBe(null); + } + + expect(data).toContain("Hello from a.js"); + }); + + it("should throw error for invalid entry file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--entry", "./src/test.js"]); + + expect(exitCode).toEqual(1); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("Module not found: Error: Can't resolve"); + }); }); diff --git a/test/build/entry/multiple-entries/multi-entries.test.js b/test/build/entry/multiple-entries/multi-entries.test.js index cbf765751ee..4554929f9ec 100644 --- a/test/build/entry/multiple-entries/multi-entries.test.js +++ b/test/build/entry/multiple-entries/multi-entries.test.js @@ -5,28 +5,28 @@ const { existsSync } = require("fs"); const { resolve } = require("path"); describe(" multiple entries", () => { - it("should allow multiple entry flags", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--entry", - "./src/a.js", - "--entry", - "./src/b.js", - ]); + it("should allow multiple entry flags", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--entry", + "./src/a.js", + "--entry", + "./src/b.js", + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(existsSync(resolve(__dirname, "./dist/main.js"))).toBeTruthy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(existsSync(resolve(__dirname, "./dist/main.js"))).toBeTruthy(); - let data; + let data; - try { - data = await readFile(resolve(__dirname, "./dist/main.js"), "utf-8"); - } catch (error) { - expect(error).toBe(null); - } + try { + data = await readFile(resolve(__dirname, "./dist/main.js"), "utf-8"); + } catch (error) { + expect(error).toBe(null); + } - expect(data).toContain("Hello from a.js"); - expect(data).toContain("Hello from b.js"); - }); + expect(data).toContain("Hello from a.js"); + expect(data).toContain("Hello from b.js"); + }); }); diff --git a/test/build/entry/scss/home.scss b/test/build/entry/scss/home.scss index 55923ddda12..378094268d1 100644 --- a/test/build/entry/scss/home.scss +++ b/test/build/entry/scss/home.scss @@ -1,6 +1,6 @@ body { - font-size: 100%; - body { - background-color: red; - } + font-size: 100%; + body { + background-color: red; + } } diff --git a/test/build/entry/scss/scss.test.js b/test/build/entry/scss/scss.test.js index 52f609c136a..59770200792 100644 --- a/test/build/entry/scss/scss.test.js +++ b/test/build/entry/scss/scss.test.js @@ -2,11 +2,11 @@ const { run } = require("../../../utils/test-utils"); describe("entry point", () => { - it("should support SCSS files", async () => { - const { stdout } = await run(__dirname); + it("should support SCSS files", async () => { + const { stdout } = await run(__dirname); - expect(stdout).toBeTruthy(); - expect(stdout).toContain("home.scss"); - expect(stdout).toContain("home.js"); - }); + expect(stdout).toBeTruthy(); + expect(stdout).toContain("home.scss"); + expect(stdout).toContain("home.js"); + }); }); diff --git a/test/build/entry/scss/webpack.config.js b/test/build/entry/scss/webpack.config.js index 265ae5f8c31..c3c7e2ef1ed 100644 --- a/test/build/entry/scss/webpack.config.js +++ b/test/build/entry/scss/webpack.config.js @@ -2,29 +2,29 @@ const MiniCssExtractPlugin = require("mini-css-extract-plugin"); module.exports = { - mode: "development", - entry: { - home: ["./home.js", "./home.scss"], - }, - output: { - filename: "[name].js", - }, - module: { - rules: [ - { - test: /\.scss$/, - use: [ - // fallback to style-loader in development - MiniCssExtractPlugin.loader, - "css-loader", - "sass-loader", - ], - }, + mode: "development", + entry: { + home: ["./home.js", "./home.scss"], + }, + output: { + filename: "[name].js", + }, + module: { + rules: [ + { + test: /\.scss$/, + use: [ + // fallback to style-loader in development + MiniCssExtractPlugin.loader, + "css-loader", + "sass-loader", ], - }, - plugins: [ - new MiniCssExtractPlugin({ - filename: "[name].css", - }), + }, ], + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: "[name].css", + }), + ], }; diff --git a/test/build/env/array/array-env.test.js b/test/build/env/array/array-env.test.js index 78e47247b77..6c744d98695 100644 --- a/test/build/env/array/array-env.test.js +++ b/test/build/env/array/array-env.test.js @@ -11,19 +11,19 @@ const devFile = path.join(__dirname, "./dist/dev.js"); const prodFile = path.join(__dirname, "./dist/prod.js"); describe("env array", () => { - it("is able to set two different environments for an array configuration", async () => { - const { exitCode, stderr, stdout } = await run(__dirname); + it("is able to set two different environments for an array configuration", async () => { + const { exitCode, stderr, stdout } = await run(__dirname); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); - if (isWebpack5) { - const devScript = spawnSync("node", [devFile]); - const prodScript = spawnSync("node", [prodFile]); + if (isWebpack5) { + const devScript = spawnSync("node", [devFile]); + const prodScript = spawnSync("node", [prodFile]); - expect(devScript.stdout).toBe("environment is development"); - expect(prodScript.stdout).toBe("environment is production"); - } - }); + expect(devScript.stdout).toBe("environment is development"); + expect(prodScript.stdout).toBe("environment is production"); + } + }); }); diff --git a/test/build/env/array/webpack.config.js b/test/build/env/array/webpack.config.js index 0e907ca83c0..d9518a08e6f 100644 --- a/test/build/env/array/webpack.config.js +++ b/test/build/env/array/webpack.config.js @@ -1,29 +1,29 @@ const webpack = require("webpack"); module.exports = [ - { - output: { - filename: "prod.js", - }, - mode: "production", - devtool: "eval-cheap-module-source-map", - target: "node", - plugins: [ - new webpack.DefinePlugin({ - PRODUCTION: JSON.stringify(true), - }), - ], + { + output: { + filename: "prod.js", }, - { - output: { - filename: "dev.js", - }, - mode: "development", - target: "node", - plugins: [ - new webpack.DefinePlugin({ - PRODUCTION: JSON.stringify(false), - }), - ], + mode: "production", + devtool: "eval-cheap-module-source-map", + target: "node", + plugins: [ + new webpack.DefinePlugin({ + PRODUCTION: JSON.stringify(true), + }), + ], + }, + { + output: { + filename: "dev.js", }, + mode: "development", + target: "node", + plugins: [ + new webpack.DefinePlugin({ + PRODUCTION: JSON.stringify(false), + }), + ], + }, ]; diff --git a/test/build/env/object/object-env.test.js b/test/build/env/object/object-env.test.js index 0a66e50fad5..ab4d9b7ec80 100644 --- a/test/build/env/object/object-env.test.js +++ b/test/build/env/object/object-env.test.js @@ -8,17 +8,17 @@ const { sync: spawnSync } = execa; const { run, isWebpack5 } = require("../../../utils/test-utils"); describe("env object", () => { - it("is able to set env for an object", async () => { - const { exitCode, stderr, stdout } = await run(__dirname); + it("is able to set env for an object", async () => { + const { exitCode, stderr, stdout } = await run(__dirname); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); - if (isWebpack5) { - const executable = path.join(__dirname, "./dist/main.js"); - const bundledScript = spawnSync("node", [executable]); - expect(bundledScript.stdout).toBe("environment is development"); - } - }); + if (isWebpack5) { + const executable = path.join(__dirname, "./dist/main.js"); + const bundledScript = spawnSync("node", [executable]); + expect(bundledScript.stdout).toBe("environment is development"); + } + }); }); diff --git a/test/build/env/object/webpack.config.js b/test/build/env/object/webpack.config.js index 84e75adab17..e49a9996b76 100644 --- a/test/build/env/object/webpack.config.js +++ b/test/build/env/object/webpack.config.js @@ -1,12 +1,12 @@ const webpack = require("webpack"); module.exports = { - mode: "development", - devtool: "eval-cheap-module-source-map", - target: "node", - plugins: [ - new webpack.DefinePlugin({ - PRODUCTION: JSON.stringify(false), - }), - ], + mode: "development", + devtool: "eval-cheap-module-source-map", + target: "node", + plugins: [ + new webpack.DefinePlugin({ + PRODUCTION: JSON.stringify(false), + }), + ], }; diff --git a/test/build/error/error-in-plugin/error.test.js b/test/build/error/error-in-plugin/error.test.js index e8951f69201..2b0f1d7eb8b 100644 --- a/test/build/error/error-in-plugin/error.test.js +++ b/test/build/error/error-in-plugin/error.test.js @@ -3,30 +3,30 @@ const { run } = require("../../../utils/test-utils"); describe("error", () => { - it("should log error with stacktrace", async () => { - const { exitCode, stderr, stdout } = await run(__dirname); + it("should log error with stacktrace", async () => { + const { exitCode, stderr, stdout } = await run(__dirname); - expect(exitCode).toBe(2); - expect(stderr).toContain("Error: test"); - expect(stderr).toMatch(/at .+ (.+)/); - expect(stdout).toBeFalsy(); - }); + expect(exitCode).toBe(2); + expect(stderr).toContain("Error: test"); + expect(stderr).toMatch(/at .+ (.+)/); + expect(stdout).toBeFalsy(); + }); - it('should log error with stacktrace using the "bundle" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["bundle"]); + it('should log error with stacktrace using the "bundle" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["bundle"]); - expect(exitCode).toBe(2); - expect(stderr).toContain("Error: test"); - expect(stderr).toMatch(/at .+ (.+)/); - expect(stdout).toBeFalsy(); - }); + expect(exitCode).toBe(2); + expect(stderr).toContain("Error: test"); + expect(stderr).toMatch(/at .+ (.+)/); + expect(stdout).toBeFalsy(); + }); - it('should log error with stacktrace using the "serve" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["serve"]); + it('should log error with stacktrace using the "serve" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["serve"]); - expect(exitCode).toBe(2); - expect(stderr).toContain("Error: test"); - expect(stderr).toMatch(/at .+ (.+)/); - expect(stdout).toBeFalsy(); - }); + expect(exitCode).toBe(2); + expect(stderr).toContain("Error: test"); + expect(stderr).toMatch(/at .+ (.+)/); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/error/error-in-plugin/webpack.config.js b/test/build/error/error-in-plugin/webpack.config.js index ce907f08a78..ece601c6011 100644 --- a/test/build/error/error-in-plugin/webpack.config.js +++ b/test/build/error/error-in-plugin/webpack.config.js @@ -1,9 +1,9 @@ module.exports = { - plugins: [ - { - apply() { - throw new Error("test"); - }, - }, - ], + plugins: [ + { + apply() { + throw new Error("test"); + }, + }, + ], }; diff --git a/test/build/error/invalid-schema/invalid-schema.test.js b/test/build/error/invalid-schema/invalid-schema.test.js index de901331213..184121aec87 100644 --- a/test/build/error/invalid-schema/invalid-schema.test.js +++ b/test/build/error/invalid-schema/invalid-schema.test.js @@ -2,169 +2,169 @@ const { run, isWebpack5 } = require("../../../utils/test-utils"); describe("invalid schema", () => { - it("should log error on invalid config", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config", - "./webpack.mock.config.js", - ]); - - expect(exitCode).toEqual(2); - expect(stderr).toContain("Invalid configuration object"); - expect(stdout).toBeFalsy(); - }); - - it("should log error on invalid plugin options", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config", - "./webpack.plugin-mock.config.js", - ]); - - expect(exitCode).toEqual(2); - expect(stderr).toContain(isWebpack5 ? "Invalid options object" : "Invalid Options"); - expect(stdout).toBeFalsy(); - }); - - it('should log error on invalid config using the "bundle" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "bundle", - "--config", - "./webpack.mock.config.js", - ]); - - expect(exitCode).toEqual(2); - expect(stderr).toContain("Invalid configuration object"); - expect(stdout).toBeFalsy(); - }); - - it('should log error on invalid config using the "serve" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "serve", - "--config", - "./webpack.mock.config.js", - ]); - - expect(exitCode).toEqual(2); - expect(stderr).toContain("Invalid configuration object"); - expect(stdout).toBeFalsy(); - }); - - it("should log error on invalid option", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "Yukihira"]); - - expect(exitCode).toEqual(2); - - if (isWebpack5) { - expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); - expect(stderr).toContain("Expected: 'development | production | none'"); - } else { - expect(stderr).toContain("Invalid configuration object"); - } - - expect(stdout).toBeFalsy(); - }); - - it('should log error on invalid option using "build" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["build", "--mode", "Yukihira"]); - - expect(exitCode).toEqual(2); - - if (isWebpack5) { - expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); - expect(stderr).toContain("Expected: 'development | production | none'"); - } else { - expect(stderr).toContain("Invalid configuration object"); - } - - expect(stdout).toBeFalsy(); - }); - - it('should log error on invalid option using "bundle" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["bundle", "--mode", "Yukihira"]); - - expect(exitCode).toEqual(2); - - if (isWebpack5) { - expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); - expect(stderr).toContain("Expected: 'development | production | none'"); - } else { - expect(stderr).toContain("Invalid configuration object"); - } - - expect(stdout).toBeFalsy(); - }); - - it('should log error on invalid option using "b" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["b", "--mode", "Yukihira"]); - - expect(exitCode).toEqual(2); - - if (isWebpack5) { - expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); - expect(stderr).toContain("Expected: 'development | production | none'"); - } else { - expect(stderr).toContain("Invalid configuration object"); - } - - expect(stdout).toBeFalsy(); - }); - - it('should log error on invalid option using "watch" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["watch", "--mode", "Yukihira"]); - - expect(exitCode).toEqual(2); + it("should log error on invalid config", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config", + "./webpack.mock.config.js", + ]); + + expect(exitCode).toEqual(2); + expect(stderr).toContain("Invalid configuration object"); + expect(stdout).toBeFalsy(); + }); + + it("should log error on invalid plugin options", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config", + "./webpack.plugin-mock.config.js", + ]); + + expect(exitCode).toEqual(2); + expect(stderr).toContain(isWebpack5 ? "Invalid options object" : "Invalid Options"); + expect(stdout).toBeFalsy(); + }); + + it('should log error on invalid config using the "bundle" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "bundle", + "--config", + "./webpack.mock.config.js", + ]); + + expect(exitCode).toEqual(2); + expect(stderr).toContain("Invalid configuration object"); + expect(stdout).toBeFalsy(); + }); + + it('should log error on invalid config using the "serve" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "serve", + "--config", + "./webpack.mock.config.js", + ]); + + expect(exitCode).toEqual(2); + expect(stderr).toContain("Invalid configuration object"); + expect(stdout).toBeFalsy(); + }); + + it("should log error on invalid option", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "Yukihira"]); + + expect(exitCode).toEqual(2); + + if (isWebpack5) { + expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); + expect(stderr).toContain("Expected: 'development | production | none'"); + } else { + expect(stderr).toContain("Invalid configuration object"); + } + + expect(stdout).toBeFalsy(); + }); + + it('should log error on invalid option using "build" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["build", "--mode", "Yukihira"]); + + expect(exitCode).toEqual(2); + + if (isWebpack5) { + expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); + expect(stderr).toContain("Expected: 'development | production | none'"); + } else { + expect(stderr).toContain("Invalid configuration object"); + } + + expect(stdout).toBeFalsy(); + }); + + it('should log error on invalid option using "bundle" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["bundle", "--mode", "Yukihira"]); + + expect(exitCode).toEqual(2); + + if (isWebpack5) { + expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); + expect(stderr).toContain("Expected: 'development | production | none'"); + } else { + expect(stderr).toContain("Invalid configuration object"); + } + + expect(stdout).toBeFalsy(); + }); + + it('should log error on invalid option using "b" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["b", "--mode", "Yukihira"]); + + expect(exitCode).toEqual(2); + + if (isWebpack5) { + expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); + expect(stderr).toContain("Expected: 'development | production | none'"); + } else { + expect(stderr).toContain("Invalid configuration object"); + } + + expect(stdout).toBeFalsy(); + }); + + it('should log error on invalid option using "watch" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["watch", "--mode", "Yukihira"]); + + expect(exitCode).toEqual(2); - if (isWebpack5) { - expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); - expect(stderr).toContain("Expected: 'development | production | none'"); - } else { - expect(stderr).toContain("Invalid configuration object"); - } - - expect(stdout).toBeFalsy(); - }); + if (isWebpack5) { + expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); + expect(stderr).toContain("Expected: 'development | production | none'"); + } else { + expect(stderr).toContain("Invalid configuration object"); + } + + expect(stdout).toBeFalsy(); + }); - it('should log error on invalid option using "w" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["w", "--mode", "Yukihira"]); + it('should log error on invalid option using "w" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["w", "--mode", "Yukihira"]); - expect(exitCode).toEqual(2); + expect(exitCode).toEqual(2); - if (isWebpack5) { - expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); - expect(stderr).toContain("Expected: 'development | production | none'"); - } else { - expect(stderr).toContain("Invalid configuration object"); - } + if (isWebpack5) { + expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); + expect(stderr).toContain("Expected: 'development | production | none'"); + } else { + expect(stderr).toContain("Invalid configuration object"); + } - expect(stdout).toBeFalsy(); - }); + expect(stdout).toBeFalsy(); + }); - it('should log error on invalid option using "server" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "--mode", "Yukihira"]); + it('should log error on invalid option using "server" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "--mode", "Yukihira"]); - expect(exitCode).toEqual(2); + expect(exitCode).toEqual(2); - if (isWebpack5) { - expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); - expect(stderr).toContain("Expected: 'development | production | none'"); - } else { - expect(stderr).toContain("Invalid configuration object"); - } + if (isWebpack5) { + expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); + expect(stderr).toContain("Expected: 'development | production | none'"); + } else { + expect(stderr).toContain("Invalid configuration object"); + } - expect(stdout).toBeFalsy(); - }); + expect(stdout).toBeFalsy(); + }); - it('should log error on invalid option using "s" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["s", "--mode", "Yukihira"]); + it('should log error on invalid option using "s" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["s", "--mode", "Yukihira"]); - expect(exitCode).toEqual(2); + expect(exitCode).toEqual(2); - if (isWebpack5) { - expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); - expect(stderr).toContain("Expected: 'development | production | none'"); - } else { - expect(stderr).toContain("Invalid configuration object"); - } + if (isWebpack5) { + expect(stderr).toContain("Invalid value 'Yukihira' for the '--mode' option"); + expect(stderr).toContain("Expected: 'development | production | none'"); + } else { + expect(stderr).toContain("Invalid configuration object"); + } - expect(stdout).toBeFalsy(); - }); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/error/invalid-schema/webpack.mock.config.js b/test/build/error/invalid-schema/webpack.mock.config.js index d436ef9ecc5..db63ed742a4 100644 --- a/test/build/error/invalid-schema/webpack.mock.config.js +++ b/test/build/error/invalid-schema/webpack.mock.config.js @@ -1,3 +1,3 @@ module.exports = { - mode: "Nishinoya Yuu", + mode: "Nishinoya Yuu", }; diff --git a/test/build/error/invalid-schema/webpack.plugin-mock.config.js b/test/build/error/invalid-schema/webpack.plugin-mock.config.js index 0505173c867..74783c8a546 100644 --- a/test/build/error/invalid-schema/webpack.plugin-mock.config.js +++ b/test/build/error/invalid-schema/webpack.plugin-mock.config.js @@ -1,10 +1,10 @@ const webpack = require("webpack"); module.exports = { - mode: "development", - plugins: [ - new webpack.BannerPlugin({ - unknown: "unknown", - }), - ], + mode: "development", + plugins: [ + new webpack.BannerPlugin({ + unknown: "unknown", + }), + ], }; diff --git a/test/build/hot/hot-flag.test.js b/test/build/hot/hot-flag.test.js index 877973de9a5..fb3dd6db663 100644 --- a/test/build/hot/hot-flag.test.js +++ b/test/build/hot/hot-flag.test.js @@ -4,44 +4,44 @@ const { readFileSync } = require("fs"); const { resolve } = require("path"); describe("--hot flag", () => { - it("should be successful when --hot is passed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--hot"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toBeTruthy(); - expect(readFileSync(resolve(__dirname, "./dist/main.js")).toString()).toContain( - "webpackHotUpdate", - ); - }); - - it("should be successful when --hot=only is passed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--hot", "only"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toBeTruthy(); - expect(readFileSync(resolve(__dirname, "./dist/main.js")).toString()).toContain( - "webpackHotUpdate", - ); - }); - - it("should throw an error for invalid value", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--hot", "unknown"]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it("should be successful when --no-hot is passed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--no-hot"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toBeTruthy(); - expect(readFileSync(resolve(__dirname, "./dist/main.js")).toString()).not.toContain( - "webpackHotUpdate", - ); - }); + it("should be successful when --hot is passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--hot"]); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toBeTruthy(); + expect(readFileSync(resolve(__dirname, "./dist/main.js")).toString()).toContain( + "webpackHotUpdate", + ); + }); + + it("should be successful when --hot=only is passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--hot", "only"]); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toBeTruthy(); + expect(readFileSync(resolve(__dirname, "./dist/main.js")).toString()).toContain( + "webpackHotUpdate", + ); + }); + + it("should throw an error for invalid value", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--hot", "unknown"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should be successful when --no-hot is passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--no-hot"]); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toBeTruthy(); + expect(readFileSync(resolve(__dirname, "./dist/main.js")).toString()).not.toContain( + "webpackHotUpdate", + ); + }); }); diff --git a/test/build/hot/webpack.config.js b/test/build/hot/webpack.config.js index 8bac08756f3..8f560d20804 100644 --- a/test/build/hot/webpack.config.js +++ b/test/build/hot/webpack.config.js @@ -1,4 +1,4 @@ module.exports = { - mode: "development", - stats: "verbose", + mode: "development", + stats: "verbose", }; diff --git a/test/build/import-local/import-local.test.js b/test/build/import-local/import-local.test.js index 37d1d110478..7038d19e236 100644 --- a/test/build/import-local/import-local.test.js +++ b/test/build/import-local/import-local.test.js @@ -6,16 +6,16 @@ const importLocalMock = jest.fn(); jest.setMock("import-local", importLocalMock); describe("import local", () => { - beforeEach(() => { - importLocalMock.mockClear(); - }); - it("should skip import local when supplied", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [], { - env: { WEBPACK_CLI_SKIP_IMPORT_LOCAL: true }, - }); - expect(importLocalMock).toHaveBeenCalledTimes(0); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); + beforeEach(() => { + importLocalMock.mockClear(); + }); + it("should skip import local when supplied", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [], { + env: { WEBPACK_CLI_SKIP_IMPORT_LOCAL: true }, }); + expect(importLocalMock).toHaveBeenCalledTimes(0); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/json/json.test.js b/test/build/json/json.test.js index 37294945fb6..893a311a55d 100644 --- a/test/build/json/json.test.js +++ b/test/build/json/json.test.js @@ -7,175 +7,173 @@ const { resolve } = require("path"); const successMessage = "stats are successfully stored as json to stats.json"; describe("json", () => { - it("should work and output json stats", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--json"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(() => JSON.parse(stdout)).not.toThrow(); - expect(JSON.parse(stdout)["hash"]).toBeDefined(); - }); - - it("should work and store json to a file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--json", "stats.json"]); - - expect(exitCode).toBe(0); - expect(stderr).toContain(successMessage); - expect(stdout).toBeFalsy(); - expect(existsSync(resolve(__dirname, "./stats.json"))).toBeTruthy(); - - let data; - - try { - data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); - } catch (error) { - expect(error).toBe(null); - } - - expect(JSON.parse(data)["hash"]).toBeTruthy(); - expect(JSON.parse(data)["version"]).toBeTruthy(); - expect(JSON.parse(data)["time"]).toBeTruthy(); - expect(() => JSON.parse(data)).not.toThrow(); - }); - - it("should work and store json to a file and respect --color flag", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--json", "stats.json", "--color"], - { env: { FORCE_COLOR: true } }, - ); - - expect(exitCode).toBe(0); - expect(stderr).toContain(`\u001b[32m${successMessage}`); - expect(stdout).toBeFalsy(); - expect(existsSync(resolve(__dirname, "./stats.json"))).toBeTruthy(); - - let data; - - try { - data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); - } catch (error) { - expect(error).toBe(null); - } - - expect(JSON.parse(data)["hash"]).toBeTruthy(); - expect(JSON.parse(data)["version"]).toBeTruthy(); - expect(JSON.parse(data)["time"]).toBeTruthy(); - expect(() => JSON.parse(data)).not.toThrow(); - }); - - it("should work and store json to a file and respect --no-color", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--json", - "stats.json", - "--no-color", - ]); - - expect(exitCode).toBe(0); - expect(stderr).not.toContain(`\u001b[32m${successMessage}`); - expect(stderr).toContain(`${successMessage}`); - expect(stdout).toBeFalsy(); - expect(existsSync(resolve(__dirname, "./stats.json"))).toBeTruthy(); - - let data; - - try { - data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); - } catch (error) { - expect(error).toBe(null); - } - - expect(JSON.parse(data)["hash"]).toBeTruthy(); - expect(JSON.parse(data)["version"]).toBeTruthy(); - expect(JSON.parse(data)["time"]).toBeTruthy(); - expect(() => JSON.parse(data)).not.toThrow(); + it("should work and output json stats", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--json"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(() => JSON.parse(stdout)).not.toThrow(); + expect(JSON.parse(stdout)["hash"]).toBeDefined(); + }); + + it("should work and store json to a file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--json", "stats.json"]); + + expect(exitCode).toBe(0); + expect(stderr).toContain(successMessage); + expect(stdout).toBeFalsy(); + expect(existsSync(resolve(__dirname, "./stats.json"))).toBeTruthy(); + + let data; + + try { + data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); + } catch (error) { + expect(error).toBe(null); + } + + expect(JSON.parse(data)["hash"]).toBeTruthy(); + expect(JSON.parse(data)["version"]).toBeTruthy(); + expect(JSON.parse(data)["time"]).toBeTruthy(); + expect(() => JSON.parse(data)).not.toThrow(); + }); + + it("should work and store json to a file and respect --color flag", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--json", "stats.json", "--color"], { + env: { FORCE_COLOR: true }, }); - it('should work using the "-j" option (alias)', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-j"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(() => JSON.parse(stdout)).not.toThrow(); - expect(JSON.parse(stdout)["hash"]).toBeDefined(); - }); - - it('should work and output json stats with the "--progress" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--json", "--progress"]); - - expect(exitCode).toBe(0); - expect(stderr).toContain("webpack.Progress"); - expect(() => JSON.parse(stdout)).not.toThrow(); - expect(JSON.parse(stdout)["hash"]).toBeDefined(); - }); - - it('should work and store json to a file with the "--progress" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--json", - "stats.json", - "--progress", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toContain("webpack.Progress"); - expect(stderr).toContain(successMessage); - expect(stdout).toBeFalsy(); - expect(existsSync(resolve(__dirname, "./stats.json"))).toBeTruthy(); - - let data; - - try { - data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); - } catch (error) { - expect(error).toBe(null); - } - - expect(JSON.parse(data)["hash"]).toBeTruthy(); - expect(JSON.parse(data)["version"]).toBeTruthy(); - expect(JSON.parse(data)["time"]).toBeTruthy(); - expect(() => JSON.parse(data)).not.toThrow(); - }); - - it("should work and output json stats with cli logs", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--json", - "--config", - "logging.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toContain("Compiler starting..."); - expect(stderr).toContain("Compiler finished"); - expect(() => JSON.parse(stdout)).not.toThrow(); - expect(JSON.parse(stdout)["hash"]).toBeDefined(); - }); - - it("should work and store json to a file with cli logs", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--json", - "stats.json", - "--config", - "logging.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toContain("Compiler starting..."); - expect(stderr).toContain("Compiler finished"); - expect(stderr).toContain(successMessage); - expect(stdout).toBeFalsy(); - expect(existsSync(resolve(__dirname, "./stats.json"))).toBeTruthy(); - - let data; - - try { - data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); - } catch (error) { - expect(error).toBe(null); - } - - expect(JSON.parse(data)["hash"]).toBeTruthy(); - expect(JSON.parse(data)["version"]).toBeTruthy(); - expect(JSON.parse(data)["time"]).toBeTruthy(); - expect(() => JSON.parse(data)).not.toThrow(); - }); + expect(exitCode).toBe(0); + expect(stderr).toContain(`\u001b[32m${successMessage}`); + expect(stdout).toBeFalsy(); + expect(existsSync(resolve(__dirname, "./stats.json"))).toBeTruthy(); + + let data; + + try { + data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); + } catch (error) { + expect(error).toBe(null); + } + + expect(JSON.parse(data)["hash"]).toBeTruthy(); + expect(JSON.parse(data)["version"]).toBeTruthy(); + expect(JSON.parse(data)["time"]).toBeTruthy(); + expect(() => JSON.parse(data)).not.toThrow(); + }); + + it("should work and store json to a file and respect --no-color", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--json", + "stats.json", + "--no-color", + ]); + + expect(exitCode).toBe(0); + expect(stderr).not.toContain(`\u001b[32m${successMessage}`); + expect(stderr).toContain(`${successMessage}`); + expect(stdout).toBeFalsy(); + expect(existsSync(resolve(__dirname, "./stats.json"))).toBeTruthy(); + + let data; + + try { + data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); + } catch (error) { + expect(error).toBe(null); + } + + expect(JSON.parse(data)["hash"]).toBeTruthy(); + expect(JSON.parse(data)["version"]).toBeTruthy(); + expect(JSON.parse(data)["time"]).toBeTruthy(); + expect(() => JSON.parse(data)).not.toThrow(); + }); + + it('should work using the "-j" option (alias)', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-j"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(() => JSON.parse(stdout)).not.toThrow(); + expect(JSON.parse(stdout)["hash"]).toBeDefined(); + }); + + it('should work and output json stats with the "--progress" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--json", "--progress"]); + + expect(exitCode).toBe(0); + expect(stderr).toContain("webpack.Progress"); + expect(() => JSON.parse(stdout)).not.toThrow(); + expect(JSON.parse(stdout)["hash"]).toBeDefined(); + }); + + it('should work and store json to a file with the "--progress" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--json", + "stats.json", + "--progress", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toContain("webpack.Progress"); + expect(stderr).toContain(successMessage); + expect(stdout).toBeFalsy(); + expect(existsSync(resolve(__dirname, "./stats.json"))).toBeTruthy(); + + let data; + + try { + data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); + } catch (error) { + expect(error).toBe(null); + } + + expect(JSON.parse(data)["hash"]).toBeTruthy(); + expect(JSON.parse(data)["version"]).toBeTruthy(); + expect(JSON.parse(data)["time"]).toBeTruthy(); + expect(() => JSON.parse(data)).not.toThrow(); + }); + + it("should work and output json stats with cli logs", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--json", + "--config", + "logging.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toContain("Compiler starting..."); + expect(stderr).toContain("Compiler finished"); + expect(() => JSON.parse(stdout)).not.toThrow(); + expect(JSON.parse(stdout)["hash"]).toBeDefined(); + }); + + it("should work and store json to a file with cli logs", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--json", + "stats.json", + "--config", + "logging.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toContain("Compiler starting..."); + expect(stderr).toContain("Compiler finished"); + expect(stderr).toContain(successMessage); + expect(stdout).toBeFalsy(); + expect(existsSync(resolve(__dirname, "./stats.json"))).toBeTruthy(); + + let data; + + try { + data = await readFile(resolve(__dirname, "stats.json"), "utf-8"); + } catch (error) { + expect(error).toBe(null); + } + + expect(JSON.parse(data)["hash"]).toBeTruthy(); + expect(JSON.parse(data)["version"]).toBeTruthy(); + expect(JSON.parse(data)["time"]).toBeTruthy(); + expect(() => JSON.parse(data)).not.toThrow(); + }); }); diff --git a/test/build/json/logging.config.js b/test/build/json/logging.config.js index d95eb5d6505..f25deb4239c 100644 --- a/test/build/json/logging.config.js +++ b/test/build/json/logging.config.js @@ -1,5 +1,5 @@ module.exports = { - infrastructureLogging: { - level: "log", - }, + infrastructureLogging: { + level: "log", + }, }; diff --git a/test/build/merge/config-absent/1.js b/test/build/merge/config-absent/1.js index dd5fda8eb9b..2ae3f4cbc11 100644 --- a/test/build/merge/config-absent/1.js +++ b/test/build/merge/config-absent/1.js @@ -1,3 +1,3 @@ module.exports = { - entry: "./some_entry.js", + entry: "./some_entry.js", }; diff --git a/test/build/merge/config-absent/merge-config-absent.test.js b/test/build/merge/config-absent/merge-config-absent.test.js index 78a2dc4cdae..ef15feaac47 100644 --- a/test/build/merge/config-absent/merge-config-absent.test.js +++ b/test/build/merge/config-absent/merge-config-absent.test.js @@ -5,20 +5,20 @@ const path = require("path"); const { run } = require("../../../utils/test-utils"); describe("merge flag configuration", () => { - it("Show warning message when the merge config is absent", async () => { - // 2.js doesn't exist, let's try merging with it - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config", - "./1.js", - "--config", - "./2.js", - "--merge", - ]); + it("Show warning message when the merge config is absent", async () => { + // 2.js doesn't exist, let's try merging with it + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config", + "./1.js", + "--config", + "./2.js", + "--merge", + ]); - expect(exitCode).toEqual(2); - // Since the process will exit, nothing on stdout - expect(stdout).toBeFalsy(); - // Confirm that the user is notified - expect(stderr).toContain(`Failed to load '${path.resolve(__dirname, "./2.js")}' config`); - }); + expect(exitCode).toEqual(2); + // Since the process will exit, nothing on stdout + expect(stdout).toBeFalsy(); + // Confirm that the user is notified + expect(stderr).toContain(`Failed to load '${path.resolve(__dirname, "./2.js")}' config`); + }); }); diff --git a/test/build/merge/config/1.js b/test/build/merge/config/1.js index 75c2976b1f1..43d46e68ad9 100644 --- a/test/build/merge/config/1.js +++ b/test/build/merge/config/1.js @@ -1,10 +1,10 @@ const WebpackCLITestPlugin = require("../../../utils/webpack-cli-test-plugin"); module.exports = { - entry: "./first-entry.js", - mode: "development", - output: { - filename: "first-output.js", - }, - plugins: [new WebpackCLITestPlugin()], + entry: "./first-entry.js", + mode: "development", + output: { + filename: "first-output.js", + }, + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/merge/config/2.js b/test/build/merge/config/2.js index 74ca9242e4f..884b64c4d4d 100644 --- a/test/build/merge/config/2.js +++ b/test/build/merge/config/2.js @@ -1,7 +1,7 @@ module.exports = { - entry: "./second-entry.js", - target: "node", - output: { - filename: "second-output.js", - }, + entry: "./second-entry.js", + target: "node", + output: { + filename: "second-output.js", + }, }; diff --git a/test/build/merge/config/3.js b/test/build/merge/config/3.js index 2b511143d51..7e4ae356f13 100644 --- a/test/build/merge/config/3.js +++ b/test/build/merge/config/3.js @@ -1,6 +1,6 @@ module.exports = { - entry: "./third-entry.js", - output: { - filename: "third-output.js", - }, + entry: "./third-entry.js", + output: { + filename: "third-output.js", + }, }; diff --git a/test/build/merge/config/merge-config.test.js b/test/build/merge/config/merge-config.test.js index 53653068ca3..1df54d8d1ce 100644 --- a/test/build/merge/config/merge-config.test.js +++ b/test/build/merge/config/merge-config.test.js @@ -3,59 +3,55 @@ const { run } = require("../../../utils/test-utils"); describe("merge flag configuration", () => { - it("merges two configurations together", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config", - "./1.js", - "--config", - "./2.js", - "--merge", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("WebpackCLITestPlugin"); // from 1.js - expect(stdout).toContain("second-output.js"); // from 2.js - }); - - it("merges more than two configurations together", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--config", "./1.js", "--config", "./2.js", "--config", "./3.js", "--merge"], - false, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("WebpackCLITestPlugin"); // from 1.js - expect(stdout).toContain("target: 'node'"); // from 2.js - expect(stdout).toContain("third-output.js"); // from 3.js - }); - - it("merges two configurations together with flag alias", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config", - "./1.js", - "--config", - "./2.js", - "-m", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("WebpackCLITestPlugin"); // from 1.js - expect(stdout).toContain("second-output.js"); // from 2.js - }); - - it("fails when there are less than 2 configurations to merge", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--config", - "./1.js", - "--merge", - ]); - - expect(exitCode).toBe(2); - expect(stderr).toContain("At least two configurations are required for merge."); - expect(stdout).toBeFalsy(); - }); + it("merges two configurations together", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config", + "./1.js", + "--config", + "./2.js", + "--merge", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("WebpackCLITestPlugin"); // from 1.js + expect(stdout).toContain("second-output.js"); // from 2.js + }); + + it("merges more than two configurations together", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--config", "./1.js", "--config", "./2.js", "--config", "./3.js", "--merge"], + false, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("WebpackCLITestPlugin"); // from 1.js + expect(stdout).toContain("target: 'node'"); // from 2.js + expect(stdout).toContain("third-output.js"); // from 3.js + }); + + it("merges two configurations together with flag alias", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--config", + "./1.js", + "--config", + "./2.js", + "-m", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("WebpackCLITestPlugin"); // from 1.js + expect(stdout).toContain("second-output.js"); // from 2.js + }); + + it("fails when there are less than 2 configurations to merge", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--config", "./1.js", "--merge"]); + + expect(exitCode).toBe(2); + expect(stderr).toContain("At least two configurations are required for merge."); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/mode/mode-single-arg/mode-single-arg.test.js b/test/build/mode/mode-single-arg/mode-single-arg.test.js index e96aad5796b..630c153be26 100644 --- a/test/build/mode/mode-single-arg/mode-single-arg.test.js +++ b/test/build/mode/mode-single-arg/mode-single-arg.test.js @@ -3,64 +3,64 @@ const { run, isWebpack5 } = require("../../../utils/test-utils"); describe("mode flags", () => { - it("should not set mode=production by default", async () => { - const { exitCode, stderr, stdout } = await run(__dirname); + it("should not set mode=production by default", async () => { + const { exitCode, stderr, stdout } = await run(__dirname); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).not.toContain(`mode: 'production'`); - expect(stdout).toContain( - `The 'mode' option has not been set, webpack will fallback to 'production' for this value.`, - ); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).not.toContain(`mode: 'production'`); + expect(stdout).toContain( + `The 'mode' option has not been set, webpack will fallback to 'production' for this value.`, + ); + }); - it("should load a development config when --mode=development is passed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "development"]); + it("should load a development config when --mode=development is passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "development"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`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", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "production"]); + it("should load a production config when --mode=production is passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "production"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`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", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "none"]); + it("should load a none config when --mode=none is passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "none"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`mode: 'none'`); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`mode: 'none'`); + }); - it("should pick mode form NODE_ENV", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [], { - env: { NODE_ENV: "development" }, - }); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`mode: 'development'`); + it("should pick mode form NODE_ENV", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [], { + env: { NODE_ENV: "development" }, }); - it("should throw error when --mode=abcd is passed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "abcd"]); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`mode: 'development'`); + }); - expect(exitCode).toBe(2); + it("should throw error when --mode=abcd is passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--mode", "abcd"]); - if (isWebpack5) { - expect(stderr).toContain("Invalid value 'abcd' for the '--mode' option"); - expect(stderr).toContain("Expected: 'development | production | none'"); - } else { - expect(stderr).toContain("configuration.mode should be one of these"); - expect(stderr).toContain(`"development" | "production" | "none"`); - } + expect(exitCode).toBe(2); - expect(stdout).toBeFalsy(); - }); + if (isWebpack5) { + expect(stderr).toContain("Invalid value 'abcd' for the '--mode' option"); + expect(stderr).toContain("Expected: 'development | production | none'"); + } else { + expect(stderr).toContain("configuration.mode should be one of these"); + expect(stderr).toContain(`"development" | "production" | "none"`); + } + + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/mode/mode-single-arg/webpack.config.js b/test/build/mode/mode-single-arg/webpack.config.js index 59a9a8c360c..d9851d1d304 100644 --- a/test/build/mode/mode-single-arg/webpack.config.js +++ b/test/build/mode/mode-single-arg/webpack.config.js @@ -1,6 +1,6 @@ const WebpackCLITestPlugin = require("../../../utils/webpack-cli-test-plugin"); module.exports = { - entry: "./src/index.js", - plugins: [new WebpackCLITestPlugin()], + entry: "./src/index.js", + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/mode/mode-with-config/mode-with-config.test.js b/test/build/mode/mode-with-config/mode-with-config.test.js index 9a611a314b2..e9ac27a75b2 100644 --- a/test/build/mode/mode-with-config/mode-with-config.test.js +++ b/test/build/mode/mode-with-config/mode-with-config.test.js @@ -3,117 +3,117 @@ const { run } = require("../../../utils/test-utils"); describe("mode flags with config", () => { - it("should run in production mode when --mode=production is passed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--mode", - "production", - "--config", - "./webpack.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(stdout).toContain(`mode: 'production'`); - }); - - it("should run in development mode when --mode=development is passed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--mode", - "development", - "--config", - "./webpack.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(stdout).toContain(`mode: 'development'`); - }); - - it("should run in none mode when --mode=none is passed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--mode", - "none", - "--config", - "./webpack.config.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - expect(stdout).toContain(`mode: 'none'`); - }); - - it('should use mode from flag over "process.env.NODE_ENV"', async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--mode", "none", "-c", "webpack.config2.js"], - [], - { - NODE_ENV: "production", - }, - ); - - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`mode: 'none'`); - }); - - it("should use mode from config over NODE_ENV", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "webpack.config2.js"]); - - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`mode: 'development'`); - }); - - it("should use mode from config when multiple config are supplied", async () => { - const { exitCode, stdout, stderr } = await run(__dirname, [ - "-c", - "webpack.config3.js", - "-c", - "webpack.config2.js", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`mode: 'development'`); - expect(stdout.match(new RegExp("mode: 'development'", "g")).length).toEqual(1); - }); - - it("mode flag should apply to all configs", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--mode", - "none", - "-c", - "./webpack.config3.js", - "-c", - "./webpack.config2.js", - ]); - - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`mode: 'none'`); - expect(stdout.match(new RegExp("mode: 'none'", "g")).length).toEqual(2); - }); - - it("only config where mode is absent pick up from NODE_ENV", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["-c", "./webpack.config3.js", "-c", "./webpack.config2.js"], - { - env: { - NODE_ENV: "production", - }, - }, - ); - - expect(exitCode).toEqual(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`mode: 'production'`); - expect(stdout).toContain(`mode: 'development'`); - expect(stdout.match(new RegExp("mode: 'production'", "g")).length).toEqual(1); - expect(stdout.match(new RegExp("mode: 'development'", "g")).length).toEqual(1); - }); + it("should run in production mode when --mode=production is passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--mode", + "production", + "--config", + "./webpack.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(stdout).toContain(`mode: 'production'`); + }); + + it("should run in development mode when --mode=development is passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--mode", + "development", + "--config", + "./webpack.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(stdout).toContain(`mode: 'development'`); + }); + + it("should run in none mode when --mode=none is passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--mode", + "none", + "--config", + "./webpack.config.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(stdout).toContain(`mode: 'none'`); + }); + + it('should use mode from flag over "process.env.NODE_ENV"', async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--mode", "none", "-c", "webpack.config2.js"], + [], + { + NODE_ENV: "production", + }, + ); + + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`mode: 'none'`); + }); + + it("should use mode from config over NODE_ENV", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "webpack.config2.js"]); + + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`mode: 'development'`); + }); + + it("should use mode from config when multiple config are supplied", async () => { + const { exitCode, stdout, stderr } = await run(__dirname, [ + "-c", + "webpack.config3.js", + "-c", + "webpack.config2.js", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`mode: 'development'`); + expect(stdout.match(new RegExp("mode: 'development'", "g")).length).toEqual(1); + }); + + it("mode flag should apply to all configs", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--mode", + "none", + "-c", + "./webpack.config3.js", + "-c", + "./webpack.config2.js", + ]); + + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`mode: 'none'`); + expect(stdout.match(new RegExp("mode: 'none'", "g")).length).toEqual(2); + }); + + it("only config where mode is absent pick up from NODE_ENV", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["-c", "./webpack.config3.js", "-c", "./webpack.config2.js"], + { + env: { + NODE_ENV: "production", + }, + }, + ); + + expect(exitCode).toEqual(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`mode: 'production'`); + expect(stdout).toContain(`mode: 'development'`); + expect(stdout.match(new RegExp("mode: 'production'", "g")).length).toEqual(1); + expect(stdout.match(new RegExp("mode: 'development'", "g")).length).toEqual(1); + }); }); diff --git a/test/build/mode/mode-with-config/webpack.config.js b/test/build/mode/mode-with-config/webpack.config.js index d54eae282f5..d8552921b4f 100644 --- a/test/build/mode/mode-with-config/webpack.config.js +++ b/test/build/mode/mode-with-config/webpack.config.js @@ -2,9 +2,9 @@ const path = require("path"); const WebpackCLITestPlugin = require("../../../utils/webpack-cli-test-plugin"); module.exports = { - output: { - path: path.join(__dirname, "dist"), - filename: "[name].js", - }, - plugins: [new WebpackCLITestPlugin()], + output: { + path: path.join(__dirname, "dist"), + filename: "[name].js", + }, + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/mode/mode-with-config/webpack.config2.js b/test/build/mode/mode-with-config/webpack.config2.js index 56e4d9fe88e..98805e42df5 100644 --- a/test/build/mode/mode-with-config/webpack.config2.js +++ b/test/build/mode/mode-with-config/webpack.config2.js @@ -1,6 +1,6 @@ const WebpackCLITestPlugin = require("../../../utils/webpack-cli-test-plugin"); module.exports = { - mode: "development", - plugins: [new WebpackCLITestPlugin()], + mode: "development", + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/mode/mode-with-config/webpack.config3.js b/test/build/mode/mode-with-config/webpack.config3.js index dca1bf8e00c..a559d543954 100644 --- a/test/build/mode/mode-with-config/webpack.config3.js +++ b/test/build/mode/mode-with-config/webpack.config3.js @@ -1,5 +1,5 @@ const WebpackCLITestPlugin = require("../../../utils/webpack-cli-test-plugin"); module.exports = { - plugins: [new WebpackCLITestPlugin()], + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/name/name.test.js b/test/build/name/name.test.js index 9b07d0bb58d..9a37a74c875 100644 --- a/test/build/name/name.test.js +++ b/test/build/name/name.test.js @@ -2,11 +2,11 @@ const { run } = require("../../utils/test-utils"); describe("name flag", () => { - it("should set the flag in the config", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--name", "config-name"]); + it("should set the flag in the config", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--name", "config-name"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("name: 'config-name'"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("name: 'config-name'"); + }); }); diff --git a/test/build/name/webpack.config.js b/test/build/name/webpack.config.js index 5f26f45fe05..f68b5414666 100644 --- a/test/build/name/webpack.config.js +++ b/test/build/name/webpack.config.js @@ -1,5 +1,5 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); module.exports = { - plugins: [new WebpackCLITestPlugin()], + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/node-env/auto-mode.config.js b/test/build/node-env/auto-mode.config.js index 5f26f45fe05..f68b5414666 100644 --- a/test/build/node-env/auto-mode.config.js +++ b/test/build/node-env/auto-mode.config.js @@ -1,5 +1,5 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); module.exports = { - plugins: [new WebpackCLITestPlugin()], + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/node-env/node-env.test.js b/test/build/node-env/node-env.test.js index 479c1d90d7f..35f69d8c94c 100644 --- a/test/build/node-env/node-env.test.js +++ b/test/build/node-env/node-env.test.js @@ -3,66 +3,66 @@ const { run } = require("../../utils/test-utils"); describe("--node-env flag", () => { - it('should set "process.env.NODE_ENV" to "development"', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--node-env", "development"]); + it('should set "process.env.NODE_ENV" to "development"', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--node-env", "development"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("mode: 'development'"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("mode: 'development'"); + }); - it('should set "process.env.NODE_ENV" to "production"', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--node-env", "production"]); + it('should set "process.env.NODE_ENV" to "production"', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--node-env", "production"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("mode: 'production'"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("mode: 'production'"); + }); - it('should set "process.env.NODE_ENV" to "none"', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--node-env", "none"]); + it('should set "process.env.NODE_ENV" to "none"', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--node-env", "none"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("mode: 'none'"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("mode: 'none'"); + }); - it('should set "process.env.NODE_ENV" and the "mode" option to "development"', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--node-env", - "development", - "--config", - "./auto-mode.config.js", - ]); + it('should set "process.env.NODE_ENV" and the "mode" option to "development"', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--node-env", + "development", + "--config", + "./auto-mode.config.js", + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("mode: 'development'"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("mode: 'development'"); + }); - it('should set "process.env.NODE_ENV" and the "mode" option to "production"', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--node-env", - "production", - "--config", - "./auto-mode.config.js", - ]); + it('should set "process.env.NODE_ENV" and the "mode" option to "production"', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--node-env", + "production", + "--config", + "./auto-mode.config.js", + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("mode: 'production'"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("mode: 'production'"); + }); - it('should set "process.env.NODE_ENV" and the "mode" option to "none"', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--node-env", - "none", - "--config", - "./auto-mode.config.js", - ]); + it('should set "process.env.NODE_ENV" and the "mode" option to "none"', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--node-env", + "none", + "--config", + "./auto-mode.config.js", + ]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("mode: 'none'"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("mode: 'none'"); + }); }); diff --git a/test/build/node-env/webpack.config.js b/test/build/node-env/webpack.config.js index 0c4532b82cd..71e8ab21cc3 100644 --- a/test/build/node-env/webpack.config.js +++ b/test/build/node-env/webpack.config.js @@ -1,6 +1,6 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); module.exports = { - mode: process.env.NODE_ENV, - plugins: [new WebpackCLITestPlugin()], + mode: process.env.NODE_ENV, + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/node/node.test.js b/test/build/node/node.test.js index 5689d97b95b..b40bbd4110a 100644 --- a/test/build/node/node.test.js +++ b/test/build/node/node.test.js @@ -3,49 +3,49 @@ const { resolve } = require("path"); const { run } = require("../../utils/test-utils"); describe("node flags", () => { - it("is able to pass the options flags to node js", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--output-path", "./bin"], { - nodeOptions: [ - `--require=${resolve(__dirname, "bootstrap.js")}`, - `--require=${resolve(__dirname, "bootstrap2.js")}`, - ], - }); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("---from bootstrap.js---"); - expect(stdout).toContain("---from bootstrap2.js---"); + it("is able to pass the options flags to node js", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--output-path", "./bin"], { + nodeOptions: [ + `--require=${resolve(__dirname, "bootstrap.js")}`, + `--require=${resolve(__dirname, "bootstrap2.js")}`, + ], }); - it("throws an error on supplying unknown flags", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [], { - nodeOptions: ["--unknown"], - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("---from bootstrap.js---"); + expect(stdout).toContain("---from bootstrap2.js---"); + }); - expect(exitCode).not.toBe(0); - expect(stderr).toContain("bad option"); - expect(stdout).toBeFalsy(); + it("throws an error on supplying unknown flags", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [], { + nodeOptions: ["--unknown"], }); - it("throws an error if no values were supplied with --max-old-space-size", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [], { - nodeOptions: ["--max-old-space-size"], - }); + expect(exitCode).not.toBe(0); + expect(stderr).toContain("bad option"); + expect(stdout).toBeFalsy(); + }); - expect(exitCode).not.toBe(0); - expect(stderr).toContain("value for flag --max-old-space-size"); - expect(stdout).toBeFalsy(); + it("throws an error if no values were supplied with --max-old-space-size", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [], { + nodeOptions: ["--max-old-space-size"], }); - it("throws an error if an illegal value was supplied with --max-old-space-size", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [], { - nodeOptions: ["--max_old_space_size=1024a"], - }); + expect(exitCode).not.toBe(0); + expect(stderr).toContain("value for flag --max-old-space-size"); + expect(stdout).toBeFalsy(); + }); - 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(); + it("throws an error if an illegal value was supplied with --max-old-space-size", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [], { + nodeOptions: ["--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/build/node/webpack.config.js b/test/build/node/webpack.config.js index 2ba79e7a44a..374f907226b 100644 --- a/test/build/node/webpack.config.js +++ b/test/build/node/webpack.config.js @@ -1,9 +1,9 @@ const { resolve } = require("path"); module.exports = { - entry: "./a.js", - output: { - path: resolve(__dirname, "binary"), - filename: "[name].bundle.js", - }, + entry: "./a.js", + output: { + path: resolve(__dirname, "binary"), + filename: "[name].bundle.js", + }, }; diff --git a/test/build/output/output-named-bundles.test.js b/test/build/output/output-named-bundles.test.js index f872fef7790..259b3de6e7b 100644 --- a/test/build/output/output-named-bundles.test.js +++ b/test/build/output/output-named-bundles.test.js @@ -4,58 +4,58 @@ const { resolve } = require("path"); const { run, normalizeStdout, normalizeStderr } = require("../../utils/test-utils"); describe("output flag named bundles", () => { - it("should output file given as flag instead of in configuration", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["-c", resolve(__dirname, "webpack.config.js"), "--output-path", "./binary"], - false, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it("should resolve the path to binary/a.bundle.js as ./binary/a.bundle.js", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["-c", resolve(__dirname, "webpack.config.js"), "--output-path", "binary"], - false, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it("should create multiple bundles with an overriding flag", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["-c", resolve(__dirname, "webpack.single.config.js"), "--output-path", "./bin"], - false, - ); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it("should successfully compile multiple entries", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - resolve(__dirname, "webpack.multiple.config.js"), - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it("should output file in bin directory using default webpack config with warning for empty output value", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--output-path"]); - - expect(exitCode).toEqual(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should output file given as flag instead of in configuration", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["-c", resolve(__dirname, "webpack.config.js"), "--output-path", "./binary"], + false, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("should resolve the path to binary/a.bundle.js as ./binary/a.bundle.js", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["-c", resolve(__dirname, "webpack.config.js"), "--output-path", "binary"], + false, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("should create multiple bundles with an overriding flag", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["-c", resolve(__dirname, "webpack.single.config.js"), "--output-path", "./bin"], + false, + ); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("should successfully compile multiple entries", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.multiple.config.js"), + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("should output file in bin directory using default webpack config with warning for empty output value", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--output-path"]); + + expect(exitCode).toEqual(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); }); diff --git a/test/build/output/webpack.config.js b/test/build/output/webpack.config.js index 14b4f23506b..fbc48300a31 100644 --- a/test/build/output/webpack.config.js +++ b/test/build/output/webpack.config.js @@ -1,10 +1,10 @@ const { resolve } = require("path"); module.exports = { - entry: "./a.js", - mode: "development", - output: { - path: resolve(__dirname, "bin"), - filename: "a.bundle.js", - }, + entry: "./a.js", + mode: "development", + output: { + path: resolve(__dirname, "bin"), + filename: "a.bundle.js", + }, }; diff --git a/test/build/output/webpack.defaults.config.js b/test/build/output/webpack.defaults.config.js index 08608192ceb..b0045b232d4 100644 --- a/test/build/output/webpack.defaults.config.js +++ b/test/build/output/webpack.defaults.config.js @@ -1,7 +1,7 @@ module.exports = { - entry: { - b: "./b.js", - c: "./c.js", - }, - mode: "development", + entry: { + b: "./b.js", + c: "./c.js", + }, + mode: "development", }; diff --git a/test/build/output/webpack.multiple.config.js b/test/build/output/webpack.multiple.config.js index af105fab019..e1995da5a5e 100644 --- a/test/build/output/webpack.multiple.config.js +++ b/test/build/output/webpack.multiple.config.js @@ -1,13 +1,13 @@ const { resolve } = require("path"); module.exports = { - entry: { - b: "./b.js", - c: "./c.js", - }, - output: { - path: resolve(__dirname, "bin"), - filename: "[name].bundle.js", - }, - mode: "development", + entry: { + b: "./b.js", + c: "./c.js", + }, + output: { + path: resolve(__dirname, "bin"), + filename: "[name].bundle.js", + }, + mode: "development", }; diff --git a/test/build/output/webpack.single.config.js b/test/build/output/webpack.single.config.js index af105fab019..e1995da5a5e 100644 --- a/test/build/output/webpack.single.config.js +++ b/test/build/output/webpack.single.config.js @@ -1,13 +1,13 @@ const { resolve } = require("path"); module.exports = { - entry: { - b: "./b.js", - c: "./c.js", - }, - output: { - path: resolve(__dirname, "bin"), - filename: "[name].bundle.js", - }, - mode: "development", + entry: { + b: "./b.js", + c: "./c.js", + }, + output: { + path: resolve(__dirname, "bin"), + filename: "[name].bundle.js", + }, + mode: "development", }; diff --git a/test/build/prefetch/prefetch.test.js b/test/build/prefetch/prefetch.test.js index 8a9b7c91fe7..3b1ca594e63 100644 --- a/test/build/prefetch/prefetch.test.js +++ b/test/build/prefetch/prefetch.test.js @@ -6,44 +6,41 @@ const { run, readFile } = require("../../utils/test-utils"); const rimraf = require("rimraf"); describe("prefetch", () => { - afterEach(() => { - rimraf.sync(join(__dirname, "dist")); - }); - - it("should load the prefetched file", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--prefetch", - "./src/p.js", - "--mode", - "development", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - - const content = await readFile(join(__dirname, "/dist/main.js"), "utf-8"); - - expect(content).not.toContain("// no prefetching"); - }); - - it("should log error when the prefetched file is absent", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--prefetch", - "./src/somefile.js", - ]); - - expect(exitCode).toBe(1); - expect(stderr).toBeFalsy(); - // Should contain the error message - expect(stdout).toContain(`Error: Can't resolve './src/somefile.js'`); - }); - - it("should log error when flag value is not supplied", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--prefetch"]); - - expect(exitCode).toBe(2); - expect(stderr).toContain(`Error: Option '--prefetch ' argument missing`); - expect(stdout).toBeFalsy(); - }); + afterEach(() => { + rimraf.sync(join(__dirname, "dist")); + }); + + it("should load the prefetched file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--prefetch", + "./src/p.js", + "--mode", + "development", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + + const content = await readFile(join(__dirname, "/dist/main.js"), "utf-8"); + + expect(content).not.toContain("// no prefetching"); + }); + + it("should log error when the prefetched file is absent", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--prefetch", "./src/somefile.js"]); + + expect(exitCode).toBe(1); + expect(stderr).toBeFalsy(); + // Should contain the error message + expect(stdout).toContain(`Error: Can't resolve './src/somefile.js'`); + }); + + it("should log error when flag value is not supplied", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--prefetch"]); + + expect(exitCode).toBe(2); + expect(stderr).toContain(`Error: Option '--prefetch ' argument missing`); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/build/progress/progress-flag.test.js b/test/build/progress/progress-flag.test.js index 3ddaf4003f2..2b45d24eb6e 100644 --- a/test/build/progress/progress-flag.test.js +++ b/test/build/progress/progress-flag.test.js @@ -3,49 +3,49 @@ const { run, isWebpack5 } = require("../../utils/test-utils"); describe("progress flag", () => { - it("should show progress", async () => { - const { exitCode, stderr, stdout } = await 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', async () => { - const { exitCode, stderr, stdout } = await 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", async () => { - const { exitCode, stderr, stdout } = await 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", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "webpack.progress.config.js", - "--progress", - ]); - - expect(exitCode).toEqual(0); - expect(stderr).not.toMatch(/\[webpack\.Progress] \d+ ms setup/); - expect(stderr).toContain("[webpack.Progress] 100%"); - expect(stdout).toContain("main.js"); - expect(stdout.match(/ProgressPlugin/g)).toHaveLength(1); - }); + it("should show progress", async () => { + const { exitCode, stderr, stdout } = await 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', async () => { + const { exitCode, stderr, stdout } = await 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", async () => { + const { exitCode, stderr, stdout } = await 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", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + "webpack.progress.config.js", + "--progress", + ]); + + expect(exitCode).toEqual(0); + expect(stderr).not.toMatch(/\[webpack\.Progress] \d+ ms setup/); + expect(stderr).toContain("[webpack.Progress] 100%"); + expect(stdout).toContain("main.js"); + expect(stdout.match(/ProgressPlugin/g)).toHaveLength(1); + }); }); diff --git a/test/build/progress/webpack.progress.config.js b/test/build/progress/webpack.progress.config.js index f5d1aba13c7..0245b0c52de 100644 --- a/test/build/progress/webpack.progress.config.js +++ b/test/build/progress/webpack.progress.config.js @@ -2,5 +2,5 @@ const { ProgressPlugin } = require("webpack"); const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); module.exports = { - plugins: [new ProgressPlugin({}), new WebpackCLITestPlugin()], + plugins: [new ProgressPlugin({}), new WebpackCLITestPlugin()], }; diff --git a/test/build/start-finish-force-log/start-finish-force-log.test.js b/test/build/start-finish-force-log/start-finish-force-log.test.js index c3d79d7c9e6..f42cb6eb019 100644 --- a/test/build/start-finish-force-log/start-finish-force-log.test.js +++ b/test/build/start-finish-force-log/start-finish-force-log.test.js @@ -3,53 +3,53 @@ const { run, runWatch, isWebpack5 } = require("../../utils/test-utils"); describe("start finish force log", () => { - it("start finish force log when env is set", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [], { - env: { WEBPACK_CLI_START_FINISH_FORCE_LOG: true }, - }); - expect(exitCode).toBe(0); - expect(stderr).toContain("Compiler starting..."); - expect(stderr).toContain("Compiler finished"); - const output = isWebpack5 ? "compiled successfully" : "main.js"; - expect(stdout).toContain(output); + it("start finish force log when env is set", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [], { + env: { WEBPACK_CLI_START_FINISH_FORCE_LOG: true }, }); + expect(exitCode).toBe(0); + expect(stderr).toContain("Compiler starting..."); + expect(stderr).toContain("Compiler finished"); + const output = isWebpack5 ? "compiled successfully" : "main.js"; + expect(stdout).toContain(output); + }); - it("should show name of the config", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--name", "log config"], { - env: { WEBPACK_CLI_START_FINISH_FORCE_LOG: true }, - }); - expect(exitCode).toBe(0); - expect(stderr).toContain("Compiler 'log config' starting..."); - expect(stderr).toContain("Compiler 'log config' finished"); - const output = isWebpack5 ? "compiled successfully" : "main.js"; - expect(stdout).toContain(output); + it("should show name of the config", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--name", "log config"], { + env: { WEBPACK_CLI_START_FINISH_FORCE_LOG: true }, }); + expect(exitCode).toBe(0); + expect(stderr).toContain("Compiler 'log config' starting..."); + expect(stderr).toContain("Compiler 'log config' finished"); + const output = isWebpack5 ? "compiled successfully" : "main.js"; + expect(stdout).toContain(output); + }); - it("should work with watch", async () => { - const { stderr, stdout } = await runWatch(__dirname, ["watch"], { - env: { WEBPACK_CLI_START_FINISH_FORCE_LOG: true }, - killString: /Compiler finished/, - }); - expect(stderr).toContain("Compiler starting..."); - expect(stderr).toContain("Compiler finished"); - const output = isWebpack5 ? "compiled successfully" : "main.js"; - expect(stdout).toContain(output); + it("should work with watch", async () => { + const { stderr, stdout } = await runWatch(__dirname, ["watch"], { + env: { WEBPACK_CLI_START_FINISH_FORCE_LOG: true }, + killString: /Compiler finished/, }); + expect(stderr).toContain("Compiler starting..."); + expect(stderr).toContain("Compiler finished"); + const output = isWebpack5 ? "compiled successfully" : "main.js"; + expect(stdout).toContain(output); + }); - it("should work with multi compiler", async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - ["--config", "./webpack.config.array.js"], - { - env: { WEBPACK_CLI_START_FINISH_FORCE_LOG: true }, - }, - ); - expect(exitCode).toBe(0); - expect(stderr).toContain("Compiler 'Gojou' starting..."); - expect(stderr).toContain("Compiler 'Satoru' starting..."); - expect(stderr).toContain("Compiler 'Gojou' finished"); - expect(stderr).toContain("Compiler 'Satoru' finished"); - const output = isWebpack5 ? "compiled successfully" : "main.js"; - expect(stdout).toContain(output); - }); + it("should work with multi compiler", async () => { + const { exitCode, stderr, stdout } = await run( + __dirname, + ["--config", "./webpack.config.array.js"], + { + env: { WEBPACK_CLI_START_FINISH_FORCE_LOG: true }, + }, + ); + expect(exitCode).toBe(0); + expect(stderr).toContain("Compiler 'Gojou' starting..."); + expect(stderr).toContain("Compiler 'Satoru' starting..."); + expect(stderr).toContain("Compiler 'Gojou' finished"); + expect(stderr).toContain("Compiler 'Satoru' finished"); + const output = isWebpack5 ? "compiled successfully" : "main.js"; + expect(stdout).toContain(output); + }); }); diff --git a/test/build/start-finish-force-log/webpack.config.array.js b/test/build/start-finish-force-log/webpack.config.array.js index f7313b8da56..7e00662ff11 100644 --- a/test/build/start-finish-force-log/webpack.config.array.js +++ b/test/build/start-finish-force-log/webpack.config.array.js @@ -1,10 +1,10 @@ module.exports = [ - { - name: "Gojou", - mode: "development", - }, - { - name: "Satoru", - mode: "development", - }, + { + name: "Gojou", + mode: "development", + }, + { + name: "Satoru", + mode: "development", + }, ]; diff --git a/test/build/start-finish-force-log/webpack.config.js b/test/build/start-finish-force-log/webpack.config.js index 11623bb6280..6871a7c4df3 100644 --- a/test/build/start-finish-force-log/webpack.config.js +++ b/test/build/start-finish-force-log/webpack.config.js @@ -1,3 +1,3 @@ module.exports = { - mode: "development", + mode: "development", }; diff --git a/test/build/stats/config-no/no-stats-with-config.test.js b/test/build/stats/config-no/no-stats-with-config.test.js index d42a1f63fff..9096c8476d1 100644 --- a/test/build/stats/config-no/no-stats-with-config.test.js +++ b/test/build/stats/config-no/no-stats-with-config.test.js @@ -3,31 +3,31 @@ const { run, isWebpack5 } = require("../../../utils/test-utils"); describe("stats flag", () => { - it(`should use stats 'detailed' as defined in webpack config`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); + it(`should use stats 'detailed' as defined in webpack config`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); - if (isWebpack5) { - expect(stdout).toContain("preset: 'detailed'"); - } else { - expect(stdout).toContain("entrypoints: true"); - expect(stdout).toContain("logging: true"); - expect(stdout).toContain("maxModules: Infinity"); - } - }); + if (isWebpack5) { + expect(stdout).toContain("preset: 'detailed'"); + } else { + expect(stdout).toContain("entrypoints: true"); + expect(stdout).toContain("logging: true"); + expect(stdout).toContain("maxModules: Infinity"); + } + }); - it(`should use --no-stats and override value in config`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--no-stats"]); + it(`should use --no-stats and override value in config`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--no-stats"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); - if (isWebpack5) { - expect(stdout).toContain("preset: 'none'"); - } else { - expect(stdout).toContain("all: false"); - } - }); + if (isWebpack5) { + expect(stdout).toContain("preset: 'none'"); + } else { + expect(stdout).toContain("all: false"); + } + }); }); diff --git a/test/build/stats/config-no/webpack.config.js b/test/build/stats/config-no/webpack.config.js index f4eea6318f7..1f34c317122 100644 --- a/test/build/stats/config-no/webpack.config.js +++ b/test/build/stats/config-no/webpack.config.js @@ -1,8 +1,8 @@ const WebpackCLITestPlugin = require("../../../utils/webpack-cli-test-plugin"); module.exports = { - mode: "development", - entry: "./main.js", - stats: "detailed", - plugins: [new WebpackCLITestPlugin()], + mode: "development", + entry: "./main.js", + stats: "detailed", + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/stats/config/stats.test.js b/test/build/stats/config/stats.test.js index 912c10f38d3..1781ef7c9ae 100644 --- a/test/build/stats/config/stats.test.js +++ b/test/build/stats/config/stats.test.js @@ -6,64 +6,64 @@ const { run, isWebpack5 } = require("../../../utils/test-utils"); const statsPresets = ["detailed", "errors-only", "errors-warnings", "minimal", "verbose", "none"]; if (isWebpack5) { - statsPresets.push("summary"); + statsPresets.push("summary"); } describe("stats flag with config", () => { - it("should compile without stats flag", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); + it("should compile without stats flag", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); - if (isWebpack5) { - expect(stdout).toContain("preset: 'normal'"); - } else { - expect(stdout).toContain("stats: 'normal'"); - } - }); + if (isWebpack5) { + expect(stdout).toContain("preset: 'normal'"); + } else { + expect(stdout).toContain("stats: 'normal'"); + } + }); - for (const preset of statsPresets) { - it(`should override 'noramal' value in config with "${preset}"`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--stats", `${preset}`]); + for (const preset of statsPresets) { + it(`should override 'noramal' value in config with "${preset}"`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--stats", `${preset}`]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); - if (isWebpack5) { - expect(stdout).toContain(`preset: '${preset}'`); - } else { - switch (preset) { - case "normal": - expect(stdout).toContain("stats:"); - break; - case "detailed": - expect(stdout).toContain("entrypoints: true"); - expect(stdout).toContain("errorDetails: true"); - break; - case "errors-only": - expect(stdout).toContain("all: false"); - expect(stdout).toContain("errors: true"); - break; - case "errors-warnings": - expect(stdout).toContain("all: false"); - expect(stdout).toContain("errors: true"); - expect(stdout).toContain("warnings: true"); - break; - case "minimal": - expect(stdout).toContain("modules: true"); - expect(stdout).toContain("maxModules: 0"); - break; - case "verbose": - expect(stdout).toContain("logging: 'verbose'"); - break; - case "none": - expect(stdout).toContain("all: false"); - break; - default: - expect(stdout).toContain(`preset: '${preset}'`); - } - } - }); - } + if (isWebpack5) { + expect(stdout).toContain(`preset: '${preset}'`); + } else { + switch (preset) { + case "normal": + expect(stdout).toContain("stats:"); + break; + case "detailed": + expect(stdout).toContain("entrypoints: true"); + expect(stdout).toContain("errorDetails: true"); + break; + case "errors-only": + expect(stdout).toContain("all: false"); + expect(stdout).toContain("errors: true"); + break; + case "errors-warnings": + expect(stdout).toContain("all: false"); + expect(stdout).toContain("errors: true"); + expect(stdout).toContain("warnings: true"); + break; + case "minimal": + expect(stdout).toContain("modules: true"); + expect(stdout).toContain("maxModules: 0"); + break; + case "verbose": + expect(stdout).toContain("logging: 'verbose'"); + break; + case "none": + expect(stdout).toContain("all: false"); + break; + default: + expect(stdout).toContain(`preset: '${preset}'`); + } + } + }); + } }); diff --git a/test/build/stats/config/webpack.config.js b/test/build/stats/config/webpack.config.js index be63b5f8d22..a444c7d840b 100644 --- a/test/build/stats/config/webpack.config.js +++ b/test/build/stats/config/webpack.config.js @@ -1,8 +1,8 @@ const WebpackCLITestPlugin = require("../../../utils/webpack-cli-test-plugin"); module.exports = { - mode: "development", - entry: "./index.js", - stats: "normal", - plugins: [new WebpackCLITestPlugin()], + mode: "development", + entry: "./index.js", + stats: "normal", + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/stats/flags/stats.test.js b/test/build/stats/flags/stats.test.js index 5f2e652ee98..61a54ada27e 100644 --- a/test/build/stats/flags/stats.test.js +++ b/test/build/stats/flags/stats.test.js @@ -3,95 +3,95 @@ const { run, isWebpack5, normalizeStderr, normalizeStdout } = require("../../../utils/test-utils"); const presets = [ - "normal", - "detailed", - "errors-only", - "errors-warnings", - "minimal", - "verbose", - "none", + "normal", + "detailed", + "errors-only", + "errors-warnings", + "minimal", + "verbose", + "none", ]; if (isWebpack5) { - presets.push("summary"); + presets.push("summary"); } describe("stats flag", () => { - for (const preset of presets) { - it(`should accept --stats "${preset}"`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--stats", `${preset}`]); + for (const preset of presets) { + it(`should accept --stats "${preset}"`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--stats", `${preset}`]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); - if (isWebpack5) { - expect(stdout).toContain(`preset: '${preset}'`); - } else { - switch (preset) { - case "normal": - expect(stdout).toContain("stats:"); - break; - case "detailed": - expect(stdout).toContain("entrypoints: true"); - expect(stdout).toContain("errorDetails: true"); - break; - case "errors-only": - expect(stdout).toContain("all: false"); - expect(stdout).toContain("errors: true"); - break; - case "errors-warnings": - expect(stdout).toContain("all: false"); - expect(stdout).toContain("errors: true"); - expect(stdout).toContain("warnings: true"); - break; - case "minimal": - expect(stdout).toContain("modules: true"); - expect(stdout).toContain("maxModules: 0"); - break; - case "verbose": - expect(stdout).toContain("logging: 'verbose'"); - break; - case "none": - expect(stdout).toContain("all: false"); - break; - default: - expect(stdout).toContain(`preset: '${preset}'`); - } - } - }); - } - - it("should accept stats as boolean", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--stats"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - - if (isWebpack5) { - expect(stdout).toContain("preset: 'normal'"); - } else { + if (isWebpack5) { + expect(stdout).toContain(`preset: '${preset}'`); + } else { + switch (preset) { + case "normal": expect(stdout).toContain("stats:"); + break; + case "detailed": + expect(stdout).toContain("entrypoints: true"); + expect(stdout).toContain("errorDetails: true"); + break; + case "errors-only": + expect(stdout).toContain("all: false"); + expect(stdout).toContain("errors: true"); + break; + case "errors-warnings": + expect(stdout).toContain("all: false"); + expect(stdout).toContain("errors: true"); + expect(stdout).toContain("warnings: true"); + break; + case "minimal": + expect(stdout).toContain("modules: true"); + expect(stdout).toContain("maxModules: 0"); + break; + case "verbose": + expect(stdout).toContain("logging: 'verbose'"); + break; + case "none": + expect(stdout).toContain("all: false"); + break; + default: + expect(stdout).toContain(`preset: '${preset}'`); } + } }); + } - it("should accept --no-stats as boolean", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--no-stats"]); + it("should accept stats as boolean", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--stats"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); - if (isWebpack5) { - expect(stdout).toContain("preset: 'none'"); - } else { - expect(stdout).toContain("all: false"); - } - }); + if (isWebpack5) { + expect(stdout).toContain("preset: 'normal'"); + } else { + expect(stdout).toContain("stats:"); + } + }); - it("should log error when an unknown flag stats value is passed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--stats", "foo"]); + it("should accept --no-stats as boolean", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--no-stats"]); - expect(exitCode).toEqual(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + + if (isWebpack5) { + expect(stdout).toContain("preset: 'none'"); + } else { + expect(stdout).toContain("all: false"); + } + }); + + it("should log error when an unknown flag stats value is passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--stats", "foo"]); + + expect(exitCode).toEqual(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); }); diff --git a/test/build/stats/flags/webpack.config.js b/test/build/stats/flags/webpack.config.js index eb5656d862a..803eb91035c 100644 --- a/test/build/stats/flags/webpack.config.js +++ b/test/build/stats/flags/webpack.config.js @@ -1,7 +1,7 @@ const WebpackCLITestPlugin = require("../../../utils/webpack-cli-test-plugin"); module.exports = { - mode: "development", - entry: "./index.js", - plugins: [new WebpackCLITestPlugin()], + mode: "development", + entry: "./index.js", + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/target/flag-test/target-flag.test.js b/test/build/target/flag-test/target-flag.test.js index 71b53e3515f..8ac054ca794 100644 --- a/test/build/target/flag-test/target-flag.test.js +++ b/test/build/target/flag-test/target-flag.test.js @@ -2,111 +2,111 @@ const { run, isWebpack5, normalizeStdout, normalizeStderr } = require("../../../utils/test-utils"); const targetValues = [ - "web", - "webworker", - "node", - "async-node", - "node-webkit", - "electron-main", - "electron-renderer", - "electron-preload", + "web", + "webworker", + "node", + "async-node", + "node-webkit", + "electron-main", + "electron-renderer", + "electron-preload", ]; describe("--target flag", () => { - targetValues.forEach((val) => { - it(`should accept ${val} with --target flag`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--target", `${val}`]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - - if (isWebpack5) { - expect(stdout).toContain(`target: [ '${val}' ]`); - } else { - expect(stdout).toContain(`target: '${val}'`); - } - }); - - it(`should accept ${val} with -t alias`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-t", `${val}`]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - - if (isWebpack5) { - expect(stdout).toContain(`target: [ '${val}' ]`); - } else { - expect(stdout).toContain(`target: '${val}'`); - } - }); + targetValues.forEach((val) => { + it(`should accept ${val} with --target flag`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--target", `${val}`]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + + if (isWebpack5) { + expect(stdout).toContain(`target: [ '${val}' ]`); + } else { + expect(stdout).toContain(`target: '${val}'`); + } }); - it(`should throw error with invalid value for --target`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--target", "invalid"]); + it(`should accept ${val} with -t alias`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-t", `${val}`]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + + if (isWebpack5) { + expect(stdout).toContain(`target: [ '${val}' ]`); + } else { + expect(stdout).toContain(`target: '${val}'`); + } + }); + }); + + it(`should throw error with invalid value for --target`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--target", "invalid"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + if (isWebpack5) { + it("should allow multiple targets", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--target", + "node", + "--target", + "async-node", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`target: [ 'node', 'async-node' ]`); + }); + + it("should throw an error for invalid target in multiple syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--target", + "node", + "--target", + "invalid", + ]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should throw an error for incompatible multiple targets", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--target", + "node", + "--target", + "web", + ]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); }); - if (isWebpack5) { - it("should allow multiple targets", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--target", - "node", - "--target", - "async-node", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`target: [ 'node', 'async-node' ]`); - }); - - it("should throw an error for invalid target in multiple syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--target", - "node", - "--target", - "invalid", - ]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it("should throw an error for incompatible multiple targets", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--target", - "node", - "--target", - "web", - ]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it("should reset target from node to async-node with --target-reset", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--target-reset", - "--target", - "async-node", - ]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toContain(`target: [ 'async-node' ]`); - }); - - it("should throw error if target is an empty array", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--target-reset"]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - } + it("should reset target from node to async-node with --target-reset", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--target-reset", + "--target", + "async-node", + ]); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toContain(`target: [ 'async-node' ]`); + }); + + it("should throw error if target is an empty array", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--target-reset"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + } }); diff --git a/test/build/target/flag-test/webpack.config.js b/test/build/target/flag-test/webpack.config.js index 3ef6a20b72d..10b0c480b9e 100644 --- a/test/build/target/flag-test/webpack.config.js +++ b/test/build/target/flag-test/webpack.config.js @@ -1,8 +1,8 @@ const WebpackCLITestPlugin = require("../../../utils/webpack-cli-test-plugin"); module.exports = { - entry: "./index.js", - mode: "development", - target: "node", - plugins: [new WebpackCLITestPlugin()], + entry: "./index.js", + mode: "development", + target: "node", + plugins: [new WebpackCLITestPlugin()], }; diff --git a/test/build/target/node/node-test.test.js b/test/build/target/node/node-test.test.js index 95dcc929d54..e8dc385ee3e 100644 --- a/test/build/target/node/node-test.test.js +++ b/test/build/target/node/node-test.test.js @@ -2,11 +2,11 @@ const { run, normalizeStderr } = require("../../../utils/test-utils"); describe("Node target", () => { - it("should emit the correct code", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); + it("should emit the correct code", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toBeTruthy(); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/build/target/node/webpack.config.js b/test/build/target/node/webpack.config.js index 5742478fdf2..78f4aced0bb 100644 --- a/test/build/target/node/webpack.config.js +++ b/test/build/target/node/webpack.config.js @@ -1,5 +1,5 @@ module.exports = { - entry: "./main.js", - mode: "development", - target: "node", + entry: "./main.js", + mode: "development", + target: "node", }; diff --git a/test/build/unknown/unknown.test.js b/test/build/unknown/unknown.test.js index 5569953bd61..2793b098d08 100644 --- a/test/build/unknown/unknown.test.js +++ b/test/build/unknown/unknown.test.js @@ -3,200 +3,197 @@ const { run, normalizeStdout, normalizeStderr } = require("../../utils/test-utils"); describe("unknown behaviour", () => { - it("should log an error if an unknown flag is passed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--unknown"]); + it("should log an error if an unknown flag is passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--unknown"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("should log an error if an unknown flag is passed #2", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-u"]); + it("should log an error if an unknown flag is passed #2", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-u"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("should log an error if an unknown flag is passed and includes =", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--unknown=foo"]); + it("should log an error if an unknown flag is passed and includes =", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--unknown=foo"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("should log an error if an unknown flag is passed #3", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-u", "--unknown"]); + it("should log an error if an unknown flag is passed #3", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-u", "--unknown"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("should log an error if an unknown flag is passed #4", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-u", "-u"]); + it("should log an error if an unknown flag is passed #4", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-u", "-u"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("should log an error if an unknown flag is passed #5", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-u", "foo"]); + it("should log an error if an unknown flag is passed #5", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-u", "foo"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it('should log an error if an unknown flag is passed using "bundle" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["bundle", "--unknown"]); + it('should log an error if an unknown flag is passed using "bundle" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["bundle", "--unknown"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it('should log an error if an unknown flag is passed using "b" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["b", "--unknown"]); + it('should log an error if an unknown flag is passed using "b" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["b", "--unknown"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it('should log an error if an unknown flag is passed using "bundle" command #2', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--unknown", "bundle"]); + it('should log an error if an unknown flag is passed using "bundle" command #2', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--unknown", "bundle"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it('should log an error if an unknown flag is passed using "info" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--unknown"]); + it('should log an error if an unknown flag is passed using "info" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--unknown"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it('should log an error if an unknown flag is passed using "i" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["i", "--unknown"]); + it('should log an error if an unknown flag is passed using "i" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["i", "--unknown"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it('should log an error if an unknown flag is passed using "i" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--unknown", "i"]); + it('should log an error if an unknown flag is passed using "i" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--unknown", "i"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it("should log error and respect --color flag", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--unknown", "--color"], { - env: { FORCE_COLOR: true }, - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(stderr).toMatchSnapshot("stderr"); - expect(stdout).toMatchSnapshot("stdout"); + it("should log error and respect --color flag", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--unknown", "--color"], { + env: { FORCE_COLOR: true }, }); - it("should log error for unknown flag and respect --no-color", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--unknown", "--no-color"], { - env: { FORCE_COLOR: true }, - }); + expect(exitCode).toBe(2); + expect(stderr).toMatchSnapshot("stderr"); + expect(stdout).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(stderr).toMatchSnapshot("stderr"); - expect(stdout).toMatchSnapshot("stdout"); + it("should log error for unknown flag and respect --no-color", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--unknown", "--no-color"], { + env: { FORCE_COLOR: true }, }); - it("should log an error if an unknown flag is passed and suggests the closest match to an unknown flag", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--entyr", "./a.js"]); + expect(exitCode).toBe(2); + expect(stderr).toMatchSnapshot("stderr"); + expect(stdout).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should log an error if an unknown flag is passed and suggests the closest match to an unknown flag", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--entyr", "./a.js"]); - it("should log an error if an unknown flag is passed and suggests the closest match to an unknown flag #2", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--output-fileneme", - "[name].js", - ]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should log an error if an unknown flag is passed and suggests the closest match to an unknown flag #2", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--output-fileneme", "[name].js"]); - it("should log an error if an unknown flag is passed and suggests the closest match to an unknown flag #3", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "--output-library-auxiliary-comment-commnjs", - ]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should log an error if an unknown flag is passed and suggests the closest match to an unknown flag #3", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "--output-library-auxiliary-comment-commnjs", + ]); - it('should log an error if an unknown flag is passed and suggests the closest match to an unknown flag using "bundle" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["bundle", "--entyr", "./a.js"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it('should log an error if an unknown flag is passed and suggests the closest match to an unknown flag using "bundle" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["bundle", "--entyr", "./a.js"]); - it('should log an error if an unknown flag is passed and suggests the closest match to an unknown flag using "b" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["b", "--entyr", "./a.js"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it('should log an error if an unknown flag is passed and suggests the closest match to an unknown flag using "b" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["b", "--entyr", "./a.js"]); - it('should log an error if an unknown flag is passed and suggests the closest match to an unknown flag using "info" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--outpyt"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it('should log an error if an unknown flag is passed and suggests the closest match to an unknown flag using "info" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--outpyt"]); - it('should log an error if an unknown flag is passed and suggests the closest match to an unknown flag using "i" command', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["i", "--outpyt"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it('should log an error if an unknown flag is passed and suggests the closest match to an unknown flag using "i" command', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["i", "--outpyt"]); - it("should log error if an unknown command passed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["qqq"], true, [], { - TERM_PROGRAM: false, - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + it("should log error if an unknown command passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["qqq"], true, [], { + TERM_PROGRAM: false, }); - it("should log error and provide suggestion if an unknown command passed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["serverr"], true, [], { - TERM_PROGRAM: false, - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + it("should log error and provide suggestion if an unknown command passed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["serverr"], true, [], { + TERM_PROGRAM: false, }); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); }); diff --git a/test/build/zero-config/entry-absent/zero-config.test.js b/test/build/zero-config/entry-absent/zero-config.test.js index 715f360a0dd..3baa7cacbdd 100644 --- a/test/build/zero-config/entry-absent/zero-config.test.js +++ b/test/build/zero-config/entry-absent/zero-config.test.js @@ -3,12 +3,12 @@ const { run } = require("../../../utils/test-utils"); describe("Zero Config tests", () => { - it("runs when config and entry are both absent", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); + it("runs when config and entry are both absent", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); - expect(exitCode).toBe(1); - expect(stderr).toBeFalsy(); - // 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(); + // Entry file is absent, should log the Error from the compiler + expect(stdout).toContain("Error: Can't resolve './src'"); + }); }); diff --git a/test/build/zero-config/entry-present/zero-config.test.js b/test/build/zero-config/entry-present/zero-config.test.js index 65520333582..22edccd0545 100644 --- a/test/build/zero-config/entry-present/zero-config.test.js +++ b/test/build/zero-config/entry-present/zero-config.test.js @@ -1,14 +1,14 @@ const { run } = require("../../../utils/test-utils"); describe("Zero Config tests", () => { - it("runs when no config is supplied but entry is present", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, []); + it("runs when no config is supplied but entry is present", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, []); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - // Should be able to find the entry file - expect(stdout).toContain("./src/index.js"); - // Should output at the default output dir and filename - expect(stdout).toContain("main.js"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + // Should be able to find the entry file + expect(stdout).toContain("./src/index.js"); + // Should output at the default output dir and filename + expect(stdout).toContain("main.js"); + }); }); diff --git a/test/configtest/with-config-path/basic.config.js b/test/configtest/with-config-path/basic.config.js index a700197b9ca..9c410e6fac1 100644 --- a/test/configtest/with-config-path/basic.config.js +++ b/test/configtest/with-config-path/basic.config.js @@ -1,5 +1,5 @@ module.exports = { - mode: "development", - target: "node", - stats: "verbose", + mode: "development", + target: "node", + stats: "verbose", }; diff --git a/test/configtest/with-config-path/error.config.js b/test/configtest/with-config-path/error.config.js index d4b60668433..f5c90a7089b 100644 --- a/test/configtest/with-config-path/error.config.js +++ b/test/configtest/with-config-path/error.config.js @@ -1,5 +1,5 @@ module.exports = { - mode: "dev", // error - target: "node", - stats: "normal", + mode: "dev", // error + target: "node", + stats: "normal", }; diff --git a/test/configtest/with-config-path/with-config-path.test.js b/test/configtest/with-config-path/with-config-path.test.js index 530ce490fee..1035d2ad3c1 100644 --- a/test/configtest/with-config-path/with-config-path.test.js +++ b/test/configtest/with-config-path/with-config-path.test.js @@ -3,52 +3,46 @@ const { run, normalizeStderr, normalizeStdout } = require("../../utils/test-utils"); describe("'configtest' command with the configuration path option", () => { - it("should validate webpack config successfully", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "configtest", - "./basic.config.js", - ]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it("should throw validation error", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "configtest", - "./error.config.js", - ]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it("should throw syntax error", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "configtest", - "./syntax-error.config.js", - ]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it(`should validate the config with alias 't'`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["t", "./error.config.js"]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it("should throw error if configuration does not exist", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["configtest", "./a.js"]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr).split("\n")[0]).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should validate webpack config successfully", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["configtest", "./basic.config.js"]); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should throw validation error", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["configtest", "./error.config.js"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should throw syntax error", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "configtest", + "./syntax-error.config.js", + ]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it(`should validate the config with alias 't'`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["t", "./error.config.js"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should throw error if configuration does not exist", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["configtest", "./a.js"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr).split("\n")[0]).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); }); diff --git a/test/configtest/without-config-path-custom-extension/without-config-path.test.js b/test/configtest/without-config-path-custom-extension/without-config-path.test.js index e0e61700a66..64a1f3f151b 100644 --- a/test/configtest/without-config-path-custom-extension/without-config-path.test.js +++ b/test/configtest/without-config-path-custom-extension/without-config-path.test.js @@ -3,11 +3,11 @@ const { run, normalizeStderr, normalizeStdout } = require("../../utils/test-utils"); describe("'configtest' command without the configuration path option", () => { - it.only("should validate default configuration", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["configtest"]); + it.only("should validate default configuration", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["configtest"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); }); diff --git a/test/configtest/without-config-path-error/webpack.config.js b/test/configtest/without-config-path-error/webpack.config.js index 4d2f03d5c8c..6a97ab333f2 100644 --- a/test/configtest/without-config-path-error/webpack.config.js +++ b/test/configtest/without-config-path-error/webpack.config.js @@ -1,5 +1,5 @@ module.exports = { - mode: "invalid", - target: "node", - stats: "verbose", + mode: "invalid", + target: "node", + stats: "verbose", }; diff --git a/test/configtest/without-config-path-error/without-config-path-error.test.js b/test/configtest/without-config-path-error/without-config-path-error.test.js index a5502bc2622..28b788c516c 100644 --- a/test/configtest/without-config-path-error/without-config-path-error.test.js +++ b/test/configtest/without-config-path-error/without-config-path-error.test.js @@ -3,11 +3,11 @@ const { run, normalizeStderr, normalizeStdout } = require("../../utils/test-utils"); describe("'configtest' command without the configuration path option", () => { - it.only("should validate default configuration", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["configtest"]); + it.only("should validate default configuration", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["configtest"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); }); diff --git a/test/configtest/without-config-path-multi-compiler-mode/webpack.config.js b/test/configtest/without-config-path-multi-compiler-mode/webpack.config.js index 7390a6c5edd..ad40124f17e 100644 --- a/test/configtest/without-config-path-multi-compiler-mode/webpack.config.js +++ b/test/configtest/without-config-path-multi-compiler-mode/webpack.config.js @@ -1,12 +1,12 @@ module.exports = [ - { - mode: "development", - target: "node", - stats: "verbose", - }, - { - mode: "development", - target: "node", - stats: "verbose", - }, + { + mode: "development", + target: "node", + stats: "verbose", + }, + { + mode: "development", + target: "node", + stats: "verbose", + }, ]; diff --git a/test/configtest/without-config-path-multi-compiler-mode/without-config-path-multi-compiler-mode.test.js b/test/configtest/without-config-path-multi-compiler-mode/without-config-path-multi-compiler-mode.test.js index e0e61700a66..64a1f3f151b 100644 --- a/test/configtest/without-config-path-multi-compiler-mode/without-config-path-multi-compiler-mode.test.js +++ b/test/configtest/without-config-path-multi-compiler-mode/without-config-path-multi-compiler-mode.test.js @@ -3,11 +3,11 @@ const { run, normalizeStderr, normalizeStdout } = require("../../utils/test-utils"); describe("'configtest' command without the configuration path option", () => { - it.only("should validate default configuration", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["configtest"]); + it.only("should validate default configuration", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["configtest"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); }); diff --git a/test/configtest/without-config-path-no-configuration/without-config-path-no-configuration.test.js b/test/configtest/without-config-path-no-configuration/without-config-path-no-configuration.test.js index a5502bc2622..28b788c516c 100644 --- a/test/configtest/without-config-path-no-configuration/without-config-path-no-configuration.test.js +++ b/test/configtest/without-config-path-no-configuration/without-config-path-no-configuration.test.js @@ -3,11 +3,11 @@ const { run, normalizeStderr, normalizeStdout } = require("../../utils/test-utils"); describe("'configtest' command without the configuration path option", () => { - it.only("should validate default configuration", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["configtest"]); + it.only("should validate default configuration", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["configtest"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); }); diff --git a/test/configtest/without-config-path/webpack.config.js b/test/configtest/without-config-path/webpack.config.js index a700197b9ca..9c410e6fac1 100644 --- a/test/configtest/without-config-path/webpack.config.js +++ b/test/configtest/without-config-path/webpack.config.js @@ -1,5 +1,5 @@ module.exports = { - mode: "development", - target: "node", - stats: "verbose", + mode: "development", + target: "node", + stats: "verbose", }; diff --git a/test/configtest/without-config-path/without-config-path.test.js b/test/configtest/without-config-path/without-config-path.test.js index e0e61700a66..64a1f3f151b 100644 --- a/test/configtest/without-config-path/without-config-path.test.js +++ b/test/configtest/without-config-path/without-config-path.test.js @@ -3,11 +3,11 @@ const { run, normalizeStderr, normalizeStdout } = require("../../utils/test-utils"); describe("'configtest' command without the configuration path option", () => { - it.only("should validate default configuration", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["configtest"]); + it.only("should validate default configuration", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["configtest"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); }); diff --git a/test/help/help.test.js b/test/help/help.test.js index ee29dcf5f32..7fe9b8ed656 100644 --- a/test/help/help.test.js +++ b/test/help/help.test.js @@ -1,470 +1,460 @@ "use strict"; const { - run, - normalizeStderr, - normalizeStdout, - isWebpack5, - isDevServer4, + run, + normalizeStderr, + normalizeStdout, + isWebpack5, + isDevServer4, } = require("../utils/test-utils"); describe("help", () => { - it('should show help information using the "--help" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--help"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + it('should show help information using the "--help" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--help"]); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it.skip('should show help information using the "--help" option with the "verbose" value', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "verbose"]); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it.skip('should show help information using the "--help" option with the "verbose" value #2', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--help=verbose"]); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should show help information using command syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help"]); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it('should show the same information using the "--help" option and command syntax', async () => { + const { + exitCode: exitCodeFromOption, + stderr: stderrFromOption, + stdout: stdoutFromOption, + } = await run(__dirname, ["--help"]); + const { + exitCode: exitCodeFromCommandSyntax, + stderr: stderrFromCommandSyntax, + stdout: stdoutFromCommandSyntax, + } = await run(__dirname, ["help"]); + + expect(exitCodeFromOption).toBe(0); + expect(exitCodeFromCommandSyntax).toBe(0); + expect(normalizeStderr(stderrFromOption)).toMatchSnapshot("stderr from option"); + expect(normalizeStderr(stderrFromCommandSyntax)).toMatchSnapshot("stderr from command syntax"); + expect(stdoutFromOption).toBe(stdoutFromCommandSyntax); + expect(normalizeStdout(stdoutFromOption)).toMatchSnapshot("stdout from option"); + expect(normalizeStdout(stdoutFromCommandSyntax)).toMatchSnapshot("stdout from command sytnax"); + }); + + it('should show help information and respect the "--color" flag using the "--help" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "--color"], { + env: { FORCE_COLOR: true }, + }); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toContain("\x1b[1m"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it('should show help information and respect the "--no-color" flag using the "--help" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "--no-color"], { + env: { FORCE_COLOR: true }, + }); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + const commands = [ + { + name: "init", + alias: ["create", "new", "c", "n"], + }, + { + name: "info", + alias: "i", + }, + { + name: "loader", + alias: "l", + }, + { + name: "migrate", + alias: "m", + }, + { + name: "plugin", + alias: "p", + }, + { + name: "configtest", + alias: "t", + }, + { + name: "watch", + alias: "w", + }, + { + name: "serve", + alias: ["server", "s"], + }, + { + name: "build", + alias: "b", + }, + ]; + + commands.forEach(({ name, alias }) => { + // TODO fix it + const needSkip = name === "serve" && isDevServer4; + + it(`should show help information for '${name}' command using the "--help" option`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [name, "--help"]); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (!needSkip) { expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } }); - it.skip('should show help information using the "--help" option with the "verbose" value', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "verbose"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it.skip(`should show help information for '${name}' command using the "--help verbose" option`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [name, "--help", "verbose"]); - it.skip('should show help information using the "--help" option with the "verbose" value #2', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--help=verbose"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + if (!needSkip) { expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } }); - it("should show help information using command syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help"]); + it(`should show help information for '${name}' command using command syntax`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", name]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - it('should show the same information using the "--help" option and command syntax', async () => { - const { - exitCode: exitCodeFromOption, - stderr: stderrFromOption, - stdout: stdoutFromOption, - } = await run(__dirname, ["--help"]); - const { - exitCode: exitCodeFromCommandSyntax, - stderr: stderrFromCommandSyntax, - stdout: stdoutFromCommandSyntax, - } = await run(__dirname, ["help"]); - - expect(exitCodeFromOption).toBe(0); - expect(exitCodeFromCommandSyntax).toBe(0); - expect(normalizeStderr(stderrFromOption)).toMatchSnapshot("stderr from option"); - expect(normalizeStderr(stderrFromCommandSyntax)).toMatchSnapshot( - "stderr from command syntax", - ); - expect(stdoutFromOption).toBe(stdoutFromCommandSyntax); - expect(normalizeStdout(stdoutFromOption)).toMatchSnapshot("stdout from option"); - expect(normalizeStdout(stdoutFromCommandSyntax)).toMatchSnapshot( - "stdout from command sytnax", - ); - }); - - it('should show help information and respect the "--color" flag using the "--help" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "--color"], { - env: { FORCE_COLOR: true }, - }); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toContain("\x1b[1m"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it('should show help information and respect the "--no-color" flag using the "--help" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "--no-color"], { - env: { FORCE_COLOR: true }, - }); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + if (!needSkip) { expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } }); - const commands = [ - { - name: "init", - alias: ["create", "new", "c", "n"], - }, - { - name: "info", - alias: "i", - }, - { - name: "loader", - alias: "l", - }, - { - name: "migrate", - alias: "m", - }, - { - name: "plugin", - alias: "p", - }, - { - name: "configtest", - alias: "t", - }, - { - name: "watch", - alias: "w", - }, - { - name: "serve", - alias: ["server", "s"], - }, - { - name: "build", - alias: "b", - }, - ]; - - commands.forEach(({ name, alias }) => { - // TODO fix it - const needSkip = name === "serve" && isDevServer4; - - it(`should show help information for '${name}' command using the "--help" option`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [name, "--help"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (!needSkip) { - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - } - }); - - it.skip(`should show help information for '${name}' command using the "--help verbose" option`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [name, "--help", "verbose"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (!needSkip) { - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - } - }); - - it(`should show help information for '${name}' command using command syntax`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", name]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (!needSkip) { - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - } - }); - - it(`should show help information for '${name}' and respect the "--color" flag using the "--help" option`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [name, "--help", "--color"], { - env: { FORCE_COLOR: true }, - }); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toContain("\x1b[1m"); - - if (!needSkip) { - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - } - }); - - it(`should show help information for '${name}' and respect the "--no-color" flag using the "--help" option`, async () => { - const { exitCode, stderr, stdout } = await run( - __dirname, - [name, "--help", "--no-color"], - { env: { FORCE_COLOR: true } }, - ); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).not.toContain("\x1b[1m"); - - if (!needSkip) { - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - } - }); - - const alises = Array.isArray(alias) ? alias : [alias]; - - alises.forEach((alias) => { - it(`should show help information for '${alias}' command using the "--help" option`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [alias, "--help"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (!needSkip) { - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - } - }); - - it.skip(`should show help information for '${alias}' command using the "--help verbose" option`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - alias, - "--help", - "verbose", - ]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (!needSkip) { - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - } - }); - - it(`should show help information for '${alias}' command using command syntax`, async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", alias]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (!needSkip) { - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - } - }); - }); - }); + it(`should show help information for '${name}' and respect the "--color" flag using the "--help" option`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [name, "--help", "--color"], { + env: { FORCE_COLOR: true }, + }); - it("should show help information with options for sub commands", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--help"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toContain("\x1b[1m"); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + if (!needSkip) { expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } }); - it('should show help information and taking precedence when "--help" and "--version" option using together', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "--version"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it(`should show help information for '${name}' and respect the "--no-color" flag using the "--help" option`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [name, "--help", "--no-color"], { + env: { FORCE_COLOR: true }, + }); - it('should show help information using the "help --mode" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--mode"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).not.toContain("\x1b[1m"); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + if (!needSkip) { expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } }); - it('should show help information using the "help --target" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--target"]); + const alises = Array.isArray(alias) ? alias : [alias]; - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it('should show help information using the "help --stats" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--stats"]); + alises.forEach((alias) => { + it(`should show help information for '${alias}' command using the "--help" option`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [alias, "--help"]); expect(exitCode).toBe(0); expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it('should show help information using the "help --cache-type" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--cache-type"]); - if (isWebpack5) { - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - } else { - expect(exitCode).toBe(2); + if (!needSkip) { + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); } - }); + }); - it('should show help information using the "help --no-stats" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--no-stats"]); + it.skip(`should show help information for '${alias}' command using the "--help verbose" option`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [alias, "--help", "verbose"]); expect(exitCode).toBe(0); expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it('should show help information using the "help serve --mode" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "serve", "--mode"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it('should show help information using the "help --color" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--color"], { - env: { FORCE_COLOR: true }, - }); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toContain("\x1b[1m"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - it('should show help information using the "help --no-color" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--no-color"], { - env: { FORCE_COLOR: true }, - }); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + if (!needSkip) { + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } + }); - it('should show help information using the "help serve --color" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "serve", "--color"], { - env: { FORCE_COLOR: true }, - }); + it(`should show help information for '${alias}' command using command syntax`, async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", alias]); expect(exitCode).toBe(0); expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toContain("\x1b[1m"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - it('should show help information using the "help serve --no-color" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "serve", "--no-color"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + if (!needSkip) { + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } + }); }); + }); - it('should show help information using the "help --version" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--version"]); + it("should show help information with options for sub commands", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--help"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it('should show help information using the "help -v" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "-v"]); + it('should show help information and taking precedence when "--help" and "--version" option using together', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "--version"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it('should log error for invalid command using the "--help" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "myCommand"]); + it('should show help information using the "help --mode" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--mode"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it('should log error for invalid command using the "--help" option #2', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--flag", "--help"]); + it('should show help information using the "help --target" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--target"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it('should log error for invalid command using the "--help" option #3', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "--flag", "--help"]); + it('should show help information using the "help --stats" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--stats"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("should log error for unknown command using command syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "myCommand"]); + it('should show help information using the "help --cache-type" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--cache-type"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + if (isWebpack5) { + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } else { + expect(exitCode).toBe(2); + } + }); - it("should log error for unknown command using command syntax #2", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "verbose"]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it('should show help information using the "help --no-stats" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--no-stats"]); - it("should log error for unknown option using command syntax #2", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--made"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it('should show help information using the "help serve --mode" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "serve", "--mode"]); - it("should log error for unknown option using command syntax #3", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "serve", "--made"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + it('should show help information using the "help --color" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--color"], { + env: { FORCE_COLOR: true }, }); - it("should log error for unknown option using command syntax #4", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "bui", "--mode"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toContain("\x1b[1m"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + it('should show help information using the "help --no-color" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--no-color"], { + env: { FORCE_COLOR: true }, }); - it("should log error for invalid command using command syntax #3", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--mode", "serve"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + it('should show help information using the "help serve --color" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "serve", "--color"], { + env: { FORCE_COLOR: true }, }); - it("should log error for invalid command using command syntax #4", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "help", - "serve", - "--mode", - "--mode", - ]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toContain("\x1b[1m"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it('should log error for invalid flag with the "--help" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "--my-flag"]); + it('should show help information using the "help serve --no-color" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "serve", "--no-color"]); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it('should show help information using the "help --version" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--version"]); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it('should show help information using the "help -v" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "-v"]); + + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it('should log error for invalid command using the "--help" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "myCommand"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it('should log error for invalid command using the "--help" option #2', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--flag", "--help"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it('should log error for invalid command using the "--help" option #3', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "--flag", "--help"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should log error for unknown command using command syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "myCommand"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should log error for unknown command using command syntax #2", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "verbose"]); - it('should log error for invalid flag with the "--help" option #2', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "init", "info"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should log error for unknown option using command syntax #2", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--made"]); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it('should log error for invalid flag with the "--help" option #2', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--help="]); + it("should log error for unknown option using command syntax #3", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "serve", "--made"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should log error for unknown option using command syntax #4", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "bui", "--mode"]); - expect(exitCode).toBe(2); - expect(stderr).toMatchSnapshot(); - expect(stdout).toBeFalsy(); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should log error for invalid command using command syntax #3", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["help", "--mode", "serve"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should log error for invalid command using command syntax #4", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "help", + "serve", + "--mode", + "--mode", + ]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it('should log error for invalid flag with the "--help" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "--my-flag"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it('should log error for invalid flag with the "--help" option #2', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--help", "init", "info"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it('should log error for invalid flag with the "--help" option #2', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--help="]); + + expect(exitCode).toBe(2); + expect(stderr).toMatchSnapshot(); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/info/info-output.test.js b/test/info/info-output.test.js index ddc1b083af5..95613a9c608 100644 --- a/test/info/info-output.test.js +++ b/test/info/info-output.test.js @@ -4,69 +4,69 @@ const { join } = require("path"); const { run } = require("../utils/test-utils"); describe("basic info usage", () => { - it("gets info without flags", async () => { - const { exitCode, stdout, stderr } = await run(__dirname, ["info"]); + it("gets info without flags", async () => { + const { exitCode, stdout, stderr } = await run(__dirname, ["info"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("System:"); - expect(stdout).toContain("Node"); - expect(stdout).toContain("npm"); - expect(stdout).toContain("Yarn"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("System:"); + expect(stdout).toContain("Node"); + expect(stdout).toContain("npm"); + expect(stdout).toContain("Yarn"); + }); - it("gets more info in project root", async () => { - const { exitCode, stderr, stdout } = await run(join(__dirname, "../../"), ["info"]); + it("gets more info in project root", async () => { + const { exitCode, stderr, stdout } = await run(join(__dirname, "../../"), ["info"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("System:"); - expect(stdout).toContain("Monorepos:"); - expect(stdout).toContain("Packages:"); - expect(stdout).toContain("Node"); - expect(stdout).toContain("npm"); - expect(stdout).toContain("Yarn"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("System:"); + expect(stdout).toContain("Monorepos:"); + expect(stdout).toContain("Packages:"); + expect(stdout).toContain("Node"); + expect(stdout).toContain("npm"); + expect(stdout).toContain("Yarn"); + }); - it("gets info as json", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--output=json"]); + it("gets info as json", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--output=json"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain('"System":'); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain('"System":'); - const parse = () => { - const output = JSON.parse(stdout); - expect(output["System"]).toBeTruthy(); - expect(output["Binaries"]).toBeTruthy(); - expect(output["System"]["OS"]).toBeTruthy(); - expect(output["System"]["CPU"]).toBeTruthy(); - }; + const parse = () => { + const output = JSON.parse(stdout); + expect(output["System"]).toBeTruthy(); + expect(output["Binaries"]).toBeTruthy(); + expect(output["System"]["OS"]).toBeTruthy(); + expect(output["System"]["CPU"]).toBeTruthy(); + }; - expect(parse).not.toThrow(); - }); + expect(parse).not.toThrow(); + }); - it("gets info as markdown", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--output", "markdown"]); + it("gets info as markdown", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--output", "markdown"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("## System:"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("## System:"); + }); - it("shows a warning if an invalid value is supplied", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--output", "unknown"]); + it("shows a warning if an invalid value is supplied", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--output", "unknown"]); - expect(exitCode).toBe(2); - expect(stderr).toContain(`'unknown' is not a valid value for output`); - expect(stdout).toBeFalsy(); - }); + expect(exitCode).toBe(2); + expect(stderr).toContain(`'unknown' is not a valid value for output`); + expect(stdout).toBeFalsy(); + }); - it("recognizes '-o' as an alias for '--output'", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["info", "-o", "markdown"]); + it("recognizes '-o' as an alias for '--output'", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["info", "-o", "markdown"]); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("## System:"); - }); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("## System:"); + }); }); diff --git a/test/info/info-unknown.test.js b/test/info/info-unknown.test.js index 81f3be30819..aa803e17fd3 100644 --- a/test/info/info-unknown.test.js +++ b/test/info/info-unknown.test.js @@ -1,11 +1,11 @@ const { run } = require("../utils/test-utils"); describe("should handle unknown args", () => { - it("shows an appropriate warning on supplying unknown args", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--unknown"]); + it("shows an appropriate warning on supplying unknown args", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--unknown"]); - expect(exitCode).toBe(2); - expect(stderr).toContain("Error: Unknown option '--unknown'"); - expect(stdout).toBeFalsy(); - }); + expect(exitCode).toBe(2); + expect(stderr).toContain("Error: Unknown option '--unknown'"); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/init/init.test.js b/test/init/init.test.js index 14553329ce5..7eb7d677fcd 100644 --- a/test/init/init.test.js +++ b/test/init/init.test.js @@ -3,10 +3,10 @@ const path = require("path"); const { mkdirSync, existsSync, readFileSync } = require("fs"); const { join, resolve } = require("path"); const { - isWindows, - run, - runPromptWithAnswers, - uniqueDirectoryForTest, + isWindows, + run, + runPromptWithAnswers, + uniqueDirectoryForTest, } = require("../utils/test-utils"); jest.setTimeout(480000); @@ -15,628 +15,622 @@ const ENTER = "\x0D"; const DOWN = "\x1B\x5B\x42"; const defaultTemplateFiles = [ - "package.json", - "package-lock.json", - "src", - "src/index.js", - "webpack.config.js", + "package.json", + "package-lock.json", + "src", + "src/index.js", + "webpack.config.js", ]; // Helper to read from package.json in a given path const readFromPkgJSON = (path) => { - const pkgJSONPath = join(path, "package.json"); + const pkgJSONPath = join(path, "package.json"); - if (!existsSync(pkgJSONPath)) { - return {}; - } + if (!existsSync(pkgJSONPath)) { + return {}; + } - const pkgJSON = JSON.parse(readFileSync(pkgJSONPath, "utf8")); - const { devDependencies: devDeps } = pkgJSON; + const pkgJSON = JSON.parse(readFileSync(pkgJSONPath, "utf8")); + const { devDependencies: devDeps } = pkgJSON; - // Update devDeps versions to be x.x.x to prevent frequent snapshot updates - Object.keys(devDeps).forEach((dep) => (devDeps[dep] = "x.x.x")); + // Update devDeps versions to be x.x.x to prevent frequent snapshot updates + Object.keys(devDeps).forEach((dep) => (devDeps[dep] = "x.x.x")); - return { ...pkgJSON, devDependencies: devDeps }; + return { ...pkgJSON, devDependencies: devDeps }; }; // Helper to read from webpack.config.js in a given path const readFromWebpackConfig = (path) => readFileSync(join(path, "webpack.config.js"), "utf8"); describe("init command", () => { - it("should generate default project when nothing is passed", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await run(assetsPath, ["init", "--force"]); - - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); + it("should generate default project when nothing is passed", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await run(assetsPath, ["init", "--force"]); - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should generate project when generationPath is supplied", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await run(__dirname, ["init", assetsPath, "--force"]); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + }); - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); + it("should generate project when generationPath is supplied", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await run(__dirname, ["init", assetsPath, "--force"]); - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should generate folders if non existing generation path is given", async () => { - const assetsPath = path.resolve(os.tmpdir(), Date.now().toString()); - const { stdout, stderr } = await run(__dirname, ["init", assetsPath, "--force"]); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + }); - expect(stdout).toContain( - "generation path doesn't exist, required folders will be created.", - ); - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); + it("should generate folders if non existing generation path is given", async () => { + const assetsPath = path.resolve(os.tmpdir(), Date.now().toString()); + const { stdout, stderr } = await run(__dirname, ["init", assetsPath, "--force"]); - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); + expect(stdout).toContain("generation path doesn't exist, required folders will be created."); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should configure assets modules by default", async () => { - const assetsPath = path.resolve(os.tmpdir(), Date.now().toString()); - const { stdout, stderr } = await run(__dirname, ["init", assetsPath, "--force"]); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + }); - expect(stdout).toContain( - "generation path doesn't exist, required folders will be created.", - ); - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); + it("should configure assets modules by default", async () => { + const assetsPath = path.resolve(os.tmpdir(), Date.now().toString()); + const { stdout, stderr } = await run(__dirname, ["init", assetsPath, "--force"]); - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); + expect(stdout).toContain("generation path doesn't exist, required folders will be created."); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - - // Check if the generated webpack configuration matches the snapshot - expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should ask question when wrong template is supplied", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init", "--force", "--template=apple"], - [`${ENTER}`], - ); - - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("apple is not a valid template, please select one from below"); - expect(stderr).toContain("webpack.config.js"); - - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); - - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + + // Check if the generated webpack configuration matches the snapshot + expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + }); + + it("should ask question when wrong template is supplied", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init", "--force", "--template=apple"], + [`${ENTER}`], + ); + + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("apple is not a valid template, please select one from below"); + expect(stderr).toContain("webpack.config.js"); + + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should generate typescript project correctly", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init"], - [`${DOWN}${DOWN}${ENTER}`, `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, ENTER, ENTER], - ); - - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); - expect(stderr).toContain("tsconfig.json"); - - // Test files - const files = [ - ...defaultTemplateFiles.filter((file) => file !== "src/index.js"), - "src/index.ts", - "tsconfig.json", - ]; - - files.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); - - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - - // Check if the generated webpack configuration matches the snapshot - expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + }); + + it("should generate typescript project correctly", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [`${DOWN}${DOWN}${ENTER}`, `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, ENTER, ENTER], + ); + + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); + expect(stderr).toContain("tsconfig.json"); + + // Test files + const files = [ + ...defaultTemplateFiles.filter((file) => file !== "src/index.js"), + "src/index.ts", + "tsconfig.json", + ]; + + files.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should generate ES6 project correctly", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init"], - [`${DOWN}${ENTER}`, `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, ENTER, ENTER], - ); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); - expect(stderr).toContain(".babelrc"); + // Check if the generated webpack configuration matches the snapshot + expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + }); - // Test files - const files = [...defaultTemplateFiles, ".babelrc"]; + it("should generate ES6 project correctly", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [`${DOWN}${ENTER}`, `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, ENTER, ENTER], + ); - files.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); + expect(stderr).toContain(".babelrc"); - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + // Test files + const files = [...defaultTemplateFiles, ".babelrc"]; - // Check if the generated webpack configuration matches the snapshot - expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + files.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should use sass in project when selected", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init"], - [ - `${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `${DOWN}${DOWN}${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - ENTER, - ], - ); - - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); - - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); - - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - - // Check if the generated webpack configuration matches the snapshot - expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + + // Check if the generated webpack configuration matches the snapshot + expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + }); + + it("should use sass in project when selected", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [ + `${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `${DOWN}${DOWN}${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + ENTER, + ], + ); + + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); + + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should use sass with postcss in project when selected", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init"], - [ - `${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `${DOWN}${DOWN}${ENTER}`, - `n${ENTER}`, - `y${ENTER}`, - `n${ENTER}`, - ENTER, - ], - ); - - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); - - // Test files - const files = [...defaultTemplateFiles, "postcss.config.js"]; - - files.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); - - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - - // Check if the generated webpack configuration matches the snapshot - expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + + // Check if the generated webpack configuration matches the snapshot + expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + }); + + it("should use sass with postcss in project when selected", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [ + `${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `${DOWN}${DOWN}${ENTER}`, + `n${ENTER}`, + `y${ENTER}`, + `n${ENTER}`, + ENTER, + ], + ); + + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); + + // Test files + const files = [...defaultTemplateFiles, "postcss.config.js"]; + + files.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should use mini-css-extract-plugin when selected", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init"], - [ - `${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `${DOWN}${DOWN}${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `y${ENTER}`, - ENTER, - ], - ); - - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); - - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); - - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - - // Check if the generated webpack configuration matches the snapshot - expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + + // Check if the generated webpack configuration matches the snapshot + expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + }); + + it("should use mini-css-extract-plugin when selected", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [ + `${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `${DOWN}${DOWN}${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `y${ENTER}`, + ENTER, + ], + ); + + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); + + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should use sass and css with postcss in project when selected", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init"], - [ - `${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `${DOWN}${DOWN}${ENTER}`, - `y${ENTER}`, - `y${ENTER}`, - `n${ENTER}`, - ENTER, - ], - ); - - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); - - // Test files - const files = [...defaultTemplateFiles, "postcss.config.js"]; - - files.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); - - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - - // Check if the generated webpack configuration matches the snapshot - expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + + // Check if the generated webpack configuration matches the snapshot + expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + }); + + it("should use sass and css with postcss in project when selected", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [ + `${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `${DOWN}${DOWN}${ENTER}`, + `y${ENTER}`, + `y${ENTER}`, + `n${ENTER}`, + ENTER, + ], + ); + + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); + + // Test files + const files = [...defaultTemplateFiles, "postcss.config.js"]; + + files.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should use less in project when selected", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init"], - [ - `${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `${DOWN}${DOWN}${DOWN}${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - ENTER, - ], - ); - - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); - - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); - - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - - // Check if the generated webpack configuration matches the snapshot - expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + + // Check if the generated webpack configuration matches the snapshot + expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + }); + + it("should use less in project when selected", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [ + `${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `${DOWN}${DOWN}${DOWN}${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + ENTER, + ], + ); + + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); + + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should use stylus in project when selected", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init"], - [ - `${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `${DOWN}${DOWN}${DOWN}${DOWN}${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - ENTER, - ], - ); - - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); - - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); - - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - - // Check if the generated webpack configuration matches the snapshot - expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + + // Check if the generated webpack configuration matches the snapshot + expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + }); + + it("should use stylus in project when selected", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [ + `${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `${DOWN}${DOWN}${DOWN}${DOWN}${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + ENTER, + ], + ); + + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); + + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should configure WDS as opted", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init"], - [ENTER, ENTER, `n${ENTER}`, `n${ENTER}`, ENTER, ENTER], - ); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - expect(stdout).toContain("Do you want to use webpack-dev-server?"); - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); + // Check if the generated webpack configuration matches the snapshot + expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + }); - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); + it("should configure WDS as opted", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [ENTER, ENTER, `n${ENTER}`, `n${ENTER}`, ENTER, ENTER], + ); - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + expect(stdout).toContain("Do you want to use webpack-dev-server?"); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); - // Check if the generated webpack configuration matches the snapshot - expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should use postcss in project when selected", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init"], - [ - `${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `n${ENTER}`, - `${DOWN}${ENTER}`, - ENTER, - `n${ENTER}`, - ENTER, - ], - ); - - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); - - // Test files - const files = [...defaultTemplateFiles, "postcss.config.js"]; - - files.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); - - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - - // Check if the generated webpack configuration matches the snapshot - expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + + // Check if the generated webpack configuration matches the snapshot + expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + }); + + it("should use postcss in project when selected", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [ + `${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `n${ENTER}`, + `${DOWN}${ENTER}`, + ENTER, + `n${ENTER}`, + ENTER, + ], + ); + + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); + + // Test files + const files = [...defaultTemplateFiles, "postcss.config.js"]; + + files.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should configure html-webpack-plugin as opted", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init"], - [ENTER, `n${ENTER}`, ENTER, `n${ENTER}`, ENTER, ENTER], - ); - - expect(stdout).toContain( - "Do you want to simplify the creation of HTML files for your bundle?", - ); - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); - - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); - - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - - // Check if the generated webpack configuration matches the snapshot - expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + + // Check if the generated webpack configuration matches the snapshot + expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + }); + + it("should configure html-webpack-plugin as opted", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [ENTER, `n${ENTER}`, ENTER, `n${ENTER}`, ENTER, ENTER], + ); + + expect(stdout).toContain("Do you want to simplify the creation of HTML files for your bundle?"); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); + + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should configure workbox-webpack-plugin as opted", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init"], - [ENTER, `n${ENTER}`, ENTER, ENTER, ENTER, ENTER], - ); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - expect(stdout).toContain("Do you want to add PWA support?"); - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); + // Check if the generated webpack configuration matches the snapshot + expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + }); - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); + it("should configure workbox-webpack-plugin as opted", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [ENTER, `n${ENTER}`, ENTER, ENTER, ENTER, ENTER], + ); - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + expect(stdout).toContain("Do you want to add PWA support?"); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); - // Check if the generated webpack configuration matches the snapshot - expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should throw if the current path is not writable", async () => { - if (isWindows) { - return; - } + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); - const assetsPath = await uniqueDirectoryForTest(); - const projectPath = join(assetsPath, "non-writable-path"); + // Check if the generated webpack configuration matches the snapshot + expect(readFromWebpackConfig(assetsPath)).toMatchSnapshot(); + }); - mkdirSync(projectPath, 0o500); + it("should throw if the current path is not writable", async () => { + if (isWindows) { + return; + } - const { exitCode, stderr } = await run(projectPath, ["init", "my-app"], { reject: false }); + const assetsPath = await uniqueDirectoryForTest(); + const projectPath = join(assetsPath, "non-writable-path"); - expect(exitCode).toBe(2); - expect(stderr).toContain("Failed to create directory"); - }); + mkdirSync(projectPath, 0o500); + + const { exitCode, stderr } = await run(projectPath, ["init", "my-app"], { reject: false }); - it("should work with 'new' alias", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await run(assetsPath, ["new", "--force"]); + expect(exitCode).toBe(2); + expect(stderr).toContain("Failed to create directory"); + }); - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); + it("should work with 'new' alias", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await run(assetsPath, ["new", "--force"]); - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should work with 'create' alias", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await run(assetsPath, ["create", "--force"]); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + }); - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); + it("should work with 'create' alias", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await run(assetsPath, ["create", "--force"]); - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should work with 'c' alias", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await run(assetsPath, ["c", "--force"]); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + }); - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); + it("should work with 'c' alias", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await run(assetsPath, ["c", "--force"]); - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("should work with 'n' alias", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await run(assetsPath, ["n", "--force"]); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + }); - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); + it("should work with 'n' alias", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await run(assetsPath, ["n", "--force"]); - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("recognizes '-t' as an alias for '--template'", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await run(assetsPath, ["init", "-t", "default", "--force"]); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + }); - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); + it("recognizes '-t' as an alias for '--template'", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await run(assetsPath, ["init", "-t", "default", "--force"]); - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("recognizes '-f' as an alias for '--force'", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await run(assetsPath, ["init", "-f"]); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + }); - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); + it("recognizes '-f' as an alias for '--force'", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await run(assetsPath, ["init", "-f"]); - // Test files - defaultTemplateFiles.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + // Test files + defaultTemplateFiles.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); - it("uses yarn as the package manager when opted", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers( - assetsPath, - ["init"], - [ENTER, `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, ENTER, `${DOWN}${ENTER}`], - ); - - expect(stdout).toContain("Project has been initialised with webpack!"); - expect(stderr).toContain("webpack.config.js"); - - // Test files - const files = [ - ...defaultTemplateFiles.filter((file) => file !== "package-lock.json"), - "yarn.lock", - ]; - - files.forEach((file) => { - expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); - }); - - // Check if the generated package.json file content matches the snapshot - expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + }); + + it("uses yarn as the package manager when opted", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers( + assetsPath, + ["init"], + [ENTER, `n${ENTER}`, `n${ENTER}`, `n${ENTER}`, ENTER, `${DOWN}${ENTER}`], + ); + + expect(stdout).toContain("Project has been initialised with webpack!"); + expect(stderr).toContain("webpack.config.js"); + + // Test files + const files = [ + ...defaultTemplateFiles.filter((file) => file !== "package-lock.json"), + "yarn.lock", + ]; + + files.forEach((file) => { + expect(existsSync(resolve(assetsPath, file))).toBeTruthy(); }); + + // Check if the generated package.json file content matches the snapshot + expect(readFromPkgJSON(assetsPath)).toMatchSnapshot(); + }); }); diff --git a/test/loader/error-test/loader-error.test.js b/test/loader/error-test/loader-error.test.js index 80c402a27cf..26ae8008b2a 100644 --- a/test/loader/error-test/loader-error.test.js +++ b/test/loader/error-test/loader-error.test.js @@ -4,12 +4,12 @@ const { run } = require("../../utils/test-utils"); describe("loader error regression test for #1581", () => { - it(`should not ignore loader's error produce a failing build`, async () => { - // Ignoring assertion on stderr because ts-loader is producing depreciation warnings - // with webpack@v5.0.0-beta.24 -> https://github.com/TypeStrong/ts-loader/issues/1169 - const { stdout, exitCode } = await run(__dirname, []); - expect(exitCode).not.toEqual(0); - expect(stdout).toContain("[1 error]"); - expect(stdout).toContain(`Cannot assign to 'foobar' because it is a constant`); - }); + it(`should not ignore loader's error produce a failing build`, async () => { + // Ignoring assertion on stderr because ts-loader is producing depreciation warnings + // with webpack@v5.0.0-beta.24 -> https://github.com/TypeStrong/ts-loader/issues/1169 + const { stdout, exitCode } = await run(__dirname, []); + expect(exitCode).not.toEqual(0); + expect(stdout).toContain("[1 error]"); + expect(stdout).toContain(`Cannot assign to 'foobar' because it is a constant`); + }); }); diff --git a/test/loader/error-test/webpack.config.js b/test/loader/error-test/webpack.config.js index 8c50d352ad7..056147de1ac 100644 --- a/test/loader/error-test/webpack.config.js +++ b/test/loader/error-test/webpack.config.js @@ -1,25 +1,25 @@ const path = require("path"); module.exports = { - mode: "development", + mode: "development", - entry: { - bundle: "./src/index.ts", - }, + entry: { + bundle: "./src/index.ts", + }, - output: { - path: path.resolve(__dirname, "dist"), - filename: "[name].js", - }, + output: { + path: path.resolve(__dirname, "dist"), + filename: "[name].js", + }, - module: { - rules: [ - { - test: /.(ts|tsx)?$/, - loader: "ts-loader", - include: [path.resolve(__dirname, "src")], - exclude: [/node_modules/], - }, - ], - }, + module: { + rules: [ + { + test: /.(ts|tsx)?$/, + loader: "ts-loader", + include: [path.resolve(__dirname, "src")], + exclude: [/node_modules/], + }, + ], + }, }; diff --git a/test/loader/loader.test.js b/test/loader/loader.test.js index c8d4644434e..35f1330a053 100644 --- a/test/loader/loader.test.js +++ b/test/loader/loader.test.js @@ -3,10 +3,10 @@ const { existsSync } = require("fs"); const { join, resolve } = require("path"); const { - run, - runPromptWithAnswers, - uniqueDirectoryForTest, - normalizeStdout, + run, + runPromptWithAnswers, + uniqueDirectoryForTest, + normalizeStdout, } = require("../utils/test-utils"); const firstPrompt = "? Loader name (my-loader)"; @@ -14,230 +14,230 @@ const ENTER = "\x0D"; const DOWN = "\x1B\x5B\x42"; const dataForTests = (rootAssetsPath) => ({ - loaderName: "test-loader", - loaderPath: join(rootAssetsPath, "test-loader"), - defaultLoaderPath: join(rootAssetsPath, "my-loader"), - genPath: join(rootAssetsPath, "test-assets"), - customLoaderPath: join(rootAssetsPath, "test-assets", "loaderName"), - defaultTemplateFiles: [ - "package.json", - "package-lock.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", - ], + loaderName: "test-loader", + loaderPath: join(rootAssetsPath, "test-loader"), + defaultLoaderPath: join(rootAssetsPath, "my-loader"), + genPath: join(rootAssetsPath, "test-assets"), + customLoaderPath: join(rootAssetsPath, "test-assets", "loaderName"), + defaultTemplateFiles: [ + "package.json", + "package-lock.json", + "examples", + "src", + "test", + "src/index.js", + "examples/simple/webpack.config.js", + ], }); describe("loader command", () => { - it("should ask the loader name when invoked", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers(assetsPath, ["loader"]); + it("should ask the loader name when invoked", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers(assetsPath, ["loader"]); - expect(stdout).toBeTruthy(); - expect(stderr).toBeFalsy(); - expect(normalizeStdout(stdout)).toContain(firstPrompt); - }); - - it("should scaffold loader with default name if no loader name provided", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { defaultLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); - let { stdout } = await runPromptWithAnswers(assetsPath, ["loader"], [ENTER, ENTER]); - - expect(normalizeStdout(stdout)).toContain(firstPrompt); - - // Skip test in case installation fails - if (!existsSync(resolve(defaultLoaderPath, "./package-lock.json"))) { - return; - } + expect(stdout).toBeTruthy(); + expect(stderr).toBeFalsy(); + expect(normalizeStdout(stdout)).toContain(firstPrompt); + }); - // Check if the output directory exists with the appropriate loader name - expect(existsSync(defaultLoaderPath)).toBeTruthy(); + it("should scaffold loader with default name if no loader name provided", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { defaultLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); + let { stdout } = await runPromptWithAnswers(assetsPath, ["loader"], [ENTER, ENTER]); - // All test files are scaffolded - defaultTemplateFiles.forEach((file) => { - expect(existsSync(defaultLoaderPath, file)).toBeTruthy(); - }); + expect(normalizeStdout(stdout)).toContain(firstPrompt); - // Check if the the generated loader works successfully - const path = resolve(defaultLoaderPath, "./examples/simple/"); + // Skip test in case installation fails + if (!existsSync(resolve(defaultLoaderPath, "./package-lock.json"))) { + return; + } - ({ stdout } = await run(path, [])); + // Check if the output directory exists with the appropriate loader name + expect(existsSync(defaultLoaderPath)).toBeTruthy(); - expect(stdout).toContain("my-loader"); + // All test files are scaffolded + defaultTemplateFiles.forEach((file) => { + expect(existsSync(defaultLoaderPath, file)).toBeTruthy(); }); - it("should scaffold loader template with a given name", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { loaderName, loaderPath, defaultTemplateFiles } = dataForTests(assetsPath); - let { stdout } = await runPromptWithAnswers( - assetsPath, - ["loader"], - [`${loaderName}${ENTER}`, ENTER], - ); + // Check if the the generated loader works successfully + const path = resolve(defaultLoaderPath, "./examples/simple/"); - expect(normalizeStdout(stdout)).toContain(firstPrompt); + ({ stdout } = await run(path, [])); - // Skip test in case installation fails - if (!existsSync(resolve(loaderPath, "./package-lock.json"))) { - return; - } + expect(stdout).toContain("my-loader"); + }); - // Check if the output directory exists with the appropriate loader name - expect(existsSync(loaderPath)).toBeTruthy(); + it("should scaffold loader template with a given name", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { loaderName, loaderPath, defaultTemplateFiles } = dataForTests(assetsPath); + let { stdout } = await runPromptWithAnswers( + assetsPath, + ["loader"], + [`${loaderName}${ENTER}`, ENTER], + ); - // All test files are scaffolded - defaultTemplateFiles.forEach((file) => { - expect(existsSync(loaderPath, file)).toBeTruthy(); - }); + expect(normalizeStdout(stdout)).toContain(firstPrompt); - // Check if the the generated loader works successfully - const path = resolve(loaderPath, "./examples/simple/"); + // Skip test in case installation fails + if (!existsSync(resolve(loaderPath, "./package-lock.json"))) { + return; + } - ({ stdout } = await run(path, [])); + // Check if the output directory exists with the appropriate loader name + expect(existsSync(loaderPath)).toBeTruthy(); - expect(stdout).toContain("test-loader"); + // All test files are scaffolded + defaultTemplateFiles.forEach((file) => { + expect(existsSync(loaderPath, file)).toBeTruthy(); }); - it("should scaffold loader template in the specified path", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { loaderName, customLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); - let { stdout } = await runPromptWithAnswers( - assetsPath, - ["loader", "test-assets"], - [`${loaderName}${ENTER}`, ENTER], - ); + // Check if the the generated loader works successfully + const path = resolve(loaderPath, "./examples/simple/"); - expect(normalizeStdout(stdout)).toContain(firstPrompt); + ({ stdout } = await run(path, [])); - // Skip test in case installation fails - if (!existsSync(resolve(customLoaderPath, "./package-lock.json"))) { - return; - } + expect(stdout).toContain("test-loader"); + }); - // Check if the output directory exists with the appropriate loader name - expect(existsSync(customLoaderPath)).toBeTruthy(); + it("should scaffold loader template in the specified path", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { loaderName, customLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); + let { stdout } = await runPromptWithAnswers( + assetsPath, + ["loader", "test-assets"], + [`${loaderName}${ENTER}`, ENTER], + ); - // All test files are scaffolded - defaultTemplateFiles.forEach((file) => { - expect(existsSync(customLoaderPath, file)).toBeTruthy(); - }); + expect(normalizeStdout(stdout)).toContain(firstPrompt); - // Check if the the generated loader works successfully - const path = resolve(customLoaderPath, "./examples/simple/"); + // Skip test in case installation fails + if (!existsSync(resolve(customLoaderPath, "./package-lock.json"))) { + return; + } - ({ stdout } = await run(path, [])); + // Check if the output directory exists with the appropriate loader name + expect(existsSync(customLoaderPath)).toBeTruthy(); - expect(stdout).toContain("test-loader"); + // All test files are scaffolded + defaultTemplateFiles.forEach((file) => { + expect(existsSync(customLoaderPath, file)).toBeTruthy(); }); - it("should scaffold loader template in the current directory", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { loaderName, customLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); + // Check if the the generated loader works successfully + const path = resolve(customLoaderPath, "./examples/simple/"); - let { stdout } = await runPromptWithAnswers( - assetsPath, - ["loader", "./"], - [`${loaderName}${ENTER}`, ENTER], - ); + ({ stdout } = await run(path, [])); - expect(normalizeStdout(stdout)).toContain(firstPrompt); + expect(stdout).toContain("test-loader"); + }); - // Skip test in case installation fails - if (!existsSync(resolve(customLoaderPath, "./package-lock.json"))) { - return; - } + it("should scaffold loader template in the current directory", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { loaderName, customLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); - // Check if the output directory exists with the appropriate loader name - expect(existsSync(customLoaderPath)).toBeTruthy(); + let { stdout } = await runPromptWithAnswers( + assetsPath, + ["loader", "./"], + [`${loaderName}${ENTER}`, ENTER], + ); - // All test files are scaffolded - defaultTemplateFiles.forEach((file) => { - expect(existsSync(customLoaderPath, file)).toBeTruthy(); - }); + expect(normalizeStdout(stdout)).toContain(firstPrompt); - // Check if the the generated loader works successfully - const path = resolve(customLoaderPath, "./examples/simple/"); + // Skip test in case installation fails + if (!existsSync(resolve(customLoaderPath, "./package-lock.json"))) { + return; + } - ({ stdout } = await run(path, [])); + // Check if the output directory exists with the appropriate loader name + expect(existsSync(customLoaderPath)).toBeTruthy(); - expect(stdout).toContain("test-loader"); + // All test files are scaffolded + defaultTemplateFiles.forEach((file) => { + expect(existsSync(customLoaderPath, file)).toBeTruthy(); }); - it("should prompt on supplying an invalid template", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stderr } = await runPromptWithAnswers(assetsPath, ["loader", "--template=unknown"]); + // Check if the the generated loader works successfully + const path = resolve(customLoaderPath, "./examples/simple/"); - expect(stderr).toContain("unknown is not a valid template"); - }); + ({ stdout } = await run(path, [])); - it("recognizes '-t' as an alias for '--template'", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { defaultLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); - let { stdout } = await runPromptWithAnswers( - assetsPath, - ["loader", "-t", "default"], - [`${ENTER}`, ENTER], - ); + expect(stdout).toContain("test-loader"); + }); - expect(normalizeStdout(stdout)).toContain(firstPrompt); + it("should prompt on supplying an invalid template", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stderr } = await runPromptWithAnswers(assetsPath, ["loader", "--template=unknown"]); - // Skip test in case installation fails - if (!existsSync(resolve(defaultLoaderPath, "./package-lock.json"))) { - return; - } + expect(stderr).toContain("unknown is not a valid template"); + }); - // Check if the output directory exists with the appropriate loader name - expect(existsSync(defaultLoaderPath)).toBeTruthy(); + it("recognizes '-t' as an alias for '--template'", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { defaultLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); + let { stdout } = await runPromptWithAnswers( + assetsPath, + ["loader", "-t", "default"], + [`${ENTER}`, ENTER], + ); - // All test files are scaffolded - defaultTemplateFiles.forEach((file) => { - expect(existsSync(defaultLoaderPath, file)).toBeTruthy(); - }); + expect(normalizeStdout(stdout)).toContain(firstPrompt); - // Check if the the generated loader works successfully - const path = resolve(assetsPath, "./my-loader/examples/simple/"); + // Skip test in case installation fails + if (!existsSync(resolve(defaultLoaderPath, "./package-lock.json"))) { + return; + } - ({ stdout } = await run(path, [])); + // Check if the output directory exists with the appropriate loader name + expect(existsSync(defaultLoaderPath)).toBeTruthy(); - expect(stdout).toContain("my-loader"); + // All test files are scaffolded + defaultTemplateFiles.forEach((file) => { + expect(existsSync(defaultLoaderPath, file)).toBeTruthy(); }); - it("uses yarn as the package manager when opted", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { defaultLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); - let { stdout } = await runPromptWithAnswers( - assetsPath, - ["loader", "-t", "default"], - [`${ENTER}`, `${DOWN}${ENTER}`], - ); + // Check if the the generated loader works successfully + const path = resolve(assetsPath, "./my-loader/examples/simple/"); - expect(normalizeStdout(stdout)).toContain(firstPrompt); + ({ stdout } = await run(path, [])); - // Skip test in case installation fails - if (!existsSync(resolve(defaultLoaderPath, "./yarn.lock"))) { - return; - } + expect(stdout).toContain("my-loader"); + }); - // Check if the output directory exists with the appropriate loader name - expect(existsSync(defaultLoaderPath)).toBeTruthy(); + it("uses yarn as the package manager when opted", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { defaultLoaderPath, defaultTemplateFiles } = dataForTests(assetsPath); + let { stdout } = await runPromptWithAnswers( + assetsPath, + ["loader", "-t", "default"], + [`${ENTER}`, `${DOWN}${ENTER}`], + ); - // All test files are scaffolded - const files = [ - ...defaultTemplateFiles.filter((file) => file !== "package-lock.json"), - "yarn.lock", - ]; + expect(normalizeStdout(stdout)).toContain(firstPrompt); - files.forEach((file) => { - expect(existsSync(defaultLoaderPath, file)).toBeTruthy(); - }); + // Skip test in case installation fails + if (!existsSync(resolve(defaultLoaderPath, "./yarn.lock"))) { + return; + } - // Check if the the generated loader works successfully - const path = resolve(assetsPath, "./my-loader/examples/simple/"); + // Check if the output directory exists with the appropriate loader name + expect(existsSync(defaultLoaderPath)).toBeTruthy(); - ({ stdout } = await run(path, [])); + // All test files are scaffolded + const files = [ + ...defaultTemplateFiles.filter((file) => file !== "package-lock.json"), + "yarn.lock", + ]; - expect(stdout).toContain("my-loader"); + files.forEach((file) => { + expect(existsSync(defaultLoaderPath, file)).toBeTruthy(); }); + + // Check if the the generated loader works successfully + const path = resolve(assetsPath, "./my-loader/examples/simple/"); + + ({ stdout } = await run(path, [])); + + expect(stdout).toContain("my-loader"); + }); }); diff --git a/test/loader/warning-test/loader-warning.test.js b/test/loader/warning-test/loader-warning.test.js index 30da26499aa..0b81fe06618 100644 --- a/test/loader/warning-test/loader-warning.test.js +++ b/test/loader/warning-test/loader-warning.test.js @@ -3,11 +3,11 @@ const { run } = require("../../utils/test-utils"); describe("loader warning test", () => { - it(`should not ignore loader's warning and exit with a non zero exit code`, async () => { - const { stdout, exitCode } = await run(__dirname, [], false); + it(`should not ignore loader's warning and exit with a non zero exit code`, async () => { + const { stdout, exitCode } = await run(__dirname, [], false); - expect(stdout).toContain("[1 warning]"); - expect(stdout).toContain("This is a warning"); - expect(exitCode).toEqual(0); - }); + expect(stdout).toContain("[1 warning]"); + expect(stdout).toContain("This is a warning"); + expect(exitCode).toEqual(0); + }); }); diff --git a/test/loader/warning-test/my-loader.js b/test/loader/warning-test/my-loader.js index d9b32f45457..9ad6b8e4ba0 100644 --- a/test/loader/warning-test/my-loader.js +++ b/test/loader/warning-test/my-loader.js @@ -1,5 +1,5 @@ module.exports = function loader(source) { - const { emitWarning } = this; - emitWarning("This is a warning"); - return source; + const { emitWarning } = this; + emitWarning("This is a warning"); + return source; }; diff --git a/test/loader/warning-test/webpack.config.js b/test/loader/warning-test/webpack.config.js index f66fba9b0c2..c7fe3695bd5 100644 --- a/test/loader/warning-test/webpack.config.js +++ b/test/loader/warning-test/webpack.config.js @@ -1,33 +1,33 @@ const path = require("path"); module.exports = { - mode: "development", + mode: "development", - entry: { - bundle: "./src/main.js", - }, + entry: { + bundle: "./src/main.js", + }, - output: { - path: path.resolve(__dirname, "dist"), - filename: "[name].js", - }, + output: { + path: path.resolve(__dirname, "dist"), + filename: "[name].js", + }, - module: { - rules: [ - { - test: /.(js|jsx)?$/, - loader: "my-loader", - include: [path.resolve(__dirname, "src")], - exclude: [/node_modules/], - }, - ], - }, - resolveLoader: { - alias: { - "my-loader": require.resolve("./my-loader"), - }, - }, - performance: { - hints: "warning", + module: { + rules: [ + { + test: /.(js|jsx)?$/, + loader: "my-loader", + include: [path.resolve(__dirname, "src")], + exclude: [/node_modules/], + }, + ], + }, + resolveLoader: { + alias: { + "my-loader": require.resolve("./my-loader"), }, + }, + performance: { + hints: "warning", + }, }; diff --git a/test/plugin/plugin.test.js b/test/plugin/plugin.test.js index 0599e6dacc3..7fa9c9c1d5e 100644 --- a/test/plugin/plugin.test.js +++ b/test/plugin/plugin.test.js @@ -1,10 +1,10 @@ const { existsSync, mkdirSync } = require("fs"); const { join, resolve } = require("path"); const { - run, - runPromptWithAnswers, - uniqueDirectoryForTest, - normalizeStdout, + run, + runPromptWithAnswers, + uniqueDirectoryForTest, + normalizeStdout, } = require("../utils/test-utils"); const ENTER = "\x0D"; @@ -12,234 +12,234 @@ const DOWN = "\x1B\x5B\x42"; const firstPrompt = "? Plugin name"; const dataForTests = (rootAssetsPath) => ({ - pluginName: "test-plugin", - pluginPath: join(rootAssetsPath, "test-plugin"), - defaultPluginPath: join(rootAssetsPath, "my-webpack-plugin"), - genPath: join(rootAssetsPath, "test-assets"), - customPluginPath: join(rootAssetsPath, "test-assets", "test-plugin"), - defaultTemplateFiles: [ - "package.json", - "examples", - "src", - "test", - "src/index.js", - "examples/simple/webpack.config.js", - ], + pluginName: "test-plugin", + pluginPath: join(rootAssetsPath, "test-plugin"), + defaultPluginPath: join(rootAssetsPath, "my-webpack-plugin"), + genPath: join(rootAssetsPath, "test-assets"), + customPluginPath: join(rootAssetsPath, "test-assets", "test-plugin"), + defaultTemplateFiles: [ + "package.json", + "examples", + "src", + "test", + "src/index.js", + "examples/simple/webpack.config.js", + ], }); describe("plugin command", () => { - it("should ask the plugin name when invoked", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout, stderr } = await runPromptWithAnswers(assetsPath, ["plugin"]); + it("should ask the plugin name when invoked", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout, stderr } = await runPromptWithAnswers(assetsPath, ["plugin"]); - expect(stdout).toBeTruthy(); - expect(stderr).toBeFalsy(); - expect(normalizeStdout(stdout)).toContain(firstPrompt); - }); - - it("should scaffold plugin with default name if no plugin name provided", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { defaultPluginPath, defaultTemplateFiles } = dataForTests(assetsPath); - const { stdout } = await runPromptWithAnswers(assetsPath, ["plugin"], [ENTER, ENTER]); + expect(stdout).toBeTruthy(); + expect(stderr).toBeFalsy(); + expect(normalizeStdout(stdout)).toContain(firstPrompt); + }); - expect(normalizeStdout(stdout)).toContain(firstPrompt); + it("should scaffold plugin with default name if no plugin name provided", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { defaultPluginPath, defaultTemplateFiles } = dataForTests(assetsPath); + const { stdout } = await runPromptWithAnswers(assetsPath, ["plugin"], [ENTER, ENTER]); - // Check if the output directory exists with the appropriate plugin name - expect(existsSync(defaultPluginPath)).toBeTruthy(); + expect(normalizeStdout(stdout)).toContain(firstPrompt); - // Skip test in case installation fails - if (!existsSync(resolve(defaultPluginPath, "./package-lock.json"))) { - return; - } + // Check if the output directory exists with the appropriate plugin name + expect(existsSync(defaultPluginPath)).toBeTruthy(); - // Test regressively files are scaffolded - defaultTemplateFiles.forEach((file) => { - expect(existsSync(join(defaultPluginPath, file))).toBeTruthy(); - }); + // Skip test in case installation fails + if (!existsSync(resolve(defaultPluginPath, "./package-lock.json"))) { + return; + } - // Check if the the generated plugin works successfully - const { stdout: stdout2 } = await run(defaultPluginPath, [ - "--config", - "./examples/simple/webpack.config.js", - ]); - expect(normalizeStdout(stdout2)).toContain("Hello World!"); + // Test regressively files are scaffolded + defaultTemplateFiles.forEach((file) => { + expect(existsSync(join(defaultPluginPath, file))).toBeTruthy(); }); - it("should scaffold plugin template with a given name", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { pluginName, pluginPath, defaultTemplateFiles } = dataForTests(assetsPath); - const { stdout } = await runPromptWithAnswers( - assetsPath, - ["plugin"], - [`${pluginName}${ENTER}`, ENTER], - ); - - expect(normalizeStdout(stdout)).toContain(firstPrompt); - - // Check if the output directory exists with the appropriate plugin name - expect(existsSync(pluginPath)).toBeTruthy(); - - // Skip test in case installation fails - if (!existsSync(resolve(pluginPath, "./package-lock.json"))) { - return; - } - - // Test regressively files are scaffolded - defaultTemplateFiles.forEach((file) => { - expect(existsSync(join(pluginPath, file))).toBeTruthy(); - }); - - // Check if the the generated plugin works successfully - const { stdout: stdout2 } = await run(pluginPath, [ - "--config", - "./examples/simple/webpack.config.js", - ]); - expect(normalizeStdout(stdout2)).toContain("Hello World!"); + // Check if the the generated plugin works successfully + const { stdout: stdout2 } = await run(defaultPluginPath, [ + "--config", + "./examples/simple/webpack.config.js", + ]); + expect(normalizeStdout(stdout2)).toContain("Hello World!"); + }); + + it("should scaffold plugin template with a given name", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { pluginName, pluginPath, defaultTemplateFiles } = dataForTests(assetsPath); + const { stdout } = await runPromptWithAnswers( + assetsPath, + ["plugin"], + [`${pluginName}${ENTER}`, ENTER], + ); + + expect(normalizeStdout(stdout)).toContain(firstPrompt); + + // Check if the output directory exists with the appropriate plugin name + expect(existsSync(pluginPath)).toBeTruthy(); + + // Skip test in case installation fails + if (!existsSync(resolve(pluginPath, "./package-lock.json"))) { + return; + } + + // Test regressively files are scaffolded + defaultTemplateFiles.forEach((file) => { + expect(existsSync(join(pluginPath, file))).toBeTruthy(); }); - it("should scaffold plugin template in the specified path", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { pluginName, customPluginPath, defaultTemplateFiles } = dataForTests(assetsPath); - const { stdout } = await runPromptWithAnswers( - assetsPath, - ["plugin", "test-assets"], - [`${pluginName}${ENTER}`, ENTER], - ); - - expect(normalizeStdout(stdout)).toContain(firstPrompt); - - // Check if the output directory exists with the appropriate plugin name - expect(existsSync(customPluginPath)).toBeTruthy(); - - // Skip test in case installation fails - if (!existsSync(resolve(customPluginPath, "./package-lock.json"))) { - return; - } - - // Test regressively files are scaffolded - defaultTemplateFiles.forEach((file) => { - expect(existsSync(join(customPluginPath, file))).toBeTruthy(); - }); - - // Check if the the generated plugin works successfully - const { stdout: stdout2 } = await run(customPluginPath, [ - "--config", - "./examples/simple/webpack.config.js", - ]); - expect(normalizeStdout(stdout2)).toContain("Hello World!"); + // Check if the the generated plugin works successfully + const { stdout: stdout2 } = await run(pluginPath, [ + "--config", + "./examples/simple/webpack.config.js", + ]); + expect(normalizeStdout(stdout2)).toContain("Hello World!"); + }); + + it("should scaffold plugin template in the specified path", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { pluginName, customPluginPath, defaultTemplateFiles } = dataForTests(assetsPath); + const { stdout } = await runPromptWithAnswers( + assetsPath, + ["plugin", "test-assets"], + [`${pluginName}${ENTER}`, ENTER], + ); + + expect(normalizeStdout(stdout)).toContain(firstPrompt); + + // Check if the output directory exists with the appropriate plugin name + expect(existsSync(customPluginPath)).toBeTruthy(); + + // Skip test in case installation fails + if (!existsSync(resolve(customPluginPath, "./package-lock.json"))) { + return; + } + + // Test regressively files are scaffolded + defaultTemplateFiles.forEach((file) => { + expect(existsSync(join(customPluginPath, file))).toBeTruthy(); }); - it("should scaffold plugin template in the current directory", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { genPath, customPluginPath, pluginName, defaultTemplateFiles } = - dataForTests(assetsPath); - - if (!existsSync(genPath)) { - mkdirSync(genPath); - } - - const { stdout } = await runPromptWithAnswers( - genPath, - ["plugin", "./"], - [`${pluginName}${ENTER}`, ENTER], - ); - - expect(normalizeStdout(stdout)).toContain(firstPrompt); - - // Check if the output directory exists with the appropriate plugin name - expect(existsSync(customPluginPath)).toBeTruthy(); - - // Skip test in case installation fails - if (!existsSync(resolve(customPluginPath, "./package-lock.json"))) { - return; - } - - // Test regressively files are scaffolded - defaultTemplateFiles.forEach((file) => { - expect(existsSync(join(customPluginPath, file))).toBeTruthy(); - }); - - // Check if the the generated plugin works successfully - const { stdout: stdout2 } = await run(customPluginPath, [ - "--config", - "./examples/simple/webpack.config.js", - ]); - expect(normalizeStdout(stdout2)).toContain("Hello World!"); + // Check if the the generated plugin works successfully + const { stdout: stdout2 } = await run(customPluginPath, [ + "--config", + "./examples/simple/webpack.config.js", + ]); + expect(normalizeStdout(stdout2)).toContain("Hello World!"); + }); + + it("should scaffold plugin template in the current directory", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { genPath, customPluginPath, pluginName, defaultTemplateFiles } = + dataForTests(assetsPath); + + if (!existsSync(genPath)) { + mkdirSync(genPath); + } + + const { stdout } = await runPromptWithAnswers( + genPath, + ["plugin", "./"], + [`${pluginName}${ENTER}`, ENTER], + ); + + expect(normalizeStdout(stdout)).toContain(firstPrompt); + + // Check if the output directory exists with the appropriate plugin name + expect(existsSync(customPluginPath)).toBeTruthy(); + + // Skip test in case installation fails + if (!existsSync(resolve(customPluginPath, "./package-lock.json"))) { + return; + } + + // Test regressively files are scaffolded + defaultTemplateFiles.forEach((file) => { + expect(existsSync(join(customPluginPath, file))).toBeTruthy(); }); - it("should prompt on supplying an invalid template", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stderr } = await runPromptWithAnswers(assetsPath, ["plugin", "--template=unknown"]); - - expect(stderr).toContain("unknown is not a valid template"); + // Check if the the generated plugin works successfully + const { stdout: stdout2 } = await run(customPluginPath, [ + "--config", + "./examples/simple/webpack.config.js", + ]); + expect(normalizeStdout(stdout2)).toContain("Hello World!"); + }); + + it("should prompt on supplying an invalid template", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stderr } = await runPromptWithAnswers(assetsPath, ["plugin", "--template=unknown"]); + + expect(stderr).toContain("unknown is not a valid template"); + }); + + it("recognizes '-t' as an alias for '--template'", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { defaultPluginPath, defaultTemplateFiles } = dataForTests(assetsPath); + const { stdout } = await runPromptWithAnswers( + assetsPath, + ["plugin", "-t", "default"], + [`${ENTER}`, ENTER], + ); + + expect(normalizeStdout(stdout)).toContain(firstPrompt); + + // Check if the output directory exists with the appropriate plugin name + expect(existsSync(defaultPluginPath)).toBeTruthy(); + + // Skip test in case installation fails + if (!existsSync(resolve(defaultPluginPath, "./package-lock.json"))) { + return; + } + + // Test regressively files are scaffolded + defaultTemplateFiles.forEach((file) => { + expect(existsSync(join(defaultPluginPath, file))).toBeTruthy(); }); - it("recognizes '-t' as an alias for '--template'", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { defaultPluginPath, defaultTemplateFiles } = dataForTests(assetsPath); - const { stdout } = await runPromptWithAnswers( - assetsPath, - ["plugin", "-t", "default"], - [`${ENTER}`, ENTER], - ); - - expect(normalizeStdout(stdout)).toContain(firstPrompt); - - // Check if the output directory exists with the appropriate plugin name - expect(existsSync(defaultPluginPath)).toBeTruthy(); - - // Skip test in case installation fails - if (!existsSync(resolve(defaultPluginPath, "./package-lock.json"))) { - return; - } - - // Test regressively files are scaffolded - defaultTemplateFiles.forEach((file) => { - expect(existsSync(join(defaultPluginPath, file))).toBeTruthy(); - }); - - // Check if the the generated plugin works successfully - const { stdout: stdout2 } = await run(defaultPluginPath, [ - "--config", - "./examples/simple/webpack.config.js", - ]); - expect(normalizeStdout(stdout2)).toContain("Hello World!"); + // Check if the the generated plugin works successfully + const { stdout: stdout2 } = await run(defaultPluginPath, [ + "--config", + "./examples/simple/webpack.config.js", + ]); + expect(normalizeStdout(stdout2)).toContain("Hello World!"); + }); + + it("uses yarn as the package manager when opted", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { defaultPluginPath, defaultTemplateFiles } = dataForTests(assetsPath); + const { stdout } = await runPromptWithAnswers( + assetsPath, + ["plugin"], + [`${ENTER}`, `${DOWN}${ENTER}`], + ); + + expect(normalizeStdout(stdout)).toContain(firstPrompt); + + // Check if the output directory exists with the appropriate plugin name + expect(existsSync(defaultPluginPath)).toBeTruthy(); + + // Skip test in case installation fails + if (!existsSync(resolve(defaultPluginPath, "./yarn.lock"))) { + return; + } + + // Test regressively files are scaffolded + const files = [ + ...defaultTemplateFiles.filter((file) => file !== "package-lock.json"), + "yarn.lock", + ]; + + files.forEach((file) => { + expect(existsSync(join(defaultPluginPath, file))).toBeTruthy(); }); - it("uses yarn as the package manager when opted", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { defaultPluginPath, defaultTemplateFiles } = dataForTests(assetsPath); - const { stdout } = await runPromptWithAnswers( - assetsPath, - ["plugin"], - [`${ENTER}`, `${DOWN}${ENTER}`], - ); - - expect(normalizeStdout(stdout)).toContain(firstPrompt); - - // Check if the output directory exists with the appropriate plugin name - expect(existsSync(defaultPluginPath)).toBeTruthy(); - - // Skip test in case installation fails - if (!existsSync(resolve(defaultPluginPath, "./yarn.lock"))) { - return; - } - - // Test regressively files are scaffolded - const files = [ - ...defaultTemplateFiles.filter((file) => file !== "package-lock.json"), - "yarn.lock", - ]; - - files.forEach((file) => { - expect(existsSync(join(defaultPluginPath, file))).toBeTruthy(); - }); - - // Check if the the generated plugin works successfully - const { stdout: stdout2 } = await run(defaultPluginPath, [ - "--config", - "./examples/simple/webpack.config.js", - ]); - expect(normalizeStdout(stdout2)).toContain("Hello World!"); - }); + // Check if the the generated plugin works successfully + const { stdout: stdout2 } = await run(defaultPluginPath, [ + "--config", + "./examples/simple/webpack.config.js", + ]); + expect(normalizeStdout(stdout2)).toContain("Hello World!"); + }); }); diff --git a/test/serve/basic/dev-server-output-public-path.config.js b/test/serve/basic/dev-server-output-public-path.config.js index dc00230f01c..338ceb1b075 100644 --- a/test/serve/basic/dev-server-output-public-path.config.js +++ b/test/serve/basic/dev-server-output-public-path.config.js @@ -2,11 +2,11 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); const { devServerConfig } = require("./helper/base-dev-server.config"); module.exports = { - mode: "development", - devtool: false, - output: { - publicPath: "/my-public-path/", - }, - devServer: devServerConfig, - plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], + mode: "development", + devtool: false, + output: { + publicPath: "/my-public-path/", + }, + devServer: devServerConfig, + plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], }; diff --git a/test/serve/basic/function-with-argv.config.js b/test/serve/basic/function-with-argv.config.js index 8102f9ccaf2..bd6df172702 100644 --- a/test/serve/basic/function-with-argv.config.js +++ b/test/serve/basic/function-with-argv.config.js @@ -2,18 +2,18 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); const { isDevServer4 } = require("../../utils/test-utils"); module.exports = (env, argv) => { - console.log(argv); + console.log(argv); - return { - mode: "development", - devtool: false, - plugins: [new WebpackCLITestPlugin(["mode"], false, "hooks.compilation.taps")], - devServer: isDevServer4 - ? { - client: { - logging: "info", - }, - } - : {}, - }; + return { + mode: "development", + devtool: false, + plugins: [new WebpackCLITestPlugin(["mode"], false, "hooks.compilation.taps")], + devServer: isDevServer4 + ? { + client: { + logging: "info", + }, + } + : {}, + }; }; diff --git a/test/serve/basic/function-with-env.config.js b/test/serve/basic/function-with-env.config.js index 43b163e1231..b2b0d809e4d 100644 --- a/test/serve/basic/function-with-env.config.js +++ b/test/serve/basic/function-with-env.config.js @@ -2,18 +2,18 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); const { isDevServer4 } = require("../../utils/test-utils"); module.exports = (env) => { - console.log(env); + console.log(env); - return { - mode: "development", - devtool: false, - plugins: [new WebpackCLITestPlugin(["mode"], false, "hooks.compilation.taps")], - devServer: isDevServer4 - ? { - client: { - logging: "info", - }, - } - : {}, - }; + return { + mode: "development", + devtool: false, + plugins: [new WebpackCLITestPlugin(["mode"], false, "hooks.compilation.taps")], + devServer: isDevServer4 + ? { + client: { + logging: "info", + }, + } + : {}, + }; }; diff --git a/test/serve/basic/helper/base-dev-server.config.js b/test/serve/basic/helper/base-dev-server.config.js index 617f1522a02..6515a7f8c99 100644 --- a/test/serve/basic/helper/base-dev-server.config.js +++ b/test/serve/basic/helper/base-dev-server.config.js @@ -3,18 +3,18 @@ const { isDevServer4 } = require("../../../utils/test-utils"); let devServerConfig = {}; if (isDevServer4) { - devServerConfig = { - devMiddleware: { - publicPath: "/dev-server-my-public-path/", - }, - client: { - logging: "info", - }, - }; + devServerConfig = { + devMiddleware: { + publicPath: "/dev-server-my-public-path/", + }, + client: { + logging: "info", + }, + }; } else { - devServerConfig = { - publicPath: "/dev-server-my-public-path/", - }; + devServerConfig = { + publicPath: "/dev-server-my-public-path/", + }; } module.exports = devServerConfig; diff --git a/test/serve/basic/log.config.js b/test/serve/basic/log.config.js index 9384297c7eb..2a882692b63 100644 --- a/test/serve/basic/log.config.js +++ b/test/serve/basic/log.config.js @@ -1,15 +1,15 @@ const { isDevServer4 } = require("../../utils/test-utils"); module.exports = { - mode: "development", - infrastructureLogging: { - level: "log", - }, - devServer: isDevServer4 - ? { - client: { - logging: "info", - }, - } - : {}, + mode: "development", + infrastructureLogging: { + level: "log", + }, + devServer: isDevServer4 + ? { + client: { + logging: "info", + }, + } + : {}, }; diff --git a/test/serve/basic/multi-dev-server-output-public-path.config.js b/test/serve/basic/multi-dev-server-output-public-path.config.js index 64761c54c2d..a397bcb27da 100644 --- a/test/serve/basic/multi-dev-server-output-public-path.config.js +++ b/test/serve/basic/multi-dev-server-output-public-path.config.js @@ -3,33 +3,33 @@ const { devServerConfig } = require("./helper/base-dev-server.config"); const { isDevServer4 } = require("../../utils/test-utils"); module.exports = [ - { - name: "one", - mode: "development", - devtool: false, - entry: "./src/other.js", - output: { - filename: "first-output/[name].js", - }, - devServer: isDevServer4 - ? { - client: { - logging: "info", - }, - } - : {}, - plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], + { + name: "one", + mode: "development", + devtool: false, + entry: "./src/other.js", + output: { + filename: "first-output/[name].js", }, - { - name: "two", - mode: "development", - devtool: false, - stats: "detailed", - output: { - publicPath: "/my-public-path/", - filename: "second-output/[name].js", - }, - devServer: devServerConfig, - plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], + devServer: isDevServer4 + ? { + client: { + logging: "info", + }, + } + : {}, + plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], + }, + { + name: "two", + mode: "development", + devtool: false, + stats: "detailed", + output: { + publicPath: "/my-public-path/", + filename: "second-output/[name].js", }, + devServer: devServerConfig, + plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], + }, ]; diff --git a/test/serve/basic/multi-dev-server.config.js b/test/serve/basic/multi-dev-server.config.js index 41afff3d1c7..5920ce9aec6 100644 --- a/test/serve/basic/multi-dev-server.config.js +++ b/test/serve/basic/multi-dev-server.config.js @@ -5,30 +5,30 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); const { devServerConfig } = require("./helper/base-dev-server.config"); module.exports = async () => [ - { - name: "one", - mode: "development", - devtool: false, - output: { - filename: "first-output/[name].js", - }, - devServer: { - ...devServerConfig, - port: await getPort(), - }, - plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], + { + name: "one", + mode: "development", + devtool: false, + output: { + filename: "first-output/[name].js", }, - { - name: "two", - mode: "development", - devtool: false, - entry: "./src/other.js", - output: { - filename: "second-output/[name].js", - }, - devServer: { - ...devServerConfig, - port: await getPort(), - }, + devServer: { + ...devServerConfig, + port: await getPort(), }, + plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], + }, + { + name: "two", + mode: "development", + devtool: false, + entry: "./src/other.js", + output: { + filename: "second-output/[name].js", + }, + devServer: { + ...devServerConfig, + port: await getPort(), + }, + }, ]; diff --git a/test/serve/basic/multi-output-public-path.config.js b/test/serve/basic/multi-output-public-path.config.js index 5058d96ceb7..9ad11dbe0d6 100644 --- a/test/serve/basic/multi-output-public-path.config.js +++ b/test/serve/basic/multi-output-public-path.config.js @@ -2,30 +2,30 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); const { isDevServer4 } = require("../../utils/test-utils"); module.exports = [ - { - name: "one", - mode: "development", - devtool: false, - output: { - publicPath: "/my-public-path/", - filename: "first-output/[name].js", - }, - plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], - devServer: isDevServer4 - ? { - client: { - logging: "info", - }, - } - : {}, + { + name: "one", + mode: "development", + devtool: false, + output: { + publicPath: "/my-public-path/", + filename: "first-output/[name].js", }, - { - name: "two", - mode: "development", - devtool: false, - entry: "./src/other.js", - output: { - filename: "second-output/[name].js", - }, + plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], + devServer: isDevServer4 + ? { + client: { + logging: "info", + }, + } + : {}, + }, + { + name: "two", + mode: "development", + devtool: false, + entry: "./src/other.js", + output: { + filename: "second-output/[name].js", }, + }, ]; diff --git a/test/serve/basic/multi.config.js b/test/serve/basic/multi.config.js index 190d78bdc34..841d682573b 100644 --- a/test/serve/basic/multi.config.js +++ b/test/serve/basic/multi.config.js @@ -2,23 +2,23 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); const { devServerConfig } = require("./helper/base-dev-server.config"); module.exports = [ - { - name: "one", - mode: "development", - devtool: false, - output: { - filename: "first-output/[name].js", - }, - devServer: devServerConfig, - plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], + { + name: "one", + mode: "development", + devtool: false, + output: { + filename: "first-output/[name].js", }, - { - name: "two", - mode: "development", - devtool: false, - entry: "./src/other.js", - output: { - filename: "second-output/[name].js", - }, + devServer: devServerConfig, + plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], + }, + { + name: "two", + mode: "development", + devtool: false, + entry: "./src/other.js", + output: { + filename: "second-output/[name].js", }, + }, ]; diff --git a/test/serve/basic/multiple-dev-server.config.js b/test/serve/basic/multiple-dev-server.config.js index f43310fe3cc..73fb17db397 100644 --- a/test/serve/basic/multiple-dev-server.config.js +++ b/test/serve/basic/multiple-dev-server.config.js @@ -2,25 +2,25 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); const { devServerConfig } = require("./helper/base-dev-server.config"); module.exports = [ - { - name: "one", - mode: "development", - devtool: false, - output: { - filename: "first-output/[name].js", - }, - devServer: devServerConfig, - plugins: [new WebpackCLITestPlugin(["mode", "output"], false)], + { + name: "one", + mode: "development", + devtool: false, + output: { + filename: "first-output/[name].js", }, - { - name: "two", - mode: "development", - devtool: false, - entry: "./src/other.js", - output: { - filename: "first-output/[name].js", - }, - devServer: devServerConfig, - plugins: [new WebpackCLITestPlugin(["mode", "output"], false)], + devServer: devServerConfig, + plugins: [new WebpackCLITestPlugin(["mode", "output"], false)], + }, + { + name: "two", + mode: "development", + devtool: false, + entry: "./src/other.js", + output: { + filename: "first-output/[name].js", }, + devServer: devServerConfig, + plugins: [new WebpackCLITestPlugin(["mode", "output"], false)], + }, ]; diff --git a/test/serve/basic/output-public-path.config.js b/test/serve/basic/output-public-path.config.js index 0c09899f5ee..6b1a09c8571 100644 --- a/test/serve/basic/output-public-path.config.js +++ b/test/serve/basic/output-public-path.config.js @@ -2,17 +2,17 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); const { isDevServer4 } = require("../../utils/test-utils"); module.exports = { - mode: "development", - devtool: false, - output: { - publicPath: "/my-public-path/", - }, - plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], - devServer: isDevServer4 - ? { - client: { - logging: "info", - }, - } - : {}, + mode: "development", + devtool: false, + output: { + publicPath: "/my-public-path/", + }, + plugins: [new WebpackCLITestPlugin(["mode", "output"], false, "hooks.compilation.taps")], + devServer: isDevServer4 + ? { + client: { + logging: "info", + }, + } + : {}, }; diff --git a/test/serve/basic/same-ports-dev-serever.config.js b/test/serve/basic/same-ports-dev-serever.config.js index d0c061494e7..307e5f5ce35 100644 --- a/test/serve/basic/same-ports-dev-serever.config.js +++ b/test/serve/basic/same-ports-dev-serever.config.js @@ -1,25 +1,25 @@ module.exports = [ - { - name: "one", - mode: "development", - devtool: false, - output: { - filename: "first-output/[name].js", - }, - devServer: { - port: 8081, - }, + { + name: "one", + mode: "development", + devtool: false, + output: { + filename: "first-output/[name].js", }, - { - name: "two", - mode: "development", - devtool: false, - entry: "./src/other.js", - output: { - filename: "second-output/[name].js", - }, - devServer: { - port: 8081, - }, + devServer: { + port: 8081, }, + }, + { + name: "two", + mode: "development", + devtool: false, + entry: "./src/other.js", + output: { + filename: "second-output/[name].js", + }, + devServer: { + port: 8081, + }, + }, ]; diff --git a/test/serve/basic/serve-basic.test.js b/test/serve/basic/serve-basic.test.js index 17176322e59..e5c69dde8d9 100644 --- a/test/serve/basic/serve-basic.test.js +++ b/test/serve/basic/serve-basic.test.js @@ -4,605 +4,601 @@ const path = require("path"); // eslint-disable-next-line node/no-unpublished-require const getPort = require("get-port"); const { - runWatch, - isWebpack5, - normalizeStderr, - normalizeStdout, - isDevServer4, + runWatch, + isWebpack5, + normalizeStderr, + normalizeStdout, + isDevServer4, } = require("../../utils/test-utils"); const testPath = path.resolve(__dirname); describe("basic serve usage", () => { - let port; + let port; + + beforeEach(async () => { + port = await getPort(); + }); + + it("should work", async () => { + const { stderr, stdout } = await runWatch(__dirname, ["serve"]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("main.js"); + }); + + it('should work with the "--config" option', async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "serve", + "--config", + "serve.config.js", + "--port", + port, + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("main.js"); + }); + + it('should work with the "--config" and "--env" options', async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "serve", + "--config", + "function-with-env.config.js", + "--env", + "foo=bar", + "--port", + port, + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("WEBPACK_SERVE: true"); + expect(stdout).toContain("foo: 'bar'"); + expect(stdout).toContain("development"); + }); + + it('should work with the "--config" and "--env" options and expose dev server options', async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "serve", + "--config", + "function-with-argv.config.js", + "--env", + "foo=bar", + "--hot", + "--port", + port, + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("hot: true"); + expect(stdout).toContain("WEBPACK_SERVE: true"); + expect(stdout).toContain("foo: 'bar'"); + expect(stdout).toContain("development"); + }); + + it("should work in multi compiler mode", async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "serve", + "--config", + "multi.config.js", + "--port", + port, + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("one"); + expect(stdout).toContain("first-output/main.js"); + expect(stdout).toContain("two"); + expect(stdout).toContain("second-output/main.js"); + }); + + // TODO need fix in future, edge case + it.skip("should work in multi compiler mode with multiple dev servers", async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "serve", + "--config", + "multi-dev-server.config.js", + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("one"); + expect(stdout).toContain("first-output/main.js"); + expect(stdout).toContain("two"); + expect(stdout).toContain("second-output/main.js"); + }); + + it('should work with the "--mode" option', async () => { + const { stderr, stdout } = await runWatch(__dirname, ["serve"]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("development"); + expect(stdout).toContain("main.js"); + }); + + it('should work with the "--stats" option', async () => { + const { stderr, stdout } = await runWatch(__dirname, ["serve", "--stats"]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain(isWebpack5 ? "compiled successfully" : "Version: webpack"); + }); + + it('should work with the "--stats verbose" option', async () => { + const { stderr, stdout } = await runWatch(__dirname, ["serve", "--stats", "verbose"]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + const isMacOS = process.platform === "darwin"; + + if (!isMacOS) { + expect(stdout).toContain( + isWebpack5 ? "from webpack.Compiler" : "webpack.buildChunkGraph.visitModules", + ); + } + expect(stdout).toContain("main.js"); + }); + + it('should work with the "--mode" option #2', async () => { + const { stderr, stdout } = await runWatch(__dirname, ["serve", "--mode", "production"]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - beforeEach(async () => { - port = await getPort(); - }); - - it("should work", async () => { - const { stderr, stdout } = await runWatch(__dirname, ["serve"]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("main.js"); - }); - - it('should work with the "--config" option', async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "serve", - "--config", - "serve.config.js", - "--port", - port, - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("main.js"); - }); - - it('should work with the "--config" and "--env" options', async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "serve", - "--config", - "function-with-env.config.js", - "--env", - "foo=bar", - "--port", - port, - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("WEBPACK_SERVE: true"); - expect(stdout).toContain("foo: 'bar'"); - expect(stdout).toContain("development"); - }); - - it('should work with the "--config" and "--env" options and expose dev server options', async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "serve", - "--config", - "function-with-argv.config.js", - "--env", - "foo=bar", - "--hot", - "--port", - port, - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("hot: true"); - expect(stdout).toContain("WEBPACK_SERVE: true"); - expect(stdout).toContain("foo: 'bar'"); - expect(stdout).toContain("development"); - }); - - it("should work in multi compiler mode", async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "serve", - "--config", - "multi.config.js", - "--port", - port, - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("one"); - expect(stdout).toContain("first-output/main.js"); - expect(stdout).toContain("two"); - expect(stdout).toContain("second-output/main.js"); - }); - - // TODO need fix in future, edge case - it.skip("should work in multi compiler mode with multiple dev servers", async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "serve", - "--config", - "multi-dev-server.config.js", - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("one"); - expect(stdout).toContain("first-output/main.js"); - expect(stdout).toContain("two"); - expect(stdout).toContain("second-output/main.js"); - }); - - it('should work with the "--mode" option', async () => { - const { stderr, stdout } = await runWatch(__dirname, ["serve"]); + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toContain("production"); + expect(stdout).toContain("main.js"); + }); - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } + it('should work with the "--mode" option #3', async () => { + const { stderr, stdout } = await runWatch(__dirname, ["serve", "--mode", "development"]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toContain("development"); - expect(stdout).toContain("main.js"); - }); + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } - it('should work with the "--stats" option', async () => { - const { stderr, stdout } = await runWatch(__dirname, ["serve", "--stats"]); + expect(stdout).toContain("development"); + expect(stdout).toContain("main.js"); + }); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + it('should work with the "--progress" option', async () => { + const { stderr, stdout } = await runWatch(__dirname, ["serve", "--progress"]); - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain(isWebpack5 ? "compiled successfully" : "Version: webpack"); - }); + expect(stderr).toContain("webpack.Progress"); - it('should work with the "--stats verbose" option', async () => { - const { stderr, stdout } = await runWatch(__dirname, ["serve", "--stats", "verbose"]); + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("main.js"); + }); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + it('should work with the "--progress" option using the "profile" value', async () => { + const { stderr, stdout } = await runWatch(__dirname, ["serve", "--progress", "profile"]); - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } + expect(stderr).toContain("webpack.Progress"); - const isMacOS = process.platform === "darwin"; + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } - if (!isMacOS) { - expect(stdout).toContain( - isWebpack5 ? "from webpack.Compiler" : "webpack.buildChunkGraph.visitModules", - ); - } - expect(stdout).toContain("main.js"); - }); + expect(stdout).toContain("main.js"); + }); - it('should work with the "--mode" option #2', async () => { - const { stderr, stdout } = await runWatch(__dirname, ["serve", "--mode", "production"]); + it('should work with the "--client-log-level" option', async () => { + const { stdout, stderr } = await runWatch(testPath, [ + "serve", + isDevServer4 ? "--client-logging" : "--client-log-level", + "info", + ]); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("main.js"); + }); - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } + it('should work with the "--port" option', async () => { + const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port]); - expect(stdout).toContain("production"); - expect(stdout).toContain("main.js"); - }); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("main.js"); + }); - it('should work with the "--mode" option #3', async () => { - const { stderr, stdout } = await runWatch(__dirname, ["serve", "--mode", "development"]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("development"); - expect(stdout).toContain("main.js"); - }); - - it('should work with the "--progress" option', async () => { - const { stderr, stdout } = await runWatch(__dirname, ["serve", "--progress"]); - - expect(stderr).toContain("webpack.Progress"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("main.js"); - }); - - it('should work with the "--progress" option using the "profile" value', async () => { - const { stderr, stdout } = await runWatch(__dirname, ["serve", "--progress", "profile"]); - - expect(stderr).toContain("webpack.Progress"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("main.js"); - }); - - it('should work with the "--client-log-level" option', async () => { - const { stdout, stderr } = await runWatch(testPath, [ - "serve", - isDevServer4 ? "--client-logging" : "--client-log-level", - "info", - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("main.js"); - }); - - it('should work with the "--port" option', async () => { - const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("main.js"); - }); - - it('should work with the "--hot" option', async () => { - const { stderr, stdout } = await runWatch(__dirname, ["serve", "--hot"]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("main.js"); - }); - - it('should work with the "--no-hot" option', async () => { - const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port, "--no-hot"]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - expect(stdout).toContain("main.js"); - }); - - it('should work with the "--hot" option using the "only" value', async () => { - const { stdout, stderr } = await runWatch(testPath, [ - "serve", - "--port", - port, - isDevServer4 ? "--hot=only" : "--hot-only", - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toContain("HotModuleReplacementPlugin"); - expect(stdout).toContain("main.js"); - }); - - it('should work with "--hot" and "--port" options', async () => { - const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port, "--hot"]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toContain("HotModuleReplacementPlugin"); - expect(stdout).toContain("main.js"); - }); - - it('should work with the "--hot" and "--progress" options', async () => { - const { stdout, stderr } = await runWatch(testPath, [ - "serve", - "--port", - port, - "--hot", - "--progress", - ]); - - expect(stderr).toContain("webpack.Progress"); + it('should work with the "--hot" option', async () => { + const { stderr, stdout } = await runWatch(__dirname, ["serve", "--hot"]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("main.js"); + }); + + it('should work with the "--no-hot" option', async () => { + const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port, "--no-hot"]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + expect(stdout).toContain("main.js"); + }); + + it('should work with the "--hot" option using the "only" value', async () => { + const { stdout, stderr } = await runWatch(testPath, [ + "serve", + "--port", + port, + isDevServer4 ? "--hot=only" : "--hot-only", + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toContain("HotModuleReplacementPlugin"); + expect(stdout).toContain("main.js"); + }); + + it('should work with "--hot" and "--port" options', async () => { + const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port, "--hot"]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toContain("HotModuleReplacementPlugin"); + expect(stdout).toContain("main.js"); + }); + + it('should work with the "--hot" and "--progress" options', async () => { + const { stdout, stderr } = await runWatch(testPath, [ + "serve", + "--port", + port, + "--hot", + "--progress", + ]); + + expect(stderr).toContain("webpack.Progress"); + expect(stdout).toContain("HotModuleReplacementPlugin"); + expect(stdout).toContain("main.js"); + }); + + it('should work with the default "publicPath" option', async () => { + const { stderr, stdout } = await runWatch(__dirname, ["serve"]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("main.js"); + }); + + it('should work with the "--output-public-path" option', async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "serve", + "--output-public-path", + "/my-public-path/", + "--stats", + "verbose", + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isWebpack5) { + expect(stdout).toContain("/my-public-path/"); + + if (isDevServer4) { expect(stdout).toContain("HotModuleReplacementPlugin"); - expect(stdout).toContain("main.js"); - }); - - it('should work with the default "publicPath" option', async () => { - const { stderr, stdout } = await runWatch(__dirname, ["serve"]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("main.js"); - }); - - it('should work with the "--output-public-path" option', async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "serve", - "--output-public-path", - "/my-public-path/", - "--stats", - "verbose", - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isWebpack5) { - expect(stdout).toContain("/my-public-path/"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("main.js"); - } else { - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - } - }); - - it('should respect the "publicPath" option from configuration', async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "serve", - "--config", - "output-public-path.config.js", - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("main.js"); - expect(stdout).toContain("/my-public-path/"); - }); - - it('should respect the "publicPath" option from configuration using multi compiler mode', async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "serve", - "--config", - "multi-output-public-path.config.js", - "--port", - port, - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("one"); - expect(stdout).toContain("first-output/main.js"); - expect(stdout).toContain("two"); - expect(stdout).toContain("second-output/main.js"); - expect(stdout).toContain("/my-public-path/"); - }); - - it('should respect the "publicPath" option from configuration (from the "devServer" options)', async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "serve", - "--config", - "dev-server-output-public-path.config.js", - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("main.js"); - }); - - it('should work with the "--open" option', async () => { - const { stdout, stderr } = await runWatch(testPath, ["serve", "--open", "--port", port]); - - if (isDevServer4) { - let normalizedStderr = normalizeStderr(stderr); - - if (/wait until bundle finished/.test(normalizedStderr)) { - normalizedStderr = normalizedStderr.split("\n"); - - const waitIndex = normalizedStderr.findIndex((item) => - /wait until bundle finished/.test(item), - ); - - if (waitIndex !== -1) { - normalizedStderr.splice(waitIndex, 1); - } - - normalizedStderr = normalizedStderr.join("\n"); - } - - expect(normalizedStderr).toMatchSnapshot("stderr"); - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("main.js"); - }); - - it('should respect the "publicPath" option from configuration using multi compiler mode (from the "devServer" options)', async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "serve", - "--config", - "multi-dev-server-output-public-path.config.js", - "--port", - port, - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("one"); - expect(stdout).toContain("first-output/main.js"); - expect(stdout).toContain("two"); - expect(stdout).toContain("second-output/main.js"); - }); - - it("should work with entries syntax", async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "serve", - "./src/entry.js", - "--port", - port, - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("development"); - }); - - it("should work and log warning on the `watch option in a configuration", async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "serve", - "--config", - "./watch.config.js", - "--port", - port, - ]); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } - - expect(stdout).toContain("development"); - }); - - it("should log used supplied config with serve", async () => { - const { stderr, stdout } = await runWatch( - __dirname, - ["serve", "--config", "log.config.js", "--port", port], - { - killString: /Compiler is watching files for updates\.\.\./, - }, - ); - - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toBeTruthy(); - }); - - it("should log error on using '--watch' flag with serve", async () => { - const { exitCode, stdout, stderr } = await runWatch(testPath, ["serve", "--watch"]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it("should log error on using '-w' alias with serve", async () => { - const { exitCode, stdout, stderr } = await runWatch(testPath, ["serve", "-w"]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it("should log an error on unknown flag", async () => { - const { exitCode, stdout, stderr } = await runWatch(testPath, [ - "serve", - "--port", - port, - "--unknown-flag", - ]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it('should work with the "stats" option in config', async () => { - const { stderr, stdout } = await runWatch( - __dirname, - ["serve", "--config", "stats.config.js"], - { - killString: /Compiled successfully|modules/i, - }, + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("main.js"); + } else { + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + } + }); + + it('should respect the "publicPath" option from configuration', async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "serve", + "--config", + "output-public-path.config.js", + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("main.js"); + expect(stdout).toContain("/my-public-path/"); + }); + + it('should respect the "publicPath" option from configuration using multi compiler mode', async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "serve", + "--config", + "multi-output-public-path.config.js", + "--port", + port, + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("one"); + expect(stdout).toContain("first-output/main.js"); + expect(stdout).toContain("two"); + expect(stdout).toContain("second-output/main.js"); + expect(stdout).toContain("/my-public-path/"); + }); + + it('should respect the "publicPath" option from configuration (from the "devServer" options)', async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "serve", + "--config", + "dev-server-output-public-path.config.js", + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("main.js"); + }); + + it('should work with the "--open" option', async () => { + const { stdout, stderr } = await runWatch(testPath, ["serve", "--open", "--port", port]); + + if (isDevServer4) { + let normalizedStderr = normalizeStderr(stderr); + + if (/wait until bundle finished/.test(normalizedStderr)) { + normalizedStderr = normalizedStderr.split("\n"); + + const waitIndex = normalizedStderr.findIndex((item) => + /wait until bundle finished/.test(item), ); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).toContain(isWebpack5 ? "compiled successfully" : "modules"); - expect(stdout.match(/HotModuleReplacementPlugin/g)).toBeNull(); - }); - - it("should throw error when same ports in multicompiler", async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "serve", - "--config", - "same-ports-dev-serever.config.js", - ]); + if (waitIndex !== -1) { + normalizedStderr.splice(waitIndex, 1); + } - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + normalizedStderr = normalizedStderr.join("\n"); + } + + expect(normalizedStderr).toMatchSnapshot("stderr"); + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("main.js"); + }); + + it('should respect the "publicPath" option from configuration using multi compiler mode (from the "devServer" options)', async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "serve", + "--config", + "multi-dev-server-output-public-path.config.js", + "--port", + port, + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("one"); + expect(stdout).toContain("first-output/main.js"); + expect(stdout).toContain("two"); + expect(stdout).toContain("second-output/main.js"); + }); + + it("should work with entries syntax", async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "serve", + "./src/entry.js", + "--port", + port, + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("development"); + }); + + it("should work and log warning on the `watch option in a configuration", async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "serve", + "--config", + "./watch.config.js", + "--port", + port, + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } + + expect(stdout).toContain("development"); + }); + + it("should log used supplied config with serve", async () => { + const { stderr, stdout } = await runWatch( + __dirname, + ["serve", "--config", "log.config.js", "--port", port], + { + killString: /Compiler is watching files for updates\.\.\./, + }, + ); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toBeTruthy(); + }); + + it("should log error on using '--watch' flag with serve", async () => { + const { exitCode, stdout, stderr } = await runWatch(testPath, ["serve", "--watch"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should log error on using '-w' alias with serve", async () => { + const { exitCode, stdout, stderr } = await runWatch(testPath, ["serve", "-w"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should log an error on unknown flag", async () => { + const { exitCode, stdout, stderr } = await runWatch(testPath, [ + "serve", + "--port", + port, + "--unknown-flag", + ]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it('should work with the "stats" option in config', async () => { + const { stderr, stdout } = await runWatch(__dirname, ["serve", "--config", "stats.config.js"], { + killString: /Compiled successfully|modules/i, + }); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).toContain(isWebpack5 ? "compiled successfully" : "modules"); + expect(stdout.match(/HotModuleReplacementPlugin/g)).toBeNull(); + }); + + it("should throw error when same ports in multicompiler", async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "serve", + "--config", + "same-ports-dev-serever.config.js", + ]); + + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); }); diff --git a/test/serve/basic/serve.config.js b/test/serve/basic/serve.config.js index abc3475ef45..d588f89dd95 100644 --- a/test/serve/basic/serve.config.js +++ b/test/serve/basic/serve.config.js @@ -2,14 +2,14 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); const { isDevServer4 } = require("../../utils/test-utils"); module.exports = { - mode: "development", - devtool: false, - plugins: [new WebpackCLITestPlugin(["mode"], false, "hooks.compilation.taps")], - devServer: isDevServer4 - ? { - client: { - logging: "info", - }, - } - : {}, + mode: "development", + devtool: false, + plugins: [new WebpackCLITestPlugin(["mode"], false, "hooks.compilation.taps")], + devServer: isDevServer4 + ? { + client: { + logging: "info", + }, + } + : {}, }; diff --git a/test/serve/basic/stats.config.js b/test/serve/basic/stats.config.js index f01f9035323..26691e9bbed 100644 --- a/test/serve/basic/stats.config.js +++ b/test/serve/basic/stats.config.js @@ -1,18 +1,18 @@ const { isDevServer4 } = require("../../utils/test-utils"); module.exports = { - mode: "development", - devtool: false, - devServer: isDevServer4 - ? { - devMiddleware: { - stats: "minimal", - }, - client: { - logging: "info", - }, - } - : { - stats: "minimal", - }, + mode: "development", + devtool: false, + devServer: isDevServer4 + ? { + devMiddleware: { + stats: "minimal", + }, + client: { + logging: "info", + }, + } + : { + stats: "minimal", + }, }; diff --git a/test/serve/basic/watch.config.js b/test/serve/basic/watch.config.js index f0e1746a6b2..937ddcc8a8a 100644 --- a/test/serve/basic/watch.config.js +++ b/test/serve/basic/watch.config.js @@ -2,15 +2,15 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); const { isDevServer4 } = require("../../utils/test-utils"); module.exports = { - mode: "development", - devtool: false, - plugins: [new WebpackCLITestPlugin(["mode"], false, "hooks.compilation.taps")], - watch: true, - devServer: isDevServer4 - ? { - client: { - logging: "info", - }, - } - : {}, + mode: "development", + devtool: false, + plugins: [new WebpackCLITestPlugin(["mode"], false, "hooks.compilation.taps")], + watch: true, + devServer: isDevServer4 + ? { + client: { + logging: "info", + }, + } + : {}, }; diff --git a/test/serve/basic/webpack.config.js b/test/serve/basic/webpack.config.js index abc3475ef45..d588f89dd95 100644 --- a/test/serve/basic/webpack.config.js +++ b/test/serve/basic/webpack.config.js @@ -2,14 +2,14 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); const { isDevServer4 } = require("../../utils/test-utils"); module.exports = { - mode: "development", - devtool: false, - plugins: [new WebpackCLITestPlugin(["mode"], false, "hooks.compilation.taps")], - devServer: isDevServer4 - ? { - client: { - logging: "info", - }, - } - : {}, + mode: "development", + devtool: false, + plugins: [new WebpackCLITestPlugin(["mode"], false, "hooks.compilation.taps")], + devServer: isDevServer4 + ? { + client: { + logging: "info", + }, + } + : {}, }; diff --git a/test/serve/invalid-schema/invalid-schema.test.js b/test/serve/invalid-schema/invalid-schema.test.js index 81aede987c5..54504f0e50b 100644 --- a/test/serve/invalid-schema/invalid-schema.test.js +++ b/test/serve/invalid-schema/invalid-schema.test.js @@ -2,44 +2,44 @@ const { run, normalizeStderr, normalizeStdout } = require("../../utils/test-utils"); describe("invalid schema", () => { - it("should log webpack error and exit process on invalid config", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "serve", - "--config", - "./webpack.config.mock.js", - ]); - - expect(exitCode).toEqual(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it("should log webpack error and exit process on invalid flag", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "--mode", "Yukihira"]); - - expect(exitCode).toEqual(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - // TODO need fix on webpack-dev-server side - it.skip("should log webpack-dev-server error and exit process on invalid flag", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "--port", "-1"]); - - expect(exitCode).toEqual(2); - expect(normalizeStderr(stderr).replace("Port", "options.port")).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it("should log webpack-dev-server error and exit process on invalid config", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "serve", - "--config", - "./webpack-dev-server.config.mock.js", - ]); - - expect(exitCode).toEqual(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should log webpack error and exit process on invalid config", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "serve", + "--config", + "./webpack.config.mock.js", + ]); + + expect(exitCode).toEqual(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should log webpack error and exit process on invalid flag", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "--mode", "Yukihira"]); + + expect(exitCode).toEqual(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + // TODO need fix on webpack-dev-server side + it.skip("should log webpack-dev-server error and exit process on invalid flag", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "--port", "-1"]); + + expect(exitCode).toEqual(2); + expect(normalizeStderr(stderr).replace("Port", "options.port")).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should log webpack-dev-server error and exit process on invalid config", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "serve", + "--config", + "./webpack-dev-server.config.mock.js", + ]); + + expect(exitCode).toEqual(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); }); diff --git a/test/serve/invalid-schema/webpack-dev-server.config.mock.js b/test/serve/invalid-schema/webpack-dev-server.config.mock.js index 59dfc1d6c0b..e336a605fd3 100644 --- a/test/serve/invalid-schema/webpack-dev-server.config.mock.js +++ b/test/serve/invalid-schema/webpack-dev-server.config.mock.js @@ -1,6 +1,6 @@ module.exports = { - mode: "development", - devServer: { - bonjour: "", - }, + mode: "development", + devServer: { + bonjour: "", + }, }; diff --git a/test/serve/invalid-schema/webpack.config.mock.js b/test/serve/invalid-schema/webpack.config.mock.js index d436ef9ecc5..db63ed742a4 100644 --- a/test/serve/invalid-schema/webpack.config.mock.js +++ b/test/serve/invalid-schema/webpack.config.mock.js @@ -1,3 +1,3 @@ module.exports = { - mode: "Nishinoya Yuu", + mode: "Nishinoya Yuu", }; diff --git a/test/serve/serve-variable/serve-variable.test.js b/test/serve/serve-variable/serve-variable.test.js index 3ae3600b041..fb5ec31c85b 100644 --- a/test/serve/serve-variable/serve-variable.test.js +++ b/test/serve/serve-variable/serve-variable.test.js @@ -8,24 +8,24 @@ const { runWatch, normalizeStderr, isDevServer4 } = require("../../utils/test-ut const testPath = path.resolve(__dirname); describe("serve variable", () => { - let port; + let port; - beforeEach(async () => { - port = await getPort(); - }); + beforeEach(async () => { + port = await getPort(); + }); - it("compiles without flags and export variable", async () => { - const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port]); + it("compiles without flags and export variable", async () => { + const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port]); - expect(normalizeStderr(stderr)).toMatchSnapshot(); - expect(stdout).toContain("main.js"); + expect(normalizeStderr(stderr)).toMatchSnapshot(); + expect(stdout).toContain("main.js"); - if (isDevServer4) { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - } + if (isDevServer4) { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + } - expect(stdout).toContain("PASS"); - }); + expect(stdout).toContain("PASS"); + }); }); diff --git a/test/serve/serve-variable/webpack.config.js b/test/serve/serve-variable/webpack.config.js index c660b2fb547..ebf212dc7d6 100644 --- a/test/serve/serve-variable/webpack.config.js +++ b/test/serve/serve-variable/webpack.config.js @@ -1,24 +1,24 @@ const HAS_WEBPACK_SERVE = process.env.WEBPACK_SERVE || process.env.WEBPACK_DEV_SERVER; class CustomTestPlugin { - constructor(isInEnvironment) { - this.isInEnvironment = isInEnvironment; - } - apply(compiler) { - compiler.hooks.done.tap("testPlugin", () => { - if (this.isInEnvironment) { - console.log("PASS"); - } else { - console.log("FAIL"); - } - }); - } + constructor(isInEnvironment) { + this.isInEnvironment = isInEnvironment; + } + apply(compiler) { + compiler.hooks.done.tap("testPlugin", () => { + if (this.isInEnvironment) { + console.log("PASS"); + } else { + console.log("FAIL"); + } + }); + } } module.exports = (env) => { - return { - mode: "development", - devtool: false, - plugins: [new CustomTestPlugin(HAS_WEBPACK_SERVE && env.WEBPACK_SERVE)], - }; + return { + mode: "development", + devtool: false, + plugins: [new CustomTestPlugin(HAS_WEBPACK_SERVE && env.WEBPACK_SERVE)], + }; }; diff --git a/test/serve/with-custom-port/serve-custom-config.test.js b/test/serve/with-custom-port/serve-custom-config.test.js index 085759b6148..3ffa8179b69 100644 --- a/test/serve/with-custom-port/serve-custom-config.test.js +++ b/test/serve/with-custom-port/serve-custom-config.test.js @@ -8,68 +8,68 @@ const { runWatch, normalizeStderr, isDevServer4 } = require("../../utils/test-ut const testPath = path.resolve(__dirname); describe("serve with devServer in config", () => { - let port; + let port; - beforeEach(async () => { - port = await getPort(); - }); + beforeEach(async () => { + port = await getPort(); + }); - it("Should pick up the host and port from config", async () => { - const { stdout, stderr } = await runWatch(testPath, ["serve"]); + it("Should pick up the host and port from config", async () => { + const { stdout, stderr } = await runWatch(testPath, ["serve"]); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - expect(stdout).toContain("http://0.0.0.0:1234"); - } + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + expect(stdout).toContain("http://0.0.0.0:1234"); + } - expect(stdout).toContain("main.js"); - }); + expect(stdout).toContain("main.js"); + }); - it("Port flag should override the config port", async () => { - const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port]); + it("Port flag should override the config port", async () => { + const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port]); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).not.toContain("HotModuleReplacementPlugin"); - expect(stdout).toContain(`http://0.0.0.0:${port}`); - } + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).not.toContain("HotModuleReplacementPlugin"); + expect(stdout).toContain(`http://0.0.0.0:${port}`); + } - expect(stdout).toContain("main.js"); - }); + expect(stdout).toContain("main.js"); + }); - it("Passing hot flag works alongside other server config", async () => { - const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port, "--hot"]); + it("Passing hot flag works alongside other server config", async () => { + const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port, "--hot"]); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - if (isDevServer4) { - expect(stdout).toContain("HotModuleReplacementPlugin"); - } else { - expect(stdout).toContain("HotModuleReplacementPlugin"); - expect(stdout).toContain(`http://0.0.0.0:${port}`); - } + if (isDevServer4) { + expect(stdout).toContain("HotModuleReplacementPlugin"); + } else { + expect(stdout).toContain("HotModuleReplacementPlugin"); + expect(stdout).toContain(`http://0.0.0.0:${port}`); + } - expect(stdout).toContain("main.js"); - }); + expect(stdout).toContain("main.js"); + }); - it("works fine when no-hot flag is passed alongside other server config", async () => { - const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port, "--no-hot"]); + it("works fine when no-hot flag is passed alongside other server config", async () => { + const { stdout, stderr } = await runWatch(testPath, ["serve", "--port", port, "--no-hot"]); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(stdout).not.toContain("HotModuleReplacementPlugin"); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(stdout).not.toContain("HotModuleReplacementPlugin"); - if (!isDevServer4) { - // Runs at correct host and port - expect(stdout).toContain(`http://0.0.0.0:${port}`); - } + if (!isDevServer4) { + // Runs at correct host and port + expect(stdout).toContain(`http://0.0.0.0:${port}`); + } - expect(stdout).toContain("main.js"); - }); + expect(stdout).toContain("main.js"); + }); }); diff --git a/test/serve/with-custom-port/webpack.config.js b/test/serve/with-custom-port/webpack.config.js index 54496f35346..b745b59a799 100644 --- a/test/serve/with-custom-port/webpack.config.js +++ b/test/serve/with-custom-port/webpack.config.js @@ -1,12 +1,12 @@ const WebpackCLITestPlugin = require("../../utils/webpack-cli-test-plugin"); module.exports = { - mode: "development", - devtool: false, - stats: "detailed", - devServer: { - port: 1234, - host: "0.0.0.0", - }, - plugins: [new WebpackCLITestPlugin(["mode"], false, "hooks.compilation.taps")], + mode: "development", + devtool: false, + stats: "detailed", + devServer: { + port: 1234, + host: "0.0.0.0", + }, + plugins: [new WebpackCLITestPlugin(["mode"], false, "hooks.compilation.taps")], }; diff --git a/test/utils/cli-plugin-test/plugin.test.js b/test/utils/cli-plugin-test/plugin.test.js index 280a6a9b152..80b83a4c9ba 100644 --- a/test/utils/cli-plugin-test/plugin.test.js +++ b/test/utils/cli-plugin-test/plugin.test.js @@ -3,17 +3,17 @@ const { cli } = require("webpack"); const { run } = require("../test-utils"); describe("webpack-cli-test-plugin Test", () => { - it("should log the webpack configuration", async () => { - const { exitCode, stderr, stdout } = await run(__dirname); + it("should log the webpack configuration", async () => { + const { exitCode, stderr, stdout } = await run(__dirname); - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain(`target: 'node'`); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain(`target: 'node'`); - if (typeof cli !== "undefined") { - expect(stdout).toContain(`alias: { alias: [ 'alias1', 'alias2' ] }`); - } + if (typeof cli !== "undefined") { + expect(stdout).toContain(`alias: { alias: [ 'alias1', 'alias2' ] }`); + } - expect(stdout).toContain("WebpackCLITestPlugin"); - }); + expect(stdout).toContain("WebpackCLITestPlugin"); + }); }); diff --git a/test/utils/cli-plugin-test/webpack.config.js b/test/utils/cli-plugin-test/webpack.config.js index 6a777189d65..abf0957ad2d 100644 --- a/test/utils/cli-plugin-test/webpack.config.js +++ b/test/utils/cli-plugin-test/webpack.config.js @@ -3,16 +3,16 @@ const { cli } = require("webpack"); const WebpackCLITestPlugin = require("../webpack-cli-test-plugin"); module.exports = { - entry: "./main.js", - mode: "development", - target: "node", - resolve: { - alias: - typeof cli !== "undefined" - ? { - alias: ["alias1", "alias2"], - } - : {}, - }, - plugins: [new WebpackCLITestPlugin(["resolve"])], + entry: "./main.js", + mode: "development", + target: "node", + resolve: { + alias: + typeof cli !== "undefined" + ? { + alias: ["alias1", "alias2"], + } + : {}, + }, + plugins: [new WebpackCLITestPlugin(["resolve"])], }; diff --git a/test/utils/test-utils.js b/test/utils/test-utils.js index 58bf0de4bcf..c088fa89455 100644 --- a/test/utils/test-utils.js +++ b/test/utils/test-utils.js @@ -18,9 +18,9 @@ const isWebpack5 = version.startsWith("5"); let devServerVersion; try { - devServerVersion = require("webpack-dev-server/package.json").version; + devServerVersion = require("webpack-dev-server/package.json").version; } catch (error) { - // Nothing + // Nothing } const isDevServer4 = devServerVersion && devServerVersion.startsWith("4"); @@ -30,21 +30,21 @@ const ENABLE_LOG_COMPILATION = process.env.ENABLE_PIPE || false; const isWindows = process.platform === "win32"; const hyphenToUpperCase = (name) => { - if (!name) { - return name; - } + if (!name) { + return name; + } - return name.replace(/-([a-z])/g, function (g) { - return g[1].toUpperCase(); - }); + return name.replace(/-([a-z])/g, function (g) { + return g[1].toUpperCase(); + }); }; const processKill = (process) => { - if (isWindows) { - exec("taskkill /pid " + process.pid + " /T /F"); - } else { - process.kill(); - } + if (isWindows) { + exec("taskkill /pid " + process.pid + " /T /F"); + } else { + process.kill(); + } }; /** @@ -56,17 +56,17 @@ const processKill = (process) => { * @returns {Promise} */ const createProcess = (cwd, args, options) => { - const { nodeOptions = [] } = options; - const processExecutor = nodeOptions.length ? execaNode : execa; - - return processExecutor(WEBPACK_PATH, args, { - cwd: path.resolve(cwd), - reject: false, - stdio: ENABLE_LOG_COMPILATION ? "inherit" : "pipe", - maxBuffer: Infinity, - env: { WEBPACK_CLI_HELP_WIDTH: 1024 }, - ...options, - }); + const { nodeOptions = [] } = options; + const processExecutor = nodeOptions.length ? execaNode : execa; + + return processExecutor(WEBPACK_PATH, args, { + cwd: path.resolve(cwd), + reject: false, + stdio: ENABLE_LOG_COMPILATION ? "inherit" : "pipe", + maxBuffer: Infinity, + env: { WEBPACK_CLI_HELP_WIDTH: 1024 }, + ...options, + }); }; /** @@ -78,7 +78,7 @@ const createProcess = (cwd, args, options) => { * @returns {Promise} */ const run = async (cwd, args = [], options = {}) => { - return createProcess(cwd, args, options); + return createProcess(cwd, args, options); }; /** @@ -90,7 +90,7 @@ const run = async (cwd, args = [], options = {}) => { * @returns {Promise} */ const runAndGetProcess = (cwd, args = [], options = {}) => { - return createProcess(cwd, args, options); + return createProcess(cwd, args, options); }; /** @@ -102,46 +102,46 @@ const runAndGetProcess = (cwd, args = [], options = {}) => { * @returns {Object} The webpack output or Promise when nodeOptions are present */ const runWatch = (cwd, args = [], options = {}) => { - return new Promise((resolve, reject) => { - const process = createProcess(cwd, args, options); - const outputKillStr = options.killString || /webpack \d+\.\d+\.\d/; - - process.stdout.pipe( - new Writable({ - write(chunk, encoding, callback) { - const output = stripAnsi(chunk.toString("utf8")); - - if (outputKillStr.test(output)) { - processKill(process); - } - - callback(); - }, - }), - ); - - process.stderr.pipe( - new Writable({ - write(chunk, encoding, callback) { - const output = stripAnsi(chunk.toString("utf8")); - - if (outputKillStr.test(output)) { - processKill(process); - } - - callback(); - }, - }), - ); - - process - .then((result) => { - resolve(result); - }) - .catch((error) => { - reject(error); - }); - }); + return new Promise((resolve, reject) => { + const process = createProcess(cwd, args, options); + const outputKillStr = options.killString || /webpack \d+\.\d+\.\d/; + + process.stdout.pipe( + new Writable({ + write(chunk, encoding, callback) { + const output = stripAnsi(chunk.toString("utf8")); + + if (outputKillStr.test(output)) { + processKill(process); + } + + callback(); + }, + }), + ); + + process.stderr.pipe( + new Writable({ + write(chunk, encoding, callback) { + const output = stripAnsi(chunk.toString("utf8")); + + if (outputKillStr.test(output)) { + processKill(process); + } + + callback(); + }, + }), + ); + + process + .then((result) => { + resolve(result); + }) + .catch((error) => { + reject(error); + }); + }); }; /** @@ -151,254 +151,248 @@ const runWatch = (cwd, args = [], options = {}) => { * @param {string[]} answers answers to be passed to stdout for inquirer question */ const runPromptWithAnswers = (location, args, answers) => { - const process = runAndGetProcess(location, args); + const process = runAndGetProcess(location, args); - process.stdin.setDefaultEncoding("utf-8"); + process.stdin.setDefaultEncoding("utf-8"); - const delay = 2000; - let outputTimeout; - let currentAnswer = 0; + const delay = 2000; + let outputTimeout; + let currentAnswer = 0; - const writeAnswer = (output) => { - if (!answers) { - process.stdin.write(output); - process.kill(); + const writeAnswer = (output) => { + if (!answers) { + process.stdin.write(output); + process.kill(); - return; - } + return; + } - if (currentAnswer < answers.length) { - process.stdin.write(answers[currentAnswer]); - currentAnswer++; + if (currentAnswer < answers.length) { + process.stdin.write(answers[currentAnswer]); + currentAnswer++; + } + }; + + process.stdout.pipe( + new Writable({ + write(chunk, encoding, callback) { + const output = chunk.toString("utf8"); + + if (output) { + if (outputTimeout) { + clearTimeout(outputTimeout); + } + + // we must receive new stdout, then have 2 seconds + // without any stdout before writing the next answer + outputTimeout = setTimeout(() => { + writeAnswer(output); + }, delay); } - }; - process.stdout.pipe( - new Writable({ - write(chunk, encoding, callback) { - const output = chunk.toString("utf8"); - - if (output) { - if (outputTimeout) { - clearTimeout(outputTimeout); - } - - // we must receive new stdout, then have 2 seconds - // without any stdout before writing the next answer - outputTimeout = setTimeout(() => { - writeAnswer(output); - }, delay); - } - - callback(); - }, - }), - ); + callback(); + }, + }), + ); - return new Promise((resolve) => { - const obj = {}; + return new Promise((resolve) => { + const obj = {}; - let stdoutDone = false; - let stderrDone = false; + let stdoutDone = false; + let stderrDone = false; - const complete = () => { - if (outputTimeout) { - clearTimeout(outputTimeout); - } + const complete = () => { + if (outputTimeout) { + clearTimeout(outputTimeout); + } - if (stdoutDone && stderrDone) { - process.kill("SIGKILL"); - resolve(obj); - } - }; + if (stdoutDone && stderrDone) { + process.kill("SIGKILL"); + resolve(obj); + } + }; - process.stdout.pipe( - concat((result) => { - stdoutDone = true; - obj.stdout = result.toString(); + process.stdout.pipe( + concat((result) => { + stdoutDone = true; + obj.stdout = result.toString(); - complete(); - }), - ); + complete(); + }), + ); - process.stderr.pipe( - concat((result) => { - stderrDone = true; - obj.stderr = result.toString(); + process.stderr.pipe( + concat((result) => { + stderrDone = true; + obj.stderr = result.toString(); - complete(); - }), - ); - }); + complete(); + }), + ); + }); }; const normalizeVersions = (output) => { - return output.replace( - /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?/gi, - "x.x.x", - ); + return output.replace( + /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?/gi, + "x.x.x", + ); }; const normalizeCwd = (output) => { - return output - .replace(/\\/g, "/") - .replace(new RegExp(process.cwd().replace(/\\/g, "/"), "g"), ""); + return output + .replace(/\\/g, "/") + .replace(new RegExp(process.cwd().replace(/\\/g, "/"), "g"), ""); }; const normalizeError = (output) => { - return output - .replace(/SyntaxError: .+/, "SyntaxError: ") - .replace(/\s+at .+(}|\)|\d)/gs, "\n at stack"); + return output + .replace(/SyntaxError: .+/, "SyntaxError: ") + .replace(/\s+at .+(}|\)|\d)/gs, "\n at stack"); }; const normalizeStdout = (stdout) => { - if (typeof stdout !== "string") { - return stdout; - } + if (typeof stdout !== "string") { + return stdout; + } - if (stdout.length === 0) { - return stdout; - } + if (stdout.length === 0) { + return stdout; + } - let normalizedStdout = stripAnsi(stdout); - normalizedStdout = normalizeCwd(normalizedStdout); - normalizedStdout = normalizeVersions(normalizedStdout); - normalizedStdout = normalizeError(normalizedStdout); + let normalizedStdout = stripAnsi(stdout); + normalizedStdout = normalizeCwd(normalizedStdout); + normalizedStdout = normalizeVersions(normalizedStdout); + normalizedStdout = normalizeError(normalizedStdout); - return normalizedStdout; + return normalizedStdout; }; const normalizeStderr = (stderr) => { - if (typeof stderr !== "string") { - return stderr; - } - - if (stderr.length === 0) { - return stderr; - } + if (typeof stderr !== "string") { + return stderr; + } - let normalizedStderr = stripAnsi(stderr); - normalizedStderr = normalizeCwd(normalizedStderr); + if (stderr.length === 0) { + return stderr; + } - const networkIPv4 = internalIp.v4.sync(); + let normalizedStderr = stripAnsi(stderr); + normalizedStderr = normalizeCwd(normalizedStderr); - if (networkIPv4) { - normalizedStderr = normalizedStderr.replace( - new RegExp(networkIPv4, "g"), - "", - ); - } + const networkIPv4 = internalIp.v4.sync(); - const networkIPv6 = internalIp.v6.sync(); + if (networkIPv4) { + normalizedStderr = normalizedStderr.replace(new RegExp(networkIPv4, "g"), ""); + } - if (networkIPv6) { - normalizedStderr = normalizedStderr.replace( - new RegExp(networkIPv6, "g"), - "", - ); - } + const networkIPv6 = internalIp.v6.sync(); - normalizedStderr = normalizedStderr.replace(/:[0-9]+\//g, ":/"); + if (networkIPv6) { + normalizedStderr = normalizedStderr.replace(new RegExp(networkIPv6, "g"), ""); + } - if (!/On Your Network \(IPv6\)/.test(stderr)) { - // Github Actions doesnt' support IPv6 on ubuntu in some cases - normalizedStderr = normalizedStderr.split("\n"); + normalizedStderr = normalizedStderr.replace(/:[0-9]+\//g, ":/"); - const ipv4MessageIndex = normalizedStderr.findIndex((item) => - /On Your Network \(IPv4\)/.test(item), - ); + if (!/On Your Network \(IPv6\)/.test(stderr)) { + // Github Actions doesnt' support IPv6 on ubuntu in some cases + normalizedStderr = normalizedStderr.split("\n"); - if (ipv4MessageIndex !== -1) { - normalizedStderr.splice( - ipv4MessageIndex + 1, - 0, - " [webpack-dev-server] On Your Network (IPv6): http://[]:/", - ); - } + const ipv4MessageIndex = normalizedStderr.findIndex((item) => + /On Your Network \(IPv4\)/.test(item), + ); - normalizedStderr = normalizedStderr.join("\n"); + if (ipv4MessageIndex !== -1) { + normalizedStderr.splice( + ipv4MessageIndex + 1, + 0, + " [webpack-dev-server] On Your Network (IPv6): http://[]:/", + ); } - normalizedStderr = normalizeVersions(normalizedStderr); - normalizedStderr = normalizeError(normalizedStderr); + normalizedStderr = normalizedStderr.join("\n"); + } - return normalizedStderr; + normalizedStderr = normalizeVersions(normalizedStderr); + normalizedStderr = normalizeError(normalizedStderr); + + return normalizedStderr; }; const getWebpackCliArguments = (startWith) => { - if (typeof startWith === "undefined") { - return cli.getArguments(); - } + if (typeof startWith === "undefined") { + return cli.getArguments(); + } - const result = {}; + const result = {}; - for (const [name, value] of Object.entries(cli.getArguments())) { - if (name.startsWith(startWith)) { - result[name] = value; - } + for (const [name, value] of Object.entries(cli.getArguments())) { + if (name.startsWith(startWith)) { + result[name] = value; } + } - return result; + return result; }; const readFile = (path, options = {}) => - new Promise((resolve, reject) => { - fs.readFile(path, options, (err, stats) => { - if (err) { - reject(err); - } - resolve(stats); - }); + new Promise((resolve, reject) => { + fs.readFile(path, options, (err, stats) => { + if (err) { + reject(err); + } + resolve(stats); }); + }); const readdir = (path) => - new Promise((resolve, reject) => { - fs.readdir(path, (err, stats) => { - if (err) { - reject(err); - } - resolve(stats); - }); + new Promise((resolve, reject) => { + fs.readdir(path, (err, stats) => { + if (err) { + reject(err); + } + resolve(stats); }); + }); const urlAlphabet = "ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW"; const uuid = (size = 21) => { - let id = ""; - let i = size; + let id = ""; + let i = size; - while (i--) { - // `| 0` is more compact and faster than `Math.floor()`. - id += urlAlphabet[(Math.random() * 64) | 0]; - } + while (i--) { + // `| 0` is more compact and faster than `Math.floor()`. + id += urlAlphabet[(Math.random() * 64) | 0]; + } - return id; + return id; }; const uniqueDirectoryForTest = async () => { - const result = path.resolve(os.tmpdir(), uuid()); + const result = path.resolve(os.tmpdir(), uuid()); - if (!fs.existsSync(result)) { - fs.mkdirSync(result); - } + if (!fs.existsSync(result)) { + fs.mkdirSync(result); + } - return result; + return result; }; module.exports = { - run, - runAndGetProcess, - runWatch, - runPromptWithAnswers, - isWebpack5, - isDevServer4, - isWindows, - normalizeStderr, - normalizeStdout, - uniqueDirectoryForTest, - readFile, - readdir, - hyphenToUpperCase, - processKill, - getWebpackCliArguments, + run, + runAndGetProcess, + runWatch, + runPromptWithAnswers, + isWebpack5, + isDevServer4, + isWindows, + normalizeStderr, + normalizeStdout, + uniqueDirectoryForTest, + readFile, + readdir, + hyphenToUpperCase, + processKill, + getWebpackCliArguments, }; diff --git a/test/utils/test-utils.test.js b/test/utils/test-utils.test.js index efe183b6a78..3fe9eb4c9b7 100644 --- a/test/utils/test-utils.test.js +++ b/test/utils/test-utils.test.js @@ -1,94 +1,92 @@ "use strict"; const { - run, - runAndGetProcess, - hyphenToUpperCase, - uniqueDirectoryForTest, + run, + runAndGetProcess, + hyphenToUpperCase, + uniqueDirectoryForTest, } = require("./test-utils"); const ENTER = "\x0D"; describe("run function", () => { - it("should work correctly by default", async () => { - const { command, stdout, stderr } = await run(__dirname); - - expect(stderr).toBeFalsy(); - // Executes the correct command - expect(command).toContain("cli.js"); - expect(command).toContain("bin"); - expect(stdout).toBeTruthy(); - }); - - it("executes cli with passed commands and params", async () => { - const { stdout, stderr, command } = await run(__dirname, ["info", "--output", "markdown"]); - - // execution command contains info command - expect(command).toContain("info"); - expect(command).toContain("--output markdown"); - // Contains info command output - expect(stdout).toContain("System:"); - expect(stdout).toContain("Node"); - expect(stdout).toContain("npm"); - expect(stdout).toContain("Yarn"); - expect(stderr).toBeFalsy(); - }); - - it("uses default output when output param is false", async () => { - const { stdout, stderr, command } = await run(__dirname, []); - - // execution command contains info command - expect(command).not.toContain("--output-path"); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + it("should work correctly by default", async () => { + const { command, stdout, stderr } = await run(__dirname); + + expect(stderr).toBeFalsy(); + // Executes the correct command + expect(command).toContain("cli.js"); + expect(command).toContain("bin"); + expect(stdout).toBeTruthy(); + }); + + it("executes cli with passed commands and params", async () => { + const { stdout, stderr, command } = await run(__dirname, ["info", "--output", "markdown"]); + + // execution command contains info command + expect(command).toContain("info"); + expect(command).toContain("--output markdown"); + // Contains info command output + expect(stdout).toContain("System:"); + expect(stdout).toContain("Node"); + expect(stdout).toContain("npm"); + expect(stdout).toContain("Yarn"); + expect(stderr).toBeFalsy(); + }); + + it("uses default output when output param is false", async () => { + const { stdout, stderr, command } = await run(__dirname, []); + + // execution command contains info command + expect(command).not.toContain("--output-path"); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); describe("runAndGetWatchProc function", () => { - it("should work correctly by default", async () => { - const { command, stdout, stderr } = await runAndGetProcess(__dirname); - - // Executes the correct command - expect(command).toContain("cli.js"); - // Should use apply a default output dir - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); + it("should work correctly by default", async () => { + const { command, stdout, stderr } = await runAndGetProcess(__dirname); + + // Executes the correct command + expect(command).toContain("cli.js"); + // Should use apply a default output dir + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("executes cli with passed commands and params", async () => { + const { stdout, stderr, command } = await runAndGetProcess(__dirname, [ + "info", + "--output", + "markdown", + ]); + + // execution command contains info command + expect(command).toContain("info"); + expect(command).toContain("--output markdown"); + // Contains info command output + expect(stdout).toContain("System:"); + expect(stdout).toContain("Node"); + expect(stdout).toContain("npm"); + expect(stdout).toContain("Yarn"); + expect(stderr).toBeFalsy(); + }); + + it("writes to stdin", async () => { + const assetsPath = await uniqueDirectoryForTest(); + const { stdout } = await runAndGetProcess(assetsPath, ["init", "--force", "--template=mango"], { + input: ENTER, }); - it("executes cli with passed commands and params", async () => { - const { stdout, stderr, command } = await runAndGetProcess(__dirname, [ - "info", - "--output", - "markdown", - ]); - - // execution command contains info command - expect(command).toContain("info"); - expect(command).toContain("--output markdown"); - // Contains info command output - expect(stdout).toContain("System:"); - expect(stdout).toContain("Node"); - expect(stdout).toContain("npm"); - expect(stdout).toContain("Yarn"); - expect(stderr).toBeFalsy(); - }); - - it("writes to stdin", async () => { - const assetsPath = await uniqueDirectoryForTest(); - const { stdout } = await runAndGetProcess( - assetsPath, - ["init", "--force", "--template=mango"], - { input: ENTER }, - ); - - expect(stdout).toContain("Project has been initialised with webpack!"); - }); + expect(stdout).toContain("Project has been initialised with webpack!"); + }); }); describe("hyphenToUpperCase function", () => { - it("changes value from hypen to upperCase", () => { - const result = hyphenToUpperCase("test-value"); + it("changes value from hypen to upperCase", () => { + const result = hyphenToUpperCase("test-value"); - expect(result).toEqual("testValue"); - }); + expect(result).toEqual("testValue"); + }); }); diff --git a/test/utils/webpack-cli-test-plugin.js b/test/utils/webpack-cli-test-plugin.js index 963ac5ff1cc..9ed07714be2 100644 --- a/test/utils/webpack-cli-test-plugin.js +++ b/test/utils/webpack-cli-test-plugin.js @@ -1,37 +1,37 @@ class WebpackCLITestPlugin { - constructor(options, showAll = true, showHooks) { - this.opts = options; - this.showAll = showAll; - this.showHooks = showHooks; - } + constructor(options, showAll = true, showHooks) { + this.opts = options; + this.showAll = showAll; + this.showHooks = showHooks; + } - apply(compiler) { - compiler.hooks.done.tap("webpack-cli Test Plugin", () => { - if (this.showHooks) { - const identifiers = this.showHooks.split("."); + apply(compiler) { + compiler.hooks.done.tap("webpack-cli Test Plugin", () => { + if (this.showHooks) { + const identifiers = this.showHooks.split("."); - let shown = compiler; + let shown = compiler; - identifiers.forEach((identifier) => { - shown = shown[identifier]; - }); + identifiers.forEach((identifier) => { + shown = shown[identifier]; + }); - console.log(shown); - } + console.log(shown); + } - if (this.showAll) { - console.log(compiler.options); - } + if (this.showAll) { + console.log(compiler.options); + } - if (this.opts) { - this.opts.map((e) => { - const config = Object.getOwnPropertyDescriptor(compiler.options, e); + if (this.opts) { + this.opts.map((e) => { + const config = Object.getOwnPropertyDescriptor(compiler.options, e); - console.log(config.value); - }); - } + console.log(config.value); }); - } + } + }); + } } module.exports = WebpackCLITestPlugin; diff --git a/test/version/version.test.js b/test/version/version.test.js index 5d1416c7e4b..3b49b05e459 100644 --- a/test/version/version.test.js +++ b/test/version/version.test.js @@ -3,340 +3,340 @@ const { run, normalizeStderr, normalizeStdout } = require("../utils/test-utils"); describe("single version flag", () => { - it("outputs versions with command syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version"]); + it("outputs versions with command syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("outputs versions with dashed syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--version"]); + it("outputs versions with dashed syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--version"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("outputs versions with alias syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-v"]); + it("outputs versions with alias syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-v"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("outputs version with info", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--version"]); + it("outputs version with info", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--version"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("outputs version with info using option alias", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["info", "-v"]); + it("outputs version with info using option alias", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["info", "-v"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("outputs version with info using command syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "info"]); + it("outputs version with info using command syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "info"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("outputs version with info using command alias", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["v", "info"]); + it("outputs version with info using command alias", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["v", "info"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("outputs version with build", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["build", "--version"]); + it("outputs version with build", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["build", "--version"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("outputs version with bundle", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["bundle", "--version"]); + it("outputs version with bundle", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["bundle", "--version"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("outputs version with b", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["b", "--version"]); + it("outputs version with b", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["b", "--version"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("outputs version with watch", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["watch", "--version"]); + it("outputs version with watch", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["watch", "--version"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - it("outputs version with w", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["w", "--version"]); + it("outputs version with w", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["w", "--version"]); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it("outputs version with plugin", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["plugin", "--version"]); - - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); - - it("outputs version with loader", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["loader", "--version"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("outputs version with plugin", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["plugin", "--version"]); - it("outputs version with init", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["init", "--version"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("outputs version with loader", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["loader", "--version"]); - it("outputs version with serve", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "--version"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("outputs version with init", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["init", "--version"]); - it("outputs version with migrate", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["migrate", "--version"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("outputs version with serve", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "--version"]); - it("outputs version with the alias c for init", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["c", "--version"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("outputs version with migrate", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["migrate", "--version"]); - it("should log error when unknown command using command syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "unknown"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("outputs version with the alias c for init", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["c", "--version"]); - it("should log version for known command and log error for unknown command using command syntax with multi commands", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "info", "unknown"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should log error when unknown command using command syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "unknown"]); - it("should work for multiple commands", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["info", "serve", "--version"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should log version for known command and log error for unknown command using command syntax with multi commands", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "info", "unknown"]); - it("should output versions for multiple commands using command syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "info", "serve"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should work for multiple commands", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["info", "serve", "--version"]); - it("should output versions with help command using command syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "help"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should output versions for multiple commands using command syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "info", "serve"]); - it('should log version for known command and log error for unknown command using the "--version" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "abc", "--version"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should output versions with help command using command syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "help"]); - it('should log version for known command and log error for unknown command using the "-v" option', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "abc", "-v"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it('should log version for known command and log error for unknown command using the "--version" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "abc", "--version"]); - it("should not output version with help dashed", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "--help"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it('should log version for known command and log error for unknown command using the "-v" option', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["serve", "abc", "-v"]); - it("outputs versions with --color using option syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--version", "--color"], { - env: { FORCE_COLOR: true }, - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should not output version with help dashed", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "--help"]); - it("outputs versions with --no-color using option syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--version", "--no-color"], { - env: { FORCE_COLOR: true }, - }); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + it("outputs versions with --color using option syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--version", "--color"], { + env: { FORCE_COLOR: true }, }); - it("outputs versions with --color using command syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "--color"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + it("outputs versions with --no-color using option syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--version", "--no-color"], { + env: { FORCE_COLOR: true }, }); - it("outputs versions with --no-color using command syntax", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "--no-color"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("outputs versions with --color using command syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "--color"]); - it("should log error when unknown command used", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "abc"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("outputs versions with --no-color using command syntax", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "--no-color"]); - it("throws error if invalid option is passed with version command", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "--abc"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should log error when unknown command used", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "abc"]); - it("should log error when unknown command used with --version flag", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--version", "abc"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("throws error if invalid option is passed with version command", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "--abc"]); - it("throws error if invalid option is passed with --version flag", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["--version", "--abc"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should log error when unknown command used with --version flag", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--version", "abc"]); - it("should log error when unknown command used with -v alias", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-v", "abc"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("throws error if invalid option is passed with --version flag", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["--version", "--abc"]); - it("throws error if invalid option is passed with -v alias", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["-v", "--abc"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should log error when unknown command used with -v alias", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-v", "abc"]); - it('should work using command syntax with the "version" value', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "version"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("throws error if invalid option is passed with -v alias", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["-v", "--abc"]); - it('should work using command syntax and the "--version" argument', async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "--version"]); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(0); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it('should work using command syntax with the "version" value', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "version"]); - it("should log an error using command syntax with unknown argument", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "--unknown"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it('should work using command syntax and the "--version" argument', async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "--version"]); - it("should log an error using command syntax with unknown argument #2", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["version", "info", "--unknown"]); + expect(exitCode).toBe(0); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + it("should log an error using command syntax with unknown argument", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "--unknown"]); - it("should log an error using command syntax with multiple commands with unknown argument", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "version", - "info", - "serve", - "--unknown", - ]); - - expect(exitCode).toBe(2); - expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); - expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); - }); + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should log an error using command syntax with unknown argument #2", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["version", "info", "--unknown"]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); + + it("should log an error using command syntax with multiple commands with unknown argument", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "version", + "info", + "serve", + "--unknown", + ]); + + expect(exitCode).toBe(2); + expect(normalizeStderr(stderr)).toMatchSnapshot("stderr"); + expect(normalizeStdout(stdout)).toMatchSnapshot("stdout"); + }); }); diff --git a/test/watch/analyze/analyze-flag.test.js b/test/watch/analyze/analyze-flag.test.js index cee8687346d..75264bef46f 100644 --- a/test/watch/analyze/analyze-flag.test.js +++ b/test/watch/analyze/analyze-flag.test.js @@ -3,12 +3,12 @@ const { runWatch } = require("../../utils/test-utils"); describe('"analyze" option', () => { - it("should load webpack-bundle-analyzer plugin with --analyze flag", async () => { - const { stderr, stdout } = await runWatch(__dirname, ["--analyze"], { - killString: /Webpack Bundle Analyzer is started at/, - }); - - expect(stderr).toBeFalsy(); - expect(stdout).toContain("Webpack Bundle Analyzer is started at"); + it("should load webpack-bundle-analyzer plugin with --analyze flag", async () => { + const { stderr, stdout } = await runWatch(__dirname, ["--analyze"], { + killString: /Webpack Bundle Analyzer is started at/, }); + + expect(stderr).toBeFalsy(); + expect(stdout).toContain("Webpack Bundle Analyzer is started at"); + }); }); diff --git a/test/watch/analyze/analyze.config.js b/test/watch/analyze/analyze.config.js index a1671a29911..4d0783ac2d8 100644 --- a/test/watch/analyze/analyze.config.js +++ b/test/watch/analyze/analyze.config.js @@ -2,11 +2,11 @@ const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer"); module.exports = { - mode: "development", - plugins: [ - new BundleAnalyzerPlugin({ - analyzerMode: "static", - openAnalyzer: false, - }), - ], + mode: "development", + plugins: [ + new BundleAnalyzerPlugin({ + analyzerMode: "static", + openAnalyzer: false, + }), + ], }; diff --git a/test/watch/analyze/webpack.config.js b/test/watch/analyze/webpack.config.js index bbb2b37c677..23b9be1f1bd 100644 --- a/test/watch/analyze/webpack.config.js +++ b/test/watch/analyze/webpack.config.js @@ -1,4 +1,4 @@ module.exports = { - mode: "development", - plugins: [], + mode: "development", + plugins: [], }; diff --git a/test/watch/bail/bail-and-watch-webpack.config.js b/test/watch/bail/bail-and-watch-webpack.config.js index e29774ed94d..c58fb695d54 100644 --- a/test/watch/bail/bail-and-watch-webpack.config.js +++ b/test/watch/bail/bail-and-watch-webpack.config.js @@ -1,7 +1,7 @@ module.exports = { - entry: "./src/first.js", - devtool: false, - mode: "development", - bail: true, - watch: true, + entry: "./src/first.js", + devtool: false, + mode: "development", + bail: true, + watch: true, }; diff --git a/test/watch/bail/bail-multi-webpack.config.js b/test/watch/bail/bail-multi-webpack.config.js index c2890ba9fff..4fec2b3002d 100644 --- a/test/watch/bail/bail-multi-webpack.config.js +++ b/test/watch/bail/bail-multi-webpack.config.js @@ -1,21 +1,21 @@ module.exports = [ - { - devtool: false, - output: { - filename: "./dist-first.js", - }, - name: "first", - entry: "./src/first.js", - mode: "development", - bail: true, + { + devtool: false, + output: { + filename: "./dist-first.js", }, - { - devtool: false, - output: { - filename: "./dist-second.js", - }, - name: "second", - entry: "./src/second.js", - mode: "development", + name: "first", + entry: "./src/first.js", + mode: "development", + bail: true, + }, + { + devtool: false, + output: { + filename: "./dist-second.js", }, + name: "second", + entry: "./src/second.js", + mode: "development", + }, ]; diff --git a/test/watch/bail/bail-webpack.config.js b/test/watch/bail/bail-webpack.config.js index 67c7bb44a8f..0b80d86125f 100644 --- a/test/watch/bail/bail-webpack.config.js +++ b/test/watch/bail/bail-webpack.config.js @@ -1,6 +1,6 @@ module.exports = { - devtool: false, - entry: "./src/first.js", - mode: "development", - bail: true, + devtool: false, + entry: "./src/first.js", + mode: "development", + bail: true, }; diff --git a/test/watch/bail/bail.test.js b/test/watch/bail/bail.test.js index ba351e6c71d..cbd7d3fe46d 100644 --- a/test/watch/bail/bail.test.js +++ b/test/watch/bail/bail.test.js @@ -3,66 +3,66 @@ const { runWatch } = require("../../utils/test-utils"); describe('"bail" option', () => { - it('should not log warning in not watch mode without the "watch" option', async () => { - const { stderr, stdout } = await runWatch(__dirname, ["-c", "watch-webpack.config.js"]); + it('should not log warning in not watch mode without the "watch" option', async () => { + const { stderr, stdout } = await runWatch(__dirname, ["-c", "watch-webpack.config.js"]); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); - it('should not log warning without the "bail" option', async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "-c", - "no-bail-webpack.config.js", - "--watch", - ]); + it('should not log warning without the "bail" option', async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "-c", + "no-bail-webpack.config.js", + "--watch", + ]); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); - it('should not log warning without the "bail" option', async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "-c", - "no-bail-webpack.config.js", - "--watch", - ]); + it('should not log warning without the "bail" option', async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "-c", + "no-bail-webpack.config.js", + "--watch", + ]); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); - it("should log warning in watch mode", async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "-c", - "bail-webpack.config.js", - "--watch", - ]); + it("should log warning in watch mode", async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "-c", + "bail-webpack.config.js", + "--watch", + ]); - expect(stderr).toContain( - `You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.`, - ); - expect(stdout).toBeTruthy(); - }); + expect(stderr).toContain( + `You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.`, + ); + expect(stdout).toBeTruthy(); + }); - it("should log warning in watch mode", async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "-c", - "bail-and-watch-webpack.config.js", - ]); + it("should log warning in watch mode", async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "-c", + "bail-and-watch-webpack.config.js", + ]); - expect(stderr).toContain( - `You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.`, - ); - expect(stdout).toBeTruthy(); - }); + expect(stderr).toContain( + `You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.`, + ); + expect(stdout).toBeTruthy(); + }); - it("should log warning in case of multiple compilers", async () => { - const { stderr, stdout } = await runWatch(__dirname, ["-c", "multi-webpack.config.js"]); + it("should log warning in case of multiple compilers", async () => { + const { stderr, stdout } = await runWatch(__dirname, ["-c", "multi-webpack.config.js"]); - expect(stderr).toContain( - `You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.`, - ); - expect(stdout).toBeTruthy(); - }); + expect(stderr).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/watch/bail/multi-webpack.config.js b/test/watch/bail/multi-webpack.config.js index 9fe0cb532f1..a3368d3bff6 100644 --- a/test/watch/bail/multi-webpack.config.js +++ b/test/watch/bail/multi-webpack.config.js @@ -1,22 +1,22 @@ module.exports = [ - { - devtool: false, - output: { - filename: "./dist-first.js", - }, - name: "first", - entry: "./src/first.js", - mode: "development", - bail: true, - watch: true, + { + devtool: false, + output: { + filename: "./dist-first.js", }, - { - devtool: false, - output: { - filename: "./dist-second.js", - }, - name: "second", - entry: "./src/second.js", - mode: "development", + name: "first", + entry: "./src/first.js", + mode: "development", + bail: true, + watch: true, + }, + { + devtool: false, + output: { + filename: "./dist-second.js", }, + name: "second", + entry: "./src/second.js", + mode: "development", + }, ]; diff --git a/test/watch/bail/no-bail-webpack.config.js b/test/watch/bail/no-bail-webpack.config.js index b55c39fc397..4063e312cc2 100644 --- a/test/watch/bail/no-bail-webpack.config.js +++ b/test/watch/bail/no-bail-webpack.config.js @@ -1,5 +1,5 @@ module.exports = { - devtool: false, - entry: "./src/first.js", - mode: "development", + devtool: false, + entry: "./src/first.js", + mode: "development", }; diff --git a/test/watch/bail/watch-webpack.config.js b/test/watch/bail/watch-webpack.config.js index bf6be48c2c7..f2d09a86f45 100644 --- a/test/watch/bail/watch-webpack.config.js +++ b/test/watch/bail/watch-webpack.config.js @@ -1,6 +1,6 @@ module.exports = { - devtool: false, - entry: "./src/first.js", - mode: "development", - watch: true, + devtool: false, + entry: "./src/first.js", + mode: "development", + watch: true, }; diff --git a/test/watch/basic/basic.test.js b/test/watch/basic/basic.test.js index a414b432f40..1a016c13de0 100644 --- a/test/watch/basic/basic.test.js +++ b/test/watch/basic/basic.test.js @@ -8,230 +8,225 @@ const wordsInStatsv4 = ["Hash", "Built at:", "main.js"]; const wordsInStatsv5 = ["asset", "index.js", "compiled successfully"]; describe("basic", () => { - it("should work with negative value", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "-c", - "./watch.config.js", - "--no-watch", - ]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); - - it("should recompile upon file change using the `--watch` option", (done) => { - const proc = runAndGetProcess(__dirname, ["--watch", "--mode", "development"]); - - let modified = false; - - proc.stdout.on("data", (chunk) => { - const data = chunk.toString(); - - if (data.includes("index.js")) { - if (isWebpack5) { - for (const word of wordsInStatsv5) { - expect(data).toContain(word); - } - } else { - for (const word of wordsInStatsv4) { - expect(data).toContain(word); - } - } - - if (!modified) { - process.nextTick(() => { - writeFileSync( - resolve(__dirname, "./src/index.js"), - `console.log('watch flag test');\n`, - ); - }); - - modified = true; - } else { - processKill(proc); - done(); - } - } - }); + it("should work with negative value", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + "./watch.config.js", + "--no-watch", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); + + it("should recompile upon file change using the `--watch` option", (done) => { + const proc = runAndGetProcess(__dirname, ["--watch", "--mode", "development"]); + + let modified = false; + + proc.stdout.on("data", (chunk) => { + const data = chunk.toString(); + + if (data.includes("index.js")) { + if (isWebpack5) { + for (const word of wordsInStatsv5) { + expect(data).toContain(word); + } + } else { + for (const word of wordsInStatsv4) { + expect(data).toContain(word); + } + } + + if (!modified) { + process.nextTick(() => { + writeFileSync( + resolve(__dirname, "./src/index.js"), + `console.log('watch flag test');\n`, + ); + }); + + modified = true; + } else { + processKill(proc); + done(); + } + } }); - - it("should recompile upon file change using the `watch` command", (done) => { - const proc = runAndGetProcess(__dirname, ["watch", "--mode", "development"]); - - let modified = false; - - proc.stdout.on("data", (chunk) => { - const data = chunk.toString(); - - if (data.includes("index.js")) { - if (isWebpack5) { - for (const word of wordsInStatsv5) { - expect(data).toContain(word); - } - } else { - for (const word of wordsInStatsv4) { - expect(data).toContain(word); - } - } - - if (!modified) { - process.nextTick(() => { - writeFileSync( - resolve(__dirname, "./src/index.js"), - `console.log('watch flag test');\n`, - ); - }); - - modified = true; - } else { - processKill(proc); - done(); - } - } - }); + }); + + it("should recompile upon file change using the `watch` command", (done) => { + const proc = runAndGetProcess(__dirname, ["watch", "--mode", "development"]); + + let modified = false; + + proc.stdout.on("data", (chunk) => { + const data = chunk.toString(); + + if (data.includes("index.js")) { + if (isWebpack5) { + for (const word of wordsInStatsv5) { + expect(data).toContain(word); + } + } else { + for (const word of wordsInStatsv4) { + expect(data).toContain(word); + } + } + + if (!modified) { + process.nextTick(() => { + writeFileSync( + resolve(__dirname, "./src/index.js"), + `console.log('watch flag test');\n`, + ); + }); + + modified = true; + } else { + processKill(proc); + done(); + } + } }); - - it("should recompile upon file change using the `watch` command and entries syntax", (done) => { - const proc = runAndGetProcess(__dirname, [ - "watch", - "./src/entry.js", - "--mode", - "development", - ]); - - let modified = false; - - const wordsInStatsv5Entries = ["asset", "entry.js", "compiled successfully"]; - - proc.stdout.on("data", (chunk) => { - const data = chunk.toString(); - - if (data.includes("entry.js")) { - if (isWebpack5) { - for (const word of wordsInStatsv5Entries) { - expect(data).toContain(word); - } - } else { - for (const word of wordsInStatsv4) { - expect(data).toContain(word); - } - } - - if (!modified) { - process.nextTick(() => { - writeFileSync( - resolve(__dirname, "./src/entry.js"), - `console.log('watch flag test');\n`, - ); - }); - - modified = true; - } else { - processKill(proc); - done(); - } - } - }); + }); + + it("should recompile upon file change using the `watch` command and entries syntax", (done) => { + const proc = runAndGetProcess(__dirname, ["watch", "./src/entry.js", "--mode", "development"]); + + let modified = false; + + const wordsInStatsv5Entries = ["asset", "entry.js", "compiled successfully"]; + + proc.stdout.on("data", (chunk) => { + const data = chunk.toString(); + + if (data.includes("entry.js")) { + if (isWebpack5) { + for (const word of wordsInStatsv5Entries) { + expect(data).toContain(word); + } + } else { + for (const word of wordsInStatsv4) { + expect(data).toContain(word); + } + } + + if (!modified) { + process.nextTick(() => { + writeFileSync( + resolve(__dirname, "./src/entry.js"), + `console.log('watch flag test');\n`, + ); + }); + + modified = true; + } else { + processKill(proc); + done(); + } + } }); - - it("should log warning about the `watch` option in the configuration and recompile upon file change using the `watch` command", (done) => { - const proc = runAndGetProcess(__dirname, [ - "--watch", - "--mode", - "development", - "--config", - "./watch.config.js", - ]); - - let modified = false; - - proc.stdout.on("data", (chunk) => { - const data = chunk.toString(); - - if (data.includes("index.js")) { - if (isWebpack5) { - for (const word of wordsInStatsv5) { - expect(data).toContain(word); - } - } else { - for (const word of wordsInStatsv4) { - expect(data).toContain(word); - } - } - - if (!modified) { - process.nextTick(() => { - writeFileSync( - resolve(__dirname, "./src/index.js"), - `console.log('watch flag test');\n`, - ); - }); - - modified = true; - } else { - processKill(proc); - done(); - } - } - }); - - proc.stderr.on("data", (chunk) => { - const data = chunk.toString(); - - expect(data).toContain( - "No need to use the 'watch' command together with '{ watch: true }' configuration, it does not make sense.", + }); + + it("should log warning about the `watch` option in the configuration and recompile upon file change using the `watch` command", (done) => { + const proc = runAndGetProcess(__dirname, [ + "--watch", + "--mode", + "development", + "--config", + "./watch.config.js", + ]); + + let modified = false; + + proc.stdout.on("data", (chunk) => { + const data = chunk.toString(); + + if (data.includes("index.js")) { + if (isWebpack5) { + for (const word of wordsInStatsv5) { + expect(data).toContain(word); + } + } else { + for (const word of wordsInStatsv4) { + expect(data).toContain(word); + } + } + + if (!modified) { + process.nextTick(() => { + writeFileSync( + resolve(__dirname, "./src/index.js"), + `console.log('watch flag test');\n`, ); - }); + }); + + modified = true; + } else { + processKill(proc); + done(); + } + } }); - it("should log supplied config with watch", (done) => { - const proc = runAndGetProcess(__dirname, ["watch", "--config", "log.config.js"]); - const configPath = resolve(__dirname, "./log.config.js"); + proc.stderr.on("data", (chunk) => { + const data = chunk.toString(); - let stderr = ""; + expect(data).toContain( + "No need to use the 'watch' command together with '{ watch: true }' configuration, it does not make sense.", + ); + }); + }); - proc.stderr.on("data", (chunk) => { - const data = chunk.toString(); + it("should log supplied config with watch", (done) => { + const proc = runAndGetProcess(__dirname, ["watch", "--config", "log.config.js"]); + const configPath = resolve(__dirname, "./log.config.js"); - stderr += data; + let stderr = ""; - if (/Compiler finished/.test(data)) { - expect(stderr).toContain("Compiler starting..."); - expect(stderr).toContain(`Compiler is using config: '${configPath}'`); - expect(stderr).toContain("Compiler finished"); + proc.stderr.on("data", (chunk) => { + const data = chunk.toString(); - processKill(proc); - done(); - } - }); - }); + stderr += data; - it("should recompile upon file change using the `command` option and the `--watch` option and log warning", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "watch", - "--watch", - "--mode", - "development", - ]); - - expect(exitCode).toBe(2); - expect(stderr).toContain("Error: Unknown option '--watch'"); - expect(stderr).toContain("Run 'webpack --help' to see available commands and options"); - expect(stdout).toBeFalsy(); - }); + if (/Compiler finished/.test(data)) { + expect(stderr).toContain("Compiler starting..."); + expect(stderr).toContain(`Compiler is using config: '${configPath}'`); + expect(stderr).toContain("Compiler finished"); - it("should recompile upon file change using the `command` option and the `--no-watch` option and log warning", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, [ - "watch", - "--no-watch", - "--mode", - "development", - ]); - - expect(exitCode).toBe(2); - expect(stderr).toContain("Error: Unknown option '--no-watch'"); - expect(stderr).toContain("Run 'webpack --help' to see available commands and options"); - expect(stdout).toBeFalsy(); + processKill(proc); + done(); + } }); + }); + + it("should recompile upon file change using the `command` option and the `--watch` option and log warning", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "watch", + "--watch", + "--mode", + "development", + ]); + + expect(exitCode).toBe(2); + expect(stderr).toContain("Error: Unknown option '--watch'"); + expect(stderr).toContain("Run 'webpack --help' to see available commands and options"); + expect(stdout).toBeFalsy(); + }); + + it("should recompile upon file change using the `command` option and the `--no-watch` option and log warning", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "watch", + "--no-watch", + "--mode", + "development", + ]); + + expect(exitCode).toBe(2); + expect(stderr).toContain("Error: Unknown option '--no-watch'"); + expect(stderr).toContain("Run 'webpack --help' to see available commands and options"); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/watch/basic/log.config.js b/test/watch/basic/log.config.js index 5906a9bce94..d53a5228db5 100644 --- a/test/watch/basic/log.config.js +++ b/test/watch/basic/log.config.js @@ -1,6 +1,6 @@ module.exports = { - mode: "development", - infrastructureLogging: { - level: "log", - }, + mode: "development", + infrastructureLogging: { + level: "log", + }, }; diff --git a/test/watch/basic/watch.config.js b/test/watch/basic/watch.config.js index 861575d0712..b5fb2c8cb6b 100644 --- a/test/watch/basic/watch.config.js +++ b/test/watch/basic/watch.config.js @@ -1,3 +1,3 @@ module.exports = { - watch: true, + watch: true, }; diff --git a/test/watch/stats/multi-webpack.config.js b/test/watch/stats/multi-webpack.config.js index ac39ad32ead..366b405316c 100644 --- a/test/watch/stats/multi-webpack.config.js +++ b/test/watch/stats/multi-webpack.config.js @@ -1,40 +1,40 @@ const webpack = require("webpack"); module.exports = [ - { - name: "first", - mode: "development", - watch: true, - stats: "none", - plugins: [ - { - apply(compiler) { - (compiler.webpack ? compiler.hooks.afterDone : compiler.hooks.done).tap( - "webpack-cli-test", - () => { - console.log(`webpack ${webpack.version}`); - }, - ); - }, + { + name: "first", + mode: "development", + watch: true, + stats: "none", + plugins: [ + { + apply(compiler) { + (compiler.webpack ? compiler.hooks.afterDone : compiler.hooks.done).tap( + "webpack-cli-test", + () => { + console.log(`webpack ${webpack.version}`); }, - ], - }, - { - name: "two", - mode: "development", - watch: true, - stats: "none", - plugins: [ - { - apply(compiler) { - (compiler.webpack ? compiler.hooks.afterDone : compiler.hooks.done).tap( - "webpack-cli-test", - () => { - console.log(`webpack ${webpack.version}`); - }, - ); - }, + ); + }, + }, + ], + }, + { + name: "two", + mode: "development", + watch: true, + stats: "none", + plugins: [ + { + apply(compiler) { + (compiler.webpack ? compiler.hooks.afterDone : compiler.hooks.done).tap( + "webpack-cli-test", + () => { + console.log(`webpack ${webpack.version}`); }, - ], - }, + ); + }, + }, + ], + }, ]; diff --git a/test/watch/stats/stats-and-watch.test.js b/test/watch/stats/stats-and-watch.test.js index b2c3beee283..77512fd5e4a 100644 --- a/test/watch/stats/stats-and-watch.test.js +++ b/test/watch/stats/stats-and-watch.test.js @@ -3,29 +3,29 @@ const { runWatch } = require("../../utils/test-utils"); describe("stats and watch", () => { - it('should not log stats with the "none" value from the configuration', async () => { - const { stderr, stdout } = await runWatch(__dirname, ["-c", "./webpack.config.js"]); + it('should not log stats with the "none" value from the configuration', async () => { + const { stderr, stdout } = await runWatch(__dirname, ["-c", "./webpack.config.js"]); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); - it('should not log stats with the "none" value from the configuration and multi compiler mode', async () => { - const { stderr, stdout } = await runWatch(__dirname, ["-c", "./multi-webpack.config.js"]); + it('should not log stats with the "none" value from the configuration and multi compiler mode', async () => { + const { stderr, stdout } = await runWatch(__dirname, ["-c", "./multi-webpack.config.js"]); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); - it('should log stats with the "normal" value in arguments', async () => { - const { stderr, stdout } = await runWatch(__dirname, [ - "-c", - "./webpack.config.js", - "--stats", - "normal", - ]); + it('should log stats with the "normal" value in arguments', async () => { + const { stderr, stdout } = await runWatch(__dirname, [ + "-c", + "./webpack.config.js", + "--stats", + "normal", + ]); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); - }); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); }); diff --git a/test/watch/stats/webpack.config.js b/test/watch/stats/webpack.config.js index c8bf98e63b8..7ab7958044c 100644 --- a/test/watch/stats/webpack.config.js +++ b/test/watch/stats/webpack.config.js @@ -1,19 +1,19 @@ const webpack = require("webpack"); module.exports = { - watch: true, - stats: "none", - mode: "development", - plugins: [ - { - apply(compiler) { - (compiler.webpack ? compiler.hooks.afterDone : compiler.hooks.done).tap( - "webpack-cli-test", - () => { - console.log(`webpack ${webpack.version}`); - }, - ); - }, - }, - ], + watch: true, + stats: "none", + mode: "development", + plugins: [ + { + apply(compiler) { + (compiler.webpack ? compiler.hooks.afterDone : compiler.hooks.done).tap( + "webpack-cli-test", + () => { + console.log(`webpack ${webpack.version}`); + }, + ); + }, + }, + ], }; diff --git a/test/watch/stdin/multi-serve.config.js b/test/watch/stdin/multi-serve.config.js index 9f20565e307..571a3ca87b2 100644 --- a/test/watch/stdin/multi-serve.config.js +++ b/test/watch/stdin/multi-serve.config.js @@ -1,10 +1,10 @@ module.exports = [ - { - entry: "./src/second.js", - }, - { - watchOptions: { - stdin: true, - }, + { + entry: "./src/second.js", + }, + { + watchOptions: { + stdin: true, }, + }, ]; diff --git a/test/watch/stdin/multi-watch.config.js b/test/watch/stdin/multi-watch.config.js index 8c659dd6a5e..69f31570658 100644 --- a/test/watch/stdin/multi-watch.config.js +++ b/test/watch/stdin/multi-watch.config.js @@ -1,11 +1,11 @@ module.exports = [ - { - entry: "./src/second.js", - }, - { - watch: true, - watchOptions: { - stdin: true, - }, + { + entry: "./src/second.js", + }, + { + watch: true, + watchOptions: { + stdin: true, }, + }, ]; diff --git a/test/watch/stdin/serve.config.js b/test/watch/stdin/serve.config.js index dadb8eaff5c..a22798c6b04 100644 --- a/test/watch/stdin/serve.config.js +++ b/test/watch/stdin/serve.config.js @@ -1,5 +1,5 @@ module.exports = { - watchOptions: { - stdin: true, - }, + watchOptions: { + stdin: true, + }, }; diff --git a/test/watch/stdin/stdin.test.js b/test/watch/stdin/stdin.test.js index cf7aa960c4f..e465e7ed55d 100644 --- a/test/watch/stdin/stdin.test.js +++ b/test/watch/stdin/stdin.test.js @@ -1,141 +1,141 @@ const { runAndGetProcess, processKill } = require("../../utils/test-utils"); describe("--watch-options-stdin", () => { - it('should stop the process when stdin ends using "--watch" and "--watch-options-stdin" options', (done) => { - const proc = runAndGetProcess(__dirname, ["--watch", "--watch-options-stdin"]); + it('should stop the process when stdin ends using "--watch" and "--watch-options-stdin" options', (done) => { + const proc = runAndGetProcess(__dirname, ["--watch", "--watch-options-stdin"]); - let semaphore = false; + let semaphore = false; - proc.on("exit", () => { - expect(semaphore).toBe(true); + proc.on("exit", () => { + expect(semaphore).toBe(true); - processKill(proc); + processKill(proc); - done(); - }); + done(); + }); - proc.stdin.end(() => { - semaphore = true; - }); + proc.stdin.end(() => { + semaphore = true; }); + }); - it('should stop the process when stdin ends using the "watch" command and the "--watch-options-stdin" option', (done) => { - const proc = runAndGetProcess(__dirname, ["watch", "--watch-options-stdin"]); + it('should stop the process when stdin ends using the "watch" command and the "--watch-options-stdin" option', (done) => { + const proc = runAndGetProcess(__dirname, ["watch", "--watch-options-stdin"]); - let semaphore = false; + let semaphore = false; - proc.on("exit", () => { - expect(semaphore).toBe(true); + proc.on("exit", () => { + expect(semaphore).toBe(true); - processKill(proc); + processKill(proc); - done(); - }); + done(); + }); - proc.stdin.end(() => { - semaphore = true; - }); + proc.stdin.end(() => { + semaphore = true; }); + }); - it("should stop the process when stdin ends using the config file", (done) => { - const proc = runAndGetProcess(__dirname, ["--config", "./watch.config.js"]); + it("should stop the process when stdin ends using the config file", (done) => { + const proc = runAndGetProcess(__dirname, ["--config", "./watch.config.js"]); - let semaphore = false; + let semaphore = false; - proc.on("exit", () => { - expect(semaphore).toBe(true); + proc.on("exit", () => { + expect(semaphore).toBe(true); - processKill(proc); + processKill(proc); - done(); - }); + done(); + }); - proc.stdin.end(() => { - semaphore = true; - }); + proc.stdin.end(() => { + semaphore = true; }); + }); - it("should stop the process when stdin ends using the config file in multi compiler mode", (done) => { - const proc = runAndGetProcess(__dirname, ["--config", "./multi-watch.config.js"]); + it("should stop the process when stdin ends using the config file in multi compiler mode", (done) => { + const proc = runAndGetProcess(__dirname, ["--config", "./multi-watch.config.js"]); - let semaphore = false; + let semaphore = false; - proc.on("exit", () => { - expect(semaphore).toBe(true); + proc.on("exit", () => { + expect(semaphore).toBe(true); - processKill(proc); + processKill(proc); - done(); - }); + done(); + }); - proc.stdin.end(() => { - semaphore = true; - }); + proc.stdin.end(() => { + semaphore = true; }); + }); - it('should stop the process when stdin ends using the "serve" command and the "--watch-options-stdin" option', (done) => { - const proc = runAndGetProcess(__dirname, ["serve", "--watch-options-stdin"]); + it('should stop the process when stdin ends using the "serve" command and the "--watch-options-stdin" option', (done) => { + const proc = runAndGetProcess(__dirname, ["serve", "--watch-options-stdin"]); - let semaphore = false; + let semaphore = false; - proc.on("exit", () => { - expect(semaphore).toBe(true); - processKill(proc); - done(); - }); + proc.on("exit", () => { + expect(semaphore).toBe(true); + processKill(proc); + done(); + }); - proc.stdin.end(() => { - semaphore = true; - }); + proc.stdin.end(() => { + semaphore = true; }); + }); - it('should stop the process when stdin ends using the "serve" command and the "--stdin" option', (done) => { - const proc = runAndGetProcess(__dirname, ["serve", "--stdin"]); + it('should stop the process when stdin ends using the "serve" command and the "--stdin" option', (done) => { + const proc = runAndGetProcess(__dirname, ["serve", "--stdin"]); - let semaphore = false; + let semaphore = false; - proc.on("exit", () => { - expect(semaphore).toBe(true); - processKill(proc); - done(); - }); + proc.on("exit", () => { + expect(semaphore).toBe(true); + processKill(proc); + done(); + }); - proc.stdin.end(() => { - semaphore = true; - }); + proc.stdin.end(() => { + semaphore = true; }); + }); - it('should stop the process when stdin ends using the "serve" command and configuration', (done) => { - const proc = runAndGetProcess(__dirname, ["serve", "--config", "./serve.config.js"]); + it('should stop the process when stdin ends using the "serve" command and configuration', (done) => { + const proc = runAndGetProcess(__dirname, ["serve", "--config", "./serve.config.js"]); - let semaphore = false; + let semaphore = false; - proc.on("exit", () => { - expect(semaphore).toBe(true); - processKill(proc); - done(); - }); + proc.on("exit", () => { + expect(semaphore).toBe(true); + processKill(proc); + done(); + }); - proc.stdin.end(() => { - semaphore = true; - }); + proc.stdin.end(() => { + semaphore = true; }); + }); - it('should stop the process when stdin ends using the "serve" command and the config file in multi compiler mode', (done) => { - const proc = runAndGetProcess(__dirname, ["--config", "./multi-watch.config.js"]); + it('should stop the process when stdin ends using the "serve" command and the config file in multi compiler mode', (done) => { + const proc = runAndGetProcess(__dirname, ["--config", "./multi-watch.config.js"]); - let semaphore = false; + let semaphore = false; - proc.on("exit", () => { - expect(semaphore).toBe(true); + proc.on("exit", () => { + expect(semaphore).toBe(true); - processKill(proc); + processKill(proc); - done(); - }); + done(); + }); - proc.stdin.end(() => { - semaphore = true; - }); + proc.stdin.end(() => { + semaphore = true; }); + }); }); diff --git a/test/watch/stdin/watch.config.js b/test/watch/stdin/watch.config.js index 1299830a892..94061e9a85f 100644 --- a/test/watch/stdin/watch.config.js +++ b/test/watch/stdin/watch.config.js @@ -1,6 +1,6 @@ module.exports = { - watch: true, - watchOptions: { - stdin: true, - }, + watch: true, + watchOptions: { + stdin: true, + }, }; diff --git a/test/watch/watch-variable/watch-variable.test.js b/test/watch/watch-variable/watch-variable.test.js index dc79871fdcc..5c0279e51d5 100644 --- a/test/watch/watch-variable/watch-variable.test.js +++ b/test/watch/watch-variable/watch-variable.test.js @@ -8,79 +8,73 @@ const wordsInStatsv4 = ["Hash", "Built at:", "main.js"]; const wordsInStatsv5 = ["asset", "index.js", "compiled successfully"]; describe("watch variable", () => { - it("should pass `WEBPACK_WATCH` env variable and recompile upon file change using the `watch` command", (done) => { - const proc = runAndGetProcess(__dirname, ["watch", "--mode", "development"]); - - let modified = false; - - proc.stdout.on("data", (chunk) => { - const data = chunk.toString(); - - expect(data).not.toContain("FAIL"); - - if (data.includes("index.js")) { - if (isWebpack5) { - for (const word of wordsInStatsv5) { - expect(data).toContain(word); - } - } else { - for (const word of wordsInStatsv4) { - expect(data).toContain(word); - } - } - - if (!modified) { - process.nextTick(() => { - writeFileSync( - resolve(__dirname, "./src/index.js"), - `console.log('watch flag test');`, - ); - }); - - modified = true; - } else { - processKill(proc); - done(); - } - } - }); + it("should pass `WEBPACK_WATCH` env variable and recompile upon file change using the `watch` command", (done) => { + const proc = runAndGetProcess(__dirname, ["watch", "--mode", "development"]); + + let modified = false; + + proc.stdout.on("data", (chunk) => { + const data = chunk.toString(); + + expect(data).not.toContain("FAIL"); + + if (data.includes("index.js")) { + if (isWebpack5) { + for (const word of wordsInStatsv5) { + expect(data).toContain(word); + } + } else { + for (const word of wordsInStatsv4) { + expect(data).toContain(word); + } + } + + if (!modified) { + process.nextTick(() => { + writeFileSync(resolve(__dirname, "./src/index.js"), `console.log('watch flag test');`); + }); + + modified = true; + } else { + processKill(proc); + done(); + } + } }); - - it.only("should pass `WEBPACK_WATCH` env variable and recompile upon file change using the `--watch` option", (done) => { - const proc = runAndGetProcess(__dirname, ["--watch", "--mode", "development"]); - - let modified = false; - - proc.stdout.on("data", (chunk) => { - const data = chunk.toString(); - - expect(data).not.toContain("FAIL"); - - if (data.includes("index.js")) { - if (isWebpack5) { - for (const word of wordsInStatsv5) { - expect(data).toContain(word); - } - } else { - for (const word of wordsInStatsv4) { - expect(data).toContain(word); - } - } - - if (!modified) { - process.nextTick(() => { - writeFileSync( - resolve(__dirname, "./src/index.js"), - `console.log('watch flag test');`, - ); - }); - - modified = true; - } else { - processKill(proc); - done(); - } - } - }); + }); + + it.only("should pass `WEBPACK_WATCH` env variable and recompile upon file change using the `--watch` option", (done) => { + const proc = runAndGetProcess(__dirname, ["--watch", "--mode", "development"]); + + let modified = false; + + proc.stdout.on("data", (chunk) => { + const data = chunk.toString(); + + expect(data).not.toContain("FAIL"); + + if (data.includes("index.js")) { + if (isWebpack5) { + for (const word of wordsInStatsv5) { + expect(data).toContain(word); + } + } else { + for (const word of wordsInStatsv4) { + expect(data).toContain(word); + } + } + + if (!modified) { + process.nextTick(() => { + writeFileSync(resolve(__dirname, "./src/index.js"), `console.log('watch flag test');`); + }); + + modified = true; + } else { + processKill(proc); + done(); + } + } }); + }); }); diff --git a/test/watch/watch-variable/webpack.config.js b/test/watch/watch-variable/webpack.config.js index 1cc1d2ce126..4604e47351c 100644 --- a/test/watch/watch-variable/webpack.config.js +++ b/test/watch/watch-variable/webpack.config.js @@ -1,24 +1,24 @@ const isInProcess = process.env.WEBPACK_WATCH; 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"); - } - }); - } + 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_WATCH)], - }; + return { + mode: "development", + devtool: false, + plugins: [new CustomTestPlugin(env.WEBPACK_WATCH)], + }; }; diff --git a/yarn.lock b/yarn.lock index 566e12af446..db99795bb6e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4303,13 +4303,6 @@ eslint-plugin-node@^11.1.0: resolve "^1.10.1" semver "^6.1.0" -eslint-plugin-prettier@^3.1.4: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" - integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== - dependencies: - prettier-linter-helpers "^1.0.0" - eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -4627,11 +4620,6 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - fast-glob@^2.0.2, fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -8778,13 +8766,6 @@ prepend-http@^1.0.1: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - prettier@^2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" From 6b767f03e15abd10e89a61f4d6fad376862912c1 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Tue, 24 Aug 2021 10:17:25 +0530 Subject: [PATCH 115/173] docs: update bug report template (#2901) --- .github/ISSUE_TEMPLATE/Bug_report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/Bug_report.md b/.github/ISSUE_TEMPLATE/Bug_report.md index ba266dbec29..4f0110eb3b4 100644 --- a/.github/ISSUE_TEMPLATE/Bug_report.md +++ b/.github/ISSUE_TEMPLATE/Bug_report.md @@ -26,7 +26,7 @@ Steps to reproduce the behavior: -**Please paste the results of `webpack-cli info` here, and mention other relevant information** +**Please paste the results of `npx webpack-cli info` here, and mention other relevant information** **Additional context** From 8b4d1cbd8ccf979479f6f3863ab5f2ac099647d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Aug 2021 13:03:59 +0300 Subject: [PATCH 116/173] chore(deps-dev): bump @typescript-eslint/parser --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index db99795bb6e..5604d098374 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2065,13 +2065,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.29.2.tgz#1c7744f4c27aeb74610c955d3dce9250e95c370a" - integrity sha512-WQ6BPf+lNuwteUuyk1jD/aHKqMQ9jrdCn7Gxt9vvBnzbpj7aWEf+aZsJ1zvTjx5zFxGCt000lsbD9tQPEL8u6g== + version "4.29.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.29.3.tgz#2ac25535f34c0e98f50c0e6b28c679c2357d45f2" + integrity sha512-jrHOV5g2u8ROghmspKoW7pN8T/qUzk0+DITun0MELptvngtMrwUJ1tv5zMI04CYVEUsSrN4jV7AKSv+I0y0EfQ== dependencies: - "@typescript-eslint/scope-manager" "4.29.2" - "@typescript-eslint/types" "4.29.2" - "@typescript-eslint/typescript-estree" "4.29.2" + "@typescript-eslint/scope-manager" "4.29.3" + "@typescript-eslint/types" "4.29.3" + "@typescript-eslint/typescript-estree" "4.29.3" debug "^4.3.1" "@typescript-eslint/scope-manager@4.29.2": @@ -2082,11 +2082,24 @@ "@typescript-eslint/types" "4.29.2" "@typescript-eslint/visitor-keys" "4.29.2" +"@typescript-eslint/scope-manager@4.29.3": + version "4.29.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.3.tgz#497dec66f3a22e459f6e306cf14021e40ec86e19" + integrity sha512-x+w8BLXO7iWPkG5mEy9bA1iFRnk36p/goVlYobVWHyDw69YmaH9q6eA+Fgl7kYHmFvWlebUTUfhtIg4zbbl8PA== + dependencies: + "@typescript-eslint/types" "4.29.3" + "@typescript-eslint/visitor-keys" "4.29.3" + "@typescript-eslint/types@4.29.2": version "4.29.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.2.tgz#fc0489c6b89773f99109fb0aa0aaddff21f52fcd" integrity sha512-K6ApnEXId+WTGxqnda8z4LhNMa/pZmbTFkDxEBLQAbhLZL50DjeY0VIDCml/0Y3FlcbqXZrABqrcKxq+n0LwzQ== +"@typescript-eslint/types@4.29.3": + version "4.29.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.3.tgz#d7980c49aef643d0af8954c9f14f656b7fd16017" + integrity sha512-s1eV1lKNgoIYLAl1JUba8NhULmf+jOmmeFO1G5MN/RBCyyzg4TIOfIOICVNC06lor+Xmy4FypIIhFiJXOknhIg== + "@typescript-eslint/typescript-estree@4.29.2": version "4.29.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.2.tgz#a0ea8b98b274adbb2577100ba545ddf8bf7dc219" @@ -2100,6 +2113,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.29.3": + version "4.29.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.3.tgz#1bafad610015c4ded35c85a70b6222faad598b40" + integrity sha512-45oQJA0bxna4O5TMwz55/TpgjX1YrAPOI/rb6kPgmdnemRZx/dB0rsx+Ku8jpDvqTxcE1C/qEbVHbS3h0hflag== + dependencies: + "@typescript-eslint/types" "4.29.3" + "@typescript-eslint/visitor-keys" "4.29.3" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.29.2": version "4.29.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.2.tgz#d2da7341f3519486f50655159f4e5ecdcb2cd1df" @@ -2108,6 +2134,14 @@ "@typescript-eslint/types" "4.29.2" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.29.3": + version "4.29.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.3.tgz#c691760a00bd86bf8320d2a90a93d86d322f1abf" + integrity sha512-MGGfJvXT4asUTeVs0Q2m+sY63UsfnA+C/FDgBKV3itLBmM9H0u+URcneePtkd0at1YELmZK6HSolCqM4Fzs6yA== + dependencies: + "@typescript-eslint/types" "4.29.3" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From b1a6663a5773ae081da6f4bca822370556f9d1e1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Aug 2021 13:04:11 +0300 Subject: [PATCH 117/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin --- yarn.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5604d098374..159e695ff6e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2040,27 +2040,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.2.tgz#f54dc0a32b8f61c6024ab8755da05363b733838d" - integrity sha512-x4EMgn4BTfVd9+Z+r+6rmWxoAzBaapt4QFqE+d8L8sUtYZYLDTK6VG/y/SMMWA5t1/BVU5Kf+20rX4PtWzUYZg== + version "4.29.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.3.tgz#95cb8029a8bd8bd9c7f4ab95074a7cb2115adefa" + integrity sha512-tBgfA3K/3TsZY46ROGvoRxQr1wBkclbVqRQep97MjVHJzcRBURRY3sNFqLk0/Xr//BY5hM9H2p/kp+6qim85SA== dependencies: - "@typescript-eslint/experimental-utils" "4.29.2" - "@typescript-eslint/scope-manager" "4.29.2" + "@typescript-eslint/experimental-utils" "4.29.3" + "@typescript-eslint/scope-manager" "4.29.3" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.29.2": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.2.tgz#5f67fb5c5757ef2cb3be64817468ba35c9d4e3b7" - integrity sha512-P6mn4pqObhftBBPAv4GQtEK7Yos1fz/MlpT7+YjH9fTxZcALbiiPKuSIfYP/j13CeOjfq8/fr9Thr2glM9ub7A== +"@typescript-eslint/experimental-utils@4.29.3": + version "4.29.3" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.3.tgz#52e437a689ccdef73e83c5106b34240a706f15e1" + integrity sha512-ffIvbytTVWz+3keg+Sy94FG1QeOvmV9dP2YSdLFHw/ieLXWCa3U1TYu8IRCOpMv2/SPS8XqhM1+ou1YHsdzKrg== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.29.2" - "@typescript-eslint/types" "4.29.2" - "@typescript-eslint/typescript-estree" "4.29.2" + "@typescript-eslint/scope-manager" "4.29.3" + "@typescript-eslint/types" "4.29.3" + "@typescript-eslint/typescript-estree" "4.29.3" eslint-scope "^5.1.1" eslint-utils "^3.0.0" From 603041d7e6a9b764bd79d1a8effd22a3e0f019cb Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Wed, 25 Aug 2021 17:15:04 +0300 Subject: [PATCH 118/173] feat: allow to run commands without webpack installation where it is unnecessary (#2907) --- packages/configtest/src/index.ts | 21 ++-- packages/generators/src/index.ts | 8 +- packages/info/src/index.ts | 6 +- packages/serve/src/index.ts | 42 +++---- packages/webpack-cli/bin/cli.js | 23 +--- packages/webpack-cli/lib/webpack-cli.js | 88 ++++++++++---- smoketests/helpers.js | 22 ++-- smoketests/index.js | 4 + .../webpack-dev-server.test.js | 5 +- smoketests/missing-packages/webpack.test.js | 73 +++++++++++- .../custom-webpack/custom-webpack.test.js | 16 ++- .../help.test.js.snap.devServer3.webpack4 | 4 +- .../help.test.js.snap.devServer3.webpack5 | 4 +- .../help.test.js.snap.devServer4.webpack4 | 4 +- .../help.test.js.snap.devServer4.webpack5 | 4 +- .../version.test.js.snap.webpack4 | 108 +++++++++--------- .../version.test.js.snap.webpack5 | 108 +++++++++--------- yarn.lock | 34 ------ 18 files changed, 318 insertions(+), 256 deletions(-) diff --git a/packages/configtest/src/index.ts b/packages/configtest/src/index.ts index c9bd526716c..f71eec6db98 100644 --- a/packages/configtest/src/index.ts +++ b/packages/configtest/src/index.ts @@ -1,17 +1,20 @@ +const WEBPACK_PACKAGE = process.env.WEBPACK_PACKAGE || "webpack"; + class ConfigTestCommand { // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any async apply(cli: any): Promise { - const { logger, webpack } = cli; - await cli.makeCommand( { name: "configtest [config-path]", alias: "t", description: "Validate a webpack configuration.", pkg: "@webpack-cli/configtest", + dependencies: [WEBPACK_PACKAGE], }, [], async (configPath: string | undefined): Promise => { + cli.webpack = await cli.loadWebpack(); + const config = await cli.resolveConfig(configPath ? { config: [configPath] } : {}); const configPaths = new Set(); @@ -28,31 +31,31 @@ class ConfigTestCommand { } if (configPaths.size === 0) { - logger.error("No configuration found."); + cli.logger.error("No configuration found."); process.exit(2); } - logger.info(`Validate '${Array.from(configPaths).join(" ,")}'.`); + cli.logger.info(`Validate '${Array.from(configPaths).join(" ,")}'.`); try { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const error: any = webpack.validate(config.options); + const error: any = cli.webpack.validate(config.options); // TODO remove this after drop webpack@4 if (error && error.length > 0) { - throw new webpack.WebpackOptionsValidationError(error); + throw new cli.webpack.WebpackOptionsValidationError(error); } } catch (error) { if (cli.isValidationError(error)) { - logger.error(error.message); + cli.logger.error(error.message); } else { - logger.error(error); + cli.logger.error(error); } process.exit(2); } - logger.success("There are no validation errors in the given webpack configuration."); + cli.logger.success("There are no validation errors in the given webpack configuration."); }, ); } diff --git a/packages/generators/src/index.ts b/packages/generators/src/index.ts index 3faa3dd0a7f..e248db6ddee 100644 --- a/packages/generators/src/index.ts +++ b/packages/generators/src/index.ts @@ -7,8 +7,6 @@ import initGenerator from "./init-generator"; class GeneratorsCommand { // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any async apply(cli: any): Promise { - const { logger } = cli; - await cli.makeCommand( { name: "init [generation-path]", @@ -51,7 +49,7 @@ class GeneratorsCommand { env.registerStub(initGenerator, generatorName); env.run(generatorName, { cli, options }, () => { - logger.success("Project has been initialised with webpack!"); + cli.logger.success("Project has been initialised with webpack!"); }); }, ); @@ -83,7 +81,7 @@ class GeneratorsCommand { env.registerStub(loaderGenerator, generatorName); env.run(generatorName, { cli, options }, () => { - logger.success("Loader template has been successfully scaffolded."); + cli.logger.success("Loader template has been successfully scaffolded."); }); }, ); @@ -115,7 +113,7 @@ class GeneratorsCommand { env.registerStub(pluginGenerator, generatorName); env.run(generatorName, { cli, options }, () => { - logger.success("Plugin template has been successfully scaffolded."); + cli.logger.success("Plugin template has been successfully scaffolded."); }); }, ); diff --git a/packages/info/src/index.ts b/packages/info/src/index.ts index e8658970bfa..c86fd337f12 100644 --- a/packages/info/src/index.ts +++ b/packages/info/src/index.ts @@ -32,8 +32,6 @@ const DEFAULT_DETAILS: Information = { class InfoCommand { // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any async apply(cli: any): Promise { - const { logger } = cli; - await cli.makeCommand( { name: "info", @@ -71,7 +69,7 @@ class InfoCommand { envinfoConfig["json"] = true; break; default: - logger.error(`'${output}' is not a valid value for output`); + cli.logger.error(`'${output}' is not a valid value for output`); process.exit(2); } } @@ -81,7 +79,7 @@ class InfoCommand { info = info.replace(/npmPackages/g, "Packages"); info = info.replace(/npmGlobalPackages/g, "Global Packages"); - logger.raw(info); + cli.logger.raw(info); }, ); } diff --git a/packages/serve/src/index.ts b/packages/serve/src/index.ts index a76cf412896..3f9e0d3d326 100644 --- a/packages/serve/src/index.ts +++ b/packages/serve/src/index.ts @@ -1,27 +1,27 @@ import { devServerOptionsType } from "./types"; +const WEBPACK_PACKAGE = process.env.WEBPACK_PACKAGE || "webpack"; +const WEBPACK_DEV_SERVER_PACKAGE = process.env.WEBPACK_DEV_SERVER_PACKAGE || "webpack-dev-server"; + class ServeCommand { // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any async apply(cli: any): Promise { - const { logger, webpack } = cli; - const loadDevServerOptions = () => { // TODO simplify this after drop webpack v4 and webpack-dev-server v3 - // eslint-disable-next-line @typescript-eslint/no-var-requires, node/no-extraneous-require - const devServer = require("webpack-dev-server"); + // eslint-disable-next-line @typescript-eslint/no-var-requires + const devServer = require(WEBPACK_DEV_SERVER_PACKAGE); const isNewDevServerCLIAPI = typeof devServer.schema !== "undefined"; let options = {}; if (isNewDevServerCLIAPI) { - if (webpack.cli && typeof webpack.cli.getArguments === "function") { - options = webpack.cli.getArguments(devServer.schema); + if (cli.webpack.cli && typeof cli.webpack.cli.getArguments === "function") { + options = cli.webpack.cli.getArguments(devServer.schema); } else { options = devServer.cli.getArguments(); } } else { - // eslint-disable-next-line node/no-extraneous-require - options = require("webpack-dev-server/bin/cli-flags"); + options = require(`${WEBPACK_DEV_SERVER_PACKAGE}/bin/cli-flags`); } // Old options format @@ -50,15 +50,17 @@ class ServeCommand { description: "Run the webpack dev server.", usage: "[entries...] [options]", pkg: "@webpack-cli/serve", - dependencies: ["webpack-dev-server"], + dependencies: [WEBPACK_PACKAGE, WEBPACK_DEV_SERVER_PACKAGE], }, - () => { + async () => { let devServerFlags = []; + cli.webpack = await cli.loadWebpack(); + try { devServerFlags = loadDevServerOptions(); } catch (error) { - logger.error( + cli.logger.error( `You need to install 'webpack-dev-server' for running 'webpack serve'.\n${error}`, ); process.exit(2); @@ -159,17 +161,17 @@ class ServeCommand { process.stdin.resume(); } - // eslint-disable-next-line @typescript-eslint/no-var-requires, node/no-extraneous-require - const DevServer = require("webpack-dev-server"); + // eslint-disable-next-line @typescript-eslint/no-var-requires + const DevServer = require(WEBPACK_DEV_SERVER_PACKAGE); const isNewDevServerCLIAPI = typeof DevServer.schema !== "undefined"; let devServerVersion; try { - // eslint-disable-next-line node/no-extraneous-require, @typescript-eslint/no-var-requires - devServerVersion = require("webpack-dev-server/package.json").version; + // eslint-disable-next-line @typescript-eslint/no-var-requires + devServerVersion = require(`${WEBPACK_DEV_SERVER_PACKAGE}/package.json`).version; } catch (err) { - logger.error( + cli.logger.error( `You need to install 'webpack-dev-server' for running 'webpack serve'.\n${err}`, ); process.exit(2); @@ -200,8 +202,8 @@ class ServeCommand { }, {}); const result = { ...(compilerForDevServer.options.devServer || {}) }; const problems = ( - webpack.cli && typeof webpack.cli.processArguments === "function" - ? webpack.cli + cli.webpack.cli && typeof cli.webpack.cli.processArguments === "function" + ? cli.webpack.cli : DevServer.cli ).processArguments(args, result, values); @@ -335,9 +337,9 @@ class ServeCommand { servers.push(server); } catch (error) { if (cli.isValidationError(error)) { - logger.error(error.message); + cli.logger.error(error.message); } else { - logger.error(error); + cli.logger.error(error); } process.exit(2); diff --git a/packages/webpack-cli/bin/cli.js b/packages/webpack-cli/bin/cli.js index c947b2a9094..91b0cd4b17f 100755 --- a/packages/webpack-cli/bin/cli.js +++ b/packages/webpack-cli/bin/cli.js @@ -10,7 +10,6 @@ require("v8-compile-cache"); const importLocal = require("import-local"); const runCLI = require("../lib/bootstrap"); -const utils = require("../lib/utils"); if (!process.env.WEBPACK_CLI_SKIP_IMPORT_LOCAL) { // Prefer the local installation of `webpack-cli` @@ -21,24 +20,4 @@ if (!process.env.WEBPACK_CLI_SKIP_IMPORT_LOCAL) { process.title = "webpack"; -if (utils.packageExists("webpack")) { - runCLI(process.argv, originalModuleCompile); -} else { - const { promptInstallation, logger, colors } = utils; - - promptInstallation("webpack", () => { - utils.logger.error(`It looks like ${colors.bold("webpack")} is not installed.`); - }) - .then(() => { - logger.success(`${colors.bold("webpack")} was installed successfully.`); - - runCLI(process.argv, originalModuleCompile); - }) - .catch(() => { - logger.error( - `Action Interrupted, Please try once again or install ${colors.bold("webpack")} manually.`, - ); - - process.exit(2); - }); -} +runCLI(process.argv, originalModuleCompile); diff --git a/packages/webpack-cli/lib/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index 76869cd5687..c3d9052e7fa 100644 --- a/packages/webpack-cli/lib/webpack-cli.js +++ b/packages/webpack-cli/lib/webpack-cli.js @@ -6,10 +6,11 @@ const Module = require("module"); const { program, Option } = require("commander"); const utils = require("./utils"); +const WEBPACK_PACKAGE = process.env.WEBPACK_PACKAGE || "webpack"; +const WEBPACK_DEV_SERVER_PACKAGE = process.env.WEBPACK_DEV_SERVER_PACKAGE || "webpack-dev-server"; + class WebpackCLI { constructor() { - // Global - this.webpack = require(process.env.WEBPACK_PACKAGE || "webpack"); this.logger = utils.logger; this.utils = utils; @@ -73,19 +74,27 @@ class WebpackCLI { return result; } - loadJSONFile(pathToFile) { + loadJSONFile(pathToFile, handleError = true) { let result; try { result = require(pathToFile); } catch (error) { - this.logger.error(error); - process.exit(2); + if (handleError) { + this.logger.error(error); + process.exit(2); + } else { + throw error; + } } return result; } + async loadWebpack(handleError = true) { + return this.tryRequireThenImport(WEBPACK_PACKAGE, handleError); + } + async makeCommand(commandOptions, options, action) { const alreadyLoaded = this.program.commands.find( (command) => @@ -139,13 +148,27 @@ class WebpackCLI { continue; } - const { promptInstallation, colors } = this.utils; + let skipInstallation = false; + + // Allow to use `./path/to/webpack.js` outside `node_modules` + if (dependency === WEBPACK_PACKAGE && fs.existsSync(WEBPACK_PACKAGE)) { + skipInstallation = true; + } + + // Allow to use `./path/to/webpack-dev-server.js` outside `node_modules` + if (dependency === WEBPACK_DEV_SERVER_PACKAGE && fs.existsSync(WEBPACK_PACKAGE)) { + skipInstallation = true; + } - await promptInstallation(dependency, () => { + if (skipInstallation) { + continue; + } + + await this.utils.promptInstallation(dependency, () => { this.logger.error( - `For using '${colors.green( + `For using '${this.utils.colors.green( commandOptions.name.split(" ")[0], - )}' command you need to install: '${colors.green(dependency)}' package`, + )}' command you need to install: '${this.utils.colors.green(dependency)}' package.`, ); }); } @@ -159,11 +182,11 @@ class WebpackCLI { commandOptions.description } To see all available options you need to install ${commandOptions.dependencies .map((dependency) => `'${dependency}'`) - .join(",")}.`, + .join(", ")}.`, ); options = []; } else { - options = options(); + options = await options(); } } @@ -716,12 +739,14 @@ class WebpackCLI { alias: ["bundle", "b"], description: "Run webpack (default command, can be omitted).", usage: "[entries...] [options]", + dependencies: [WEBPACK_PACKAGE], }; const watchCommandOptions = { name: "watch [entries...]", alias: "w", description: "Run webpack and watch for files changes.", usage: "[entries...] [options]", + dependencies: [WEBPACK_PACKAGE], }; const versionCommandOptions = { name: "version [commands...]", @@ -822,11 +847,15 @@ class WebpackCLI { const isWatchCommandUsed = isCommand(commandName, watchCommandOptions); if (isBuildCommandUsed || isWatchCommandUsed) { - const options = this.getBuiltInOptions(); - await this.makeCommand( isBuildCommandUsed ? buildCommandOptions : watchCommandOptions, - isWatchCommandUsed ? options.filter((option) => option.name !== "watch") : options, + async () => { + this.webpack = await this.loadWebpack(); + + return isWatchCommandUsed + ? this.getBuiltInOptions().filter((option) => option.name !== "watch") + : this.getBuiltInOptions(); + }, async (entries, options) => { if (entries.length > 0) { options.entry = [...entries, ...(options.entry || [])]; @@ -839,7 +868,7 @@ class WebpackCLI { // Stub for the `help` command this.makeCommand(helpCommandOptions, [], () => {}); } else if (isCommand(commandName, versionCommandOptions)) { - // Stub for the `help` command + // Stub for the `version` command this.makeCommand(versionCommandOptions, [], () => {}); } else { const builtInExternalCommandInfo = externalBuiltInCommandsInfo.find( @@ -867,7 +896,7 @@ class WebpackCLI { pkg = await promptInstallation(pkg, () => { this.logger.error( - `For using this command you need to install: '${colors.green(pkg)}' package`, + `For using this command you need to install: '${colors.green(pkg)}' package.`, ); }); } @@ -1021,17 +1050,30 @@ class WebpackCLI { } } + let webpack; + + try { + webpack = await this.loadWebpack(false); + } catch (_error) { + // Nothing + } + + this.logger.raw(`webpack: ${webpack ? webpack.version : "not installed"}`); + const pkgJSON = this.loadJSONFile("../package.json"); - this.logger.raw(`webpack ${this.webpack.version}`); - this.logger.raw(`webpack-cli ${pkgJSON.version}`); + this.logger.raw(`webpack-cli: ${pkgJSON.version}`); - if (this.utils.packageExists("webpack-dev-server")) { - const { version } = this.loadJSONFile("webpack-dev-server/package.json"); + let devServer; - this.logger.raw(`webpack-dev-server ${version}`); + try { + devServer = await this.loadJSONFile("webpack-dev-server/package.json", false); + } catch (_error) { + // Nothing } + this.logger.raw(`webpack-dev-server ${devServer ? devServer.version : "not installed"}`); + process.exit(0); }; this.program.option( @@ -1214,11 +1256,11 @@ class WebpackCLI { ); if (typeof builtInCommandUsed !== "undefined") { this.logger.error( - `For using '${name}' command you need to install '${builtInCommandUsed.pkg}' package`, + `For using '${name}' command you need to install '${builtInCommandUsed.pkg}' package.`, ); } else { this.logger.error(`Can't find and load command '${name}'`); - this.logger.error("Run 'webpack --help' to see available commands and options"); + this.logger.error("Run 'webpack --help' to see available commands and options."); } process.exit(2); } diff --git a/smoketests/helpers.js b/smoketests/helpers.js index e67d760a0fb..255e3fd312e 100644 --- a/smoketests/helpers.js +++ b/smoketests/helpers.js @@ -11,21 +11,24 @@ const ROOT_PATH = process.env.GITHUB_WORKSPACE const getPkgPath = (pkg, isSubPackage) => { const pkgPath = isSubPackage ? `./node_modules/@webpack-cli/${pkg}` : `./node_modules/${pkg}`; + return path.resolve(ROOT_PATH, pkgPath); }; const swapPkgName = (current, isSubPackage = false) => { // info -> .info and vice-versa const next = current.startsWith(".") ? current.substr(1) : `.${current}`; + console.log(` swapping ${current} with ${next}`); + fs.renameSync(getPkgPath(current, isSubPackage), getPkgPath(next, isSubPackage)); }; const CLI_ENTRY_PATH = path.resolve(ROOT_PATH, "./packages/webpack-cli/bin/cli.js"); -const runTest = (package, cliArgs = [], logMessage, isSubPackage = false) => { +const runTest = (pkg, cliArgs = [], logMessage, isSubPackage = false) => { // Simulate package missing - swapPkgName(package, isSubPackage); + swapPkgName(pkg, isSubPackage); const proc = execa(CLI_ENTRY_PATH, cliArgs, { cwd: __dirname, @@ -50,6 +53,7 @@ const runTest = (package, cliArgs = [], logMessage, isSubPackage = false) => { proc.stderr.on("data", (chunk) => { const data = stripAnsi(chunk.toString()); + console.log(` stderr: ${data}`); if (data.includes(logMessage)) { @@ -67,13 +71,13 @@ const runTest = (package, cliArgs = [], logMessage, isSubPackage = false) => { }); proc.on("exit", () => { - swapPkgName(`.${package}`, isSubPackage); + swapPkgName(`.${pkg}`, isSubPackage); clearTimeout(timeout); resolve(hasPassed); }); proc.on("error", () => { - swapPkgName(`.${package}`, isSubPackage); + swapPkgName(`.${pkg}`, isSubPackage); clearTimeout(timeout); resolve(false); }); @@ -100,6 +104,7 @@ const runTestStdout = ({ packageName, cliArgs, logMessage, isSubPackage } = {}) proc.stdout.on("data", (chunk) => { const data = stripAnsi(chunk.toString()); + console.log(` stdout: ${data}`); if (data.includes(logMessage)) { @@ -186,9 +191,9 @@ const runTestStdoutWithInput = ({ }); }; -const runTestWithHelp = (package, cliArgs = [], logMessage, isSubPackage = false) => { +const runTestWithHelp = (pkg, cliArgs = [], logMessage, isSubPackage = false) => { // Simulate package missing - swapPkgName(package, isSubPackage); + swapPkgName(pkg, isSubPackage); const proc = execa(CLI_ENTRY_PATH, cliArgs, { cwd: __dirname, @@ -214,6 +219,7 @@ const runTestWithHelp = (package, cliArgs = [], logMessage, isSubPackage = false proc.stderr.on("data", (chunk) => { const data = stripAnsi(chunk.toString()); + console.log(` stderr: ${data}`); if (data.includes(logMessage)) { @@ -231,13 +237,13 @@ const runTestWithHelp = (package, cliArgs = [], logMessage, isSubPackage = false }); proc.on("exit", () => { - swapPkgName(`.${package}`, isSubPackage); + swapPkgName(`.${pkg}`, isSubPackage); clearTimeout(timeout); resolve(hasPassed); }); proc.on("error", () => { - swapPkgName(`.${package}`, isSubPackage); + swapPkgName(`.${pkg}`, isSubPackage); clearTimeout(timeout); resolve(false); }); diff --git a/smoketests/index.js b/smoketests/index.js index 04a21b169c2..8441c4d3ad2 100644 --- a/smoketests/index.js +++ b/smoketests/index.js @@ -11,10 +11,12 @@ const tests = [ (async () => { let isAllPassed = true; + for await (const test of tests) { console.log(`\nRUN ${test.name}`); let isPass = true; + for await (const testCase of test.run) { isPass = isPass && (await testCase()); } @@ -26,8 +28,10 @@ const tests = [ console.log(`PASS ${test.name}`); } } + if (!isAllPassed) { process.exit(2); } + process.exit(0); })(); diff --git a/smoketests/missing-packages/webpack-dev-server.test.js b/smoketests/missing-packages/webpack-dev-server.test.js index c463ff985c0..7a95153889c 100644 --- a/smoketests/missing-packages/webpack-dev-server.test.js +++ b/smoketests/missing-packages/webpack-dev-server.test.js @@ -5,7 +5,7 @@ const { runTest, runTestStdout } = require("../helpers"); const webpackDevServerTest = () => { const packageName = "webpack-dev-server"; const args = ["serve"]; - const logMessage = "For using 'serve' command you need to install: 'webpack-dev-server' package"; + const logMessage = "For using 'serve' command you need to install: 'webpack-dev-server' package."; return runTest(packageName, args, logMessage); }; @@ -13,7 +13,8 @@ const webpackDevServerTest = () => { const webpackDevServerWithHelpTest = () => { const packageName = "webpack-dev-server"; const cliArgs = ["help", "serve"]; - const logMessage = "To see all available options you need to install 'webpack-dev-server'"; + const logMessage = + "To see all available options you need to install 'webpack', 'webpack-dev-server'."; return runTestStdout({ packageName, cliArgs, logMessage }); }; diff --git a/smoketests/missing-packages/webpack.test.js b/smoketests/missing-packages/webpack.test.js index d940e8f5fcc..99ce50e4072 100644 --- a/smoketests/missing-packages/webpack.test.js +++ b/smoketests/missing-packages/webpack.test.js @@ -1,14 +1,79 @@ "use strict"; -const { runTest } = require("../helpers"); +const { runTest, runTestStdout } = require("../helpers"); -const webpackTest = () => { +const noCommand = () => { const packageName = "webpack"; const args = []; - const logMessage = "It looks like webpack is not installed."; + const logMessage = "For using 'build' command you need to install: 'webpack' package."; return runTest(packageName, args, logMessage); }; -module.exports.run = [webpackTest]; +const buildCommand = () => { + const packageName = "webpack"; + const args = ["build"]; + const logMessage = "For using 'build' command you need to install: 'webpack' package."; + + return runTest(packageName, args, logMessage); +}; + +const watchCommand = () => { + const packageName = "webpack"; + const args = ["watch"]; + const logMessage = "For using 'watch' command you need to install: 'webpack' package."; + + return runTest(packageName, args, logMessage); +}; + +const serveCommand = () => { + const packageName = "webpack"; + const args = ["serve"]; + const logMessage = "For using 'serve' command you need to install: 'webpack' package."; + + return runTest(packageName, args, logMessage); +}; + +const versionCommand = () => { + const packageName = "webpack"; + const args = ["version"]; + const logMessage = "webpack-cli:"; + + return runTestStdout({ packageName, cliArgs: args, logMessage }); +}; + +const helpCommand = () => { + const packageName = "webpack"; + const args = ["help"]; + const logMessage = "The build tool for modern web applications."; + + return runTestStdout({ packageName, cliArgs: args, logMessage }); +}; + +const infoCommand = () => { + const packageName = "webpack"; + const args = ["info"]; + const logMessage = "System:"; + + return runTestStdout({ packageName, cliArgs: args, logMessage }); +}; + +const configtestCommand = () => { + const packageName = "webpack"; + const args = ["configtest"]; + const logMessage = "For using 'configtest' command you need to install: 'webpack' package."; + + return runTest(packageName, args, logMessage); +}; + +module.exports.run = [ + noCommand, + buildCommand, + watchCommand, + serveCommand, + configtestCommand, + versionCommand, + infoCommand, + helpCommand, +]; module.exports.name = "Missing webpack"; diff --git a/test/build/custom-webpack/custom-webpack.test.js b/test/build/custom-webpack/custom-webpack.test.js index 34aed49d46c..35a2d7002b3 100644 --- a/test/build/custom-webpack/custom-webpack.test.js +++ b/test/build/custom-webpack/custom-webpack.test.js @@ -4,9 +4,9 @@ const { resolve } = require("path"); const { run } = require("../../utils/test-utils"); describe("custom-webpack", () => { - it("should use custom-webpack.js", async () => { + it("should use package from 'node_modules'", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [], { - env: { WEBPACK_PACKAGE: resolve(__dirname, "./custom-webpack.js") }, + env: { WEBPACK_PACKAGE: "webpack" }, }); expect(exitCode).toBe(0); @@ -14,15 +14,13 @@ describe("custom-webpack", () => { expect(stdout).toContain("main.js"); }); - it("should throw an error for invalid-webpack.js", async () => { + it("should use custom-webpack.js", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [], { - env: { - WEBPACK_PACKAGE: resolve(__dirname, "./invalid-webpack.js"), - }, + env: { WEBPACK_PACKAGE: resolve(__dirname, "./custom-webpack.js") }, }); - expect(exitCode).toBe(2); - expect(stderr).toContain(`Error: Cannot find module`); - expect(stdout).toBeFalsy(); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("main.js"); }); }); diff --git a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack4 b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack4 index c8b13330a95..fe305e2bd43 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack4 +++ b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack4 @@ -52,14 +52,14 @@ exports[`help should log error for invalid flag with the "--help" option: stdout exports[`help should log error for unknown command using command syntax #2: stderr 1`] = ` "[webpack-cli] Can't find and load command 'verbose' -[webpack-cli] Run 'webpack --help' to see available commands and options" +[webpack-cli] Run 'webpack --help' to see available commands and options." `; exports[`help should log error for unknown command using command syntax #2: stdout 1`] = `""`; exports[`help should log error for unknown command using command syntax: stderr 1`] = ` "[webpack-cli] Can't find and load command 'myCommand' -[webpack-cli] Run 'webpack --help' to see available commands and options" +[webpack-cli] Run 'webpack --help' to see available commands and options." `; exports[`help should log error for unknown command using command syntax: stdout 1`] = `""`; diff --git a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 index 37c30d8aefb..5dd3e3d69c6 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 +++ b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 @@ -52,14 +52,14 @@ exports[`help should log error for invalid flag with the "--help" option: stdout exports[`help should log error for unknown command using command syntax #2: stderr 1`] = ` "[webpack-cli] Can't find and load command 'verbose' -[webpack-cli] Run 'webpack --help' to see available commands and options" +[webpack-cli] Run 'webpack --help' to see available commands and options." `; exports[`help should log error for unknown command using command syntax #2: stdout 1`] = `""`; exports[`help should log error for unknown command using command syntax: stderr 1`] = ` "[webpack-cli] Can't find and load command 'myCommand' -[webpack-cli] Run 'webpack --help' to see available commands and options" +[webpack-cli] Run 'webpack --help' to see available commands and options." `; exports[`help should log error for unknown command using command syntax: stdout 1`] = `""`; diff --git a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 index 8e6d3c6e502..0ba6c2bf8d9 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 +++ b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 @@ -52,14 +52,14 @@ exports[`help should log error for invalid flag with the "--help" option: stdout exports[`help should log error for unknown command using command syntax #2: stderr 1`] = ` "[webpack-cli] Can't find and load command 'verbose' -[webpack-cli] Run 'webpack --help' to see available commands and options" +[webpack-cli] Run 'webpack --help' to see available commands and options." `; exports[`help should log error for unknown command using command syntax #2: stdout 1`] = `""`; exports[`help should log error for unknown command using command syntax: stderr 1`] = ` "[webpack-cli] Can't find and load command 'myCommand' -[webpack-cli] Run 'webpack --help' to see available commands and options" +[webpack-cli] Run 'webpack --help' to see available commands and options." `; exports[`help should log error for unknown command using command syntax: stdout 1`] = `""`; diff --git a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 index 56259dec98e..710a6ec9751 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 +++ b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 @@ -52,14 +52,14 @@ exports[`help should log error for invalid flag with the "--help" option: stdout exports[`help should log error for unknown command using command syntax #2: stderr 1`] = ` "[webpack-cli] Can't find and load command 'verbose' -[webpack-cli] Run 'webpack --help' to see available commands and options" +[webpack-cli] Run 'webpack --help' to see available commands and options." `; exports[`help should log error for unknown command using command syntax #2: stdout 1`] = `""`; exports[`help should log error for unknown command using command syntax: stderr 1`] = ` "[webpack-cli] Can't find and load command 'myCommand' -[webpack-cli] Run 'webpack --help' to see available commands and options" +[webpack-cli] Run 'webpack --help' to see available commands and options." `; exports[`help should log error for unknown command using command syntax: stdout 1`] = `""`; diff --git a/test/version/__snapshots__/version.test.js.snap.webpack4 b/test/version/__snapshots__/version.test.js.snap.webpack4 index eb5f5200f1f..7ee6aa6b9f8 100644 --- a/test/version/__snapshots__/version.test.js.snap.webpack4 +++ b/test/version/__snapshots__/version.test.js.snap.webpack4 @@ -3,24 +3,24 @@ exports[`single version flag outputs version with b: stderr 1`] = `""`; exports[`single version flag outputs version with b: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs version with build: stderr 1`] = `""`; exports[`single version flag outputs version with build: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs version with bundle: stderr 1`] = `""`; exports[`single version flag outputs version with bundle: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -28,8 +28,8 @@ exports[`single version flag outputs version with info using command alias: stde exports[`single version flag outputs version with info using command alias: stdout 1`] = ` "@webpack-cli/info x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -37,8 +37,8 @@ exports[`single version flag outputs version with info using command syntax: std exports[`single version flag outputs version with info using command syntax: stdout 1`] = ` "@webpack-cli/info x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -46,8 +46,8 @@ exports[`single version flag outputs version with info using option alias: stder exports[`single version flag outputs version with info using option alias: stdout 1`] = ` "@webpack-cli/info x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -55,8 +55,8 @@ exports[`single version flag outputs version with info: stderr 1`] = `""`; exports[`single version flag outputs version with info: stdout 1`] = ` "@webpack-cli/info x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -64,8 +64,8 @@ exports[`single version flag outputs version with init: stderr 1`] = `""`; exports[`single version flag outputs version with init: stdout 1`] = ` "@webpack-cli/generators x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -73,8 +73,8 @@ exports[`single version flag outputs version with loader: stderr 1`] = `""`; exports[`single version flag outputs version with loader: stdout 1`] = ` "@webpack-cli/generators x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -82,8 +82,8 @@ exports[`single version flag outputs version with migrate: stderr 1`] = `""`; exports[`single version flag outputs version with migrate: stdout 1`] = ` "@webpack-cli/migrate x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -91,8 +91,8 @@ exports[`single version flag outputs version with plugin: stderr 1`] = `""`; exports[`single version flag outputs version with plugin: stdout 1`] = ` "@webpack-cli/generators x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -100,8 +100,8 @@ exports[`single version flag outputs version with serve: stderr 1`] = `""`; exports[`single version flag outputs version with serve: stdout 1`] = ` "@webpack-cli/serve x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -109,80 +109,80 @@ exports[`single version flag outputs version with the alias c for init: stderr 1 exports[`single version flag outputs version with the alias c for init: stdout 1`] = ` "@webpack-cli/generators x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs version with w: stderr 1`] = `""`; exports[`single version flag outputs version with w: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs version with watch: stderr 1`] = `""`; exports[`single version flag outputs version with watch: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with --color using command syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with --color using command syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with --color using option syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with --color using option syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with --no-color using command syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with --no-color using command syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with --no-color using option syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with --no-color using option syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with alias syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with alias syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with command syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with command syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with dashed syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with dashed syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -281,16 +281,16 @@ exports[`single version flag should output versions for multiple commands using exports[`single version flag should output versions for multiple commands using command syntax: stdout 1`] = ` "@webpack-cli/info x.x.x @webpack-cli/serve x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag should output versions with help command using command syntax: stderr 1`] = `""`; exports[`single version flag should output versions with help command using command syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -299,24 +299,24 @@ exports[`single version flag should work for multiple commands: stderr 1`] = `"" exports[`single version flag should work for multiple commands: stdout 1`] = ` "@webpack-cli/info x.x.x @webpack-cli/serve x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag should work using command syntax and the "--version" argument: stderr 1`] = `""`; exports[`single version flag should work using command syntax and the "--version" argument: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag should work using command syntax with the "version" value: stderr 1`] = `""`; exports[`single version flag should work using command syntax with the "version" value: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; diff --git a/test/version/__snapshots__/version.test.js.snap.webpack5 b/test/version/__snapshots__/version.test.js.snap.webpack5 index eb5f5200f1f..7ee6aa6b9f8 100644 --- a/test/version/__snapshots__/version.test.js.snap.webpack5 +++ b/test/version/__snapshots__/version.test.js.snap.webpack5 @@ -3,24 +3,24 @@ exports[`single version flag outputs version with b: stderr 1`] = `""`; exports[`single version flag outputs version with b: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs version with build: stderr 1`] = `""`; exports[`single version flag outputs version with build: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs version with bundle: stderr 1`] = `""`; exports[`single version flag outputs version with bundle: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -28,8 +28,8 @@ exports[`single version flag outputs version with info using command alias: stde exports[`single version flag outputs version with info using command alias: stdout 1`] = ` "@webpack-cli/info x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -37,8 +37,8 @@ exports[`single version flag outputs version with info using command syntax: std exports[`single version flag outputs version with info using command syntax: stdout 1`] = ` "@webpack-cli/info x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -46,8 +46,8 @@ exports[`single version flag outputs version with info using option alias: stder exports[`single version flag outputs version with info using option alias: stdout 1`] = ` "@webpack-cli/info x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -55,8 +55,8 @@ exports[`single version flag outputs version with info: stderr 1`] = `""`; exports[`single version flag outputs version with info: stdout 1`] = ` "@webpack-cli/info x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -64,8 +64,8 @@ exports[`single version flag outputs version with init: stderr 1`] = `""`; exports[`single version flag outputs version with init: stdout 1`] = ` "@webpack-cli/generators x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -73,8 +73,8 @@ exports[`single version flag outputs version with loader: stderr 1`] = `""`; exports[`single version flag outputs version with loader: stdout 1`] = ` "@webpack-cli/generators x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -82,8 +82,8 @@ exports[`single version flag outputs version with migrate: stderr 1`] = `""`; exports[`single version flag outputs version with migrate: stdout 1`] = ` "@webpack-cli/migrate x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -91,8 +91,8 @@ exports[`single version flag outputs version with plugin: stderr 1`] = `""`; exports[`single version flag outputs version with plugin: stdout 1`] = ` "@webpack-cli/generators x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -100,8 +100,8 @@ exports[`single version flag outputs version with serve: stderr 1`] = `""`; exports[`single version flag outputs version with serve: stdout 1`] = ` "@webpack-cli/serve x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -109,80 +109,80 @@ exports[`single version flag outputs version with the alias c for init: stderr 1 exports[`single version flag outputs version with the alias c for init: stdout 1`] = ` "@webpack-cli/generators x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs version with w: stderr 1`] = `""`; exports[`single version flag outputs version with w: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs version with watch: stderr 1`] = `""`; exports[`single version flag outputs version with watch: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with --color using command syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with --color using command syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with --color using option syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with --color using option syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with --no-color using command syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with --no-color using command syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with --no-color using option syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with --no-color using option syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with alias syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with alias syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with command syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with command syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag outputs versions with dashed syntax: stderr 1`] = `""`; exports[`single version flag outputs versions with dashed syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -281,16 +281,16 @@ exports[`single version flag should output versions for multiple commands using exports[`single version flag should output versions for multiple commands using command syntax: stdout 1`] = ` "@webpack-cli/info x.x.x @webpack-cli/serve x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag should output versions with help command using command syntax: stderr 1`] = `""`; exports[`single version flag should output versions with help command using command syntax: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; @@ -299,24 +299,24 @@ exports[`single version flag should work for multiple commands: stderr 1`] = `"" exports[`single version flag should work for multiple commands: stdout 1`] = ` "@webpack-cli/info x.x.x @webpack-cli/serve x.x.x -webpack x.x.x -webpack-cli x.x.x +webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag should work using command syntax and the "--version" argument: stderr 1`] = `""`; exports[`single version flag should work using command syntax and the "--version" argument: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; exports[`single version flag should work using command syntax with the "version" value: stderr 1`] = `""`; exports[`single version flag should work using command syntax with the "version" value: stdout 1`] = ` -"webpack x.x.x -webpack-cli x.x.x +"webpack: x.x.x +webpack-cli: x.x.x webpack-dev-server x.x.x" `; diff --git a/yarn.lock b/yarn.lock index 159e695ff6e..a05297ac031 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2074,14 +2074,6 @@ "@typescript-eslint/typescript-estree" "4.29.3" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.29.2": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.2.tgz#442b0f029d981fa402942715b1718ac7fcd5aa1b" - integrity sha512-mfHmvlQxmfkU8D55CkZO2sQOueTxLqGvzV+mG6S/6fIunDiD2ouwsAoiYCZYDDK73QCibYjIZmGhpvKwAB5BOA== - dependencies: - "@typescript-eslint/types" "4.29.2" - "@typescript-eslint/visitor-keys" "4.29.2" - "@typescript-eslint/scope-manager@4.29.3": version "4.29.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.3.tgz#497dec66f3a22e459f6e306cf14021e40ec86e19" @@ -2090,29 +2082,11 @@ "@typescript-eslint/types" "4.29.3" "@typescript-eslint/visitor-keys" "4.29.3" -"@typescript-eslint/types@4.29.2": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.2.tgz#fc0489c6b89773f99109fb0aa0aaddff21f52fcd" - integrity sha512-K6ApnEXId+WTGxqnda8z4LhNMa/pZmbTFkDxEBLQAbhLZL50DjeY0VIDCml/0Y3FlcbqXZrABqrcKxq+n0LwzQ== - "@typescript-eslint/types@4.29.3": version "4.29.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.3.tgz#d7980c49aef643d0af8954c9f14f656b7fd16017" integrity sha512-s1eV1lKNgoIYLAl1JUba8NhULmf+jOmmeFO1G5MN/RBCyyzg4TIOfIOICVNC06lor+Xmy4FypIIhFiJXOknhIg== -"@typescript-eslint/typescript-estree@4.29.2": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.2.tgz#a0ea8b98b274adbb2577100ba545ddf8bf7dc219" - integrity sha512-TJ0/hEnYxapYn9SGn3dCnETO0r+MjaxtlWZ2xU+EvytF0g4CqTpZL48SqSNn2hXsPolnewF30pdzR9a5Lj3DNg== - dependencies: - "@typescript-eslint/types" "4.29.2" - "@typescript-eslint/visitor-keys" "4.29.2" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.29.3": version "4.29.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.3.tgz#1bafad610015c4ded35c85a70b6222faad598b40" @@ -2126,14 +2100,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.29.2": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.2.tgz#d2da7341f3519486f50655159f4e5ecdcb2cd1df" - integrity sha512-bDgJLQ86oWHJoZ1ai4TZdgXzJxsea3Ee9u9wsTAvjChdj2WLcVsgWYAPeY7RQMn16tKrlQaBnpKv7KBfs4EQag== - dependencies: - "@typescript-eslint/types" "4.29.2" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.29.3": version "4.29.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.3.tgz#c691760a00bd86bf8320d2a90a93d86d322f1abf" From 06cd267663955f64b70685c604105d051ffd6beb Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Wed, 25 Aug 2021 20:00:09 +0300 Subject: [PATCH 119/173] feat(info): added the `--additional-package` option --- packages/info/README.md | 7 +- packages/info/src/index.ts | 59 +++++++----- .../help.test.js.snap.devServer3.webpack4 | 87 ++++++++++-------- .../help.test.js.snap.devServer3.webpack5 | 87 ++++++++++-------- .../help.test.js.snap.devServer4.webpack4 | 87 ++++++++++-------- .../help.test.js.snap.devServer4.webpack5 | 87 ++++++++++-------- test/info/additional-package.test.js | 91 +++++++++++++++++++ test/info/basic.test.js | 36 ++++++++ test/info/info-unknown.test.js | 11 --- .../{info-output.test.js => output.test.js} | 18 +--- 10 files changed, 363 insertions(+), 207 deletions(-) create mode 100644 test/info/additional-package.test.js create mode 100644 test/info/basic.test.js delete mode 100644 test/info/info-unknown.test.js rename test/info/{info-output.test.js => output.test.js} (75%) diff --git a/packages/info/README.md b/packages/info/README.md index 1c9303b21be..aa99d371158 100644 --- a/packages/info/README.md +++ b/packages/info/README.md @@ -32,9 +32,10 @@ webpack info [options] #### Output format -| Flag | Description | Type | -| ----------------------------------- | --------------------------------------- | ------ | -| `-o, --output < json or markdown >` | To get the output in a specified format | string | +| Flag | Description | Type | +| ------------------------------------- | --------------------------------------- | ------ | +| `-o, --output < json or markdown >` | To get the output in a specified format | string | +| `-a, --additional-package ` | Adds additional packages to the output | string | _Not supported for config_ diff --git a/packages/info/src/index.ts b/packages/info/src/index.ts index c86fd337f12..b800c710d6d 100644 --- a/packages/info/src/index.ts +++ b/packages/info/src/index.ts @@ -9,26 +9,6 @@ interface Information { npmPackages?: string | string[]; } -const DEFAULT_DETAILS: Information = { - Binaries: ["Node", "Yarn", "npm"], - Browsers: [ - "Brave Browser", - "Chrome", - "Chrome Canary", - "Edge", - "Firefox", - "Firefox Developer Edition", - "Firefox Nightly", - "Internet Explorer", - "Safari", - "Safari Technology Preview", - ], - Monorepos: ["Yarn Workspaces", "Lerna"], - System: ["OS", "CPU", "Memory"], - npmGlobalPackages: ["webpack", "webpack-cli"], - npmPackages: "*webpack*", -}; - class InfoCommand { // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any async apply(cli: any): Promise { @@ -51,6 +31,13 @@ class InfoCommand { ], description: "To get the output in a specified format ( accept json or markdown )", }, + { + name: "additional-package", + alias: "a", + configs: [{ type: "string" }], + multiple: true, + description: "Adds additional packages to the output", + }, ], async (options) => { let { output } = options; @@ -74,7 +61,37 @@ class InfoCommand { } } - let info = await envinfo.run(DEFAULT_DETAILS, envinfoConfig); + const defaultInformation: Information = { + Binaries: ["Node", "Yarn", "npm"], + Browsers: [ + "Brave Browser", + "Chrome", + "Chrome Canary", + "Edge", + "Firefox", + "Firefox Developer Edition", + "Firefox Nightly", + "Internet Explorer", + "Safari", + "Safari Technology Preview", + ], + Monorepos: ["Yarn Workspaces", "Lerna"], + System: ["OS", "CPU", "Memory"], + npmGlobalPackages: ["webpack", "webpack-cli", "webpack-dev-server"], + npmPackages: "{*webpack*,*loader*}", + }; + + let defaultPackages: string[] = ["webpack", "loader"]; + + if (typeof options.additionalPackage !== "undefined") { + defaultPackages = [...defaultPackages, ...options.additionalPackage]; + } + + defaultInformation.npmPackages = `{${defaultPackages + .map((item) => `*${item}*`) + .join(",")}}`; + + let info = await envinfo.run(defaultInformation, envinfoConfig); info = info.replace(/npmPackages/g, "Packages"); info = info.replace(/npmGlobalPackages/g, "Global Packages"); diff --git a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack4 b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack4 index fe305e2bd43..f2c094f3e26 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack4 +++ b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack4 @@ -721,13 +721,14 @@ exports[`help should show help information for 'i' command using command syntax: Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -744,13 +745,14 @@ exports[`help should show help information for 'i' command using the "--help" op Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -767,15 +769,17 @@ exports[`help should show help information for 'info' and respect the "--color" Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json - or markdown ) + -o, --output To get the output in a specified format + ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' - and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', + 'webpack-cli' and 'webpack-dev-server' + and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -792,15 +796,17 @@ exports[`help should show help information for 'info' and respect the "--no-colo Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json - or markdown ) + -o, --output To get the output in a specified format + ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' - and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', + 'webpack-cli' and 'webpack-dev-server' + and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -817,13 +823,14 @@ exports[`help should show help information for 'info' command using command synt Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -840,13 +847,14 @@ exports[`help should show help information for 'info' command using the "--help" Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -2669,13 +2677,14 @@ exports[`help should show help information with options for sub commands: stdout Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. diff --git a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 index 5dd3e3d69c6..d39d120a5ca 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 +++ b/test/help/__snapshots__/help.test.js.snap.devServer3.webpack5 @@ -730,13 +730,14 @@ exports[`help should show help information for 'i' command using command syntax: Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -753,13 +754,14 @@ exports[`help should show help information for 'i' command using the "--help" op Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -776,15 +778,17 @@ exports[`help should show help information for 'info' and respect the "--color" Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json - or markdown ) + -o, --output To get the output in a specified format + ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' - and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', + 'webpack-cli' and 'webpack-dev-server' + and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -801,15 +805,17 @@ exports[`help should show help information for 'info' and respect the "--no-colo Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json - or markdown ) + -o, --output To get the output in a specified format + ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' - and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', + 'webpack-cli' and 'webpack-dev-server' + and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -826,13 +832,14 @@ exports[`help should show help information for 'info' command using command synt Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -849,13 +856,14 @@ exports[`help should show help information for 'info' command using the "--help" Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -2712,13 +2720,14 @@ exports[`help should show help information with options for sub commands: stdout Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. diff --git a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 index 0ba6c2bf8d9..d796c40bf47 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 +++ b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack4 @@ -721,13 +721,14 @@ exports[`help should show help information for 'i' command using command syntax: Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -744,13 +745,14 @@ exports[`help should show help information for 'i' command using the "--help" op Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -767,15 +769,17 @@ exports[`help should show help information for 'info' and respect the "--color" Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json - or markdown ) + -o, --output To get the output in a specified format + ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' - and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', + 'webpack-cli' and 'webpack-dev-server' + and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -792,15 +796,17 @@ exports[`help should show help information for 'info' and respect the "--no-colo Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json - or markdown ) + -o, --output To get the output in a specified format + ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' - and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', + 'webpack-cli' and 'webpack-dev-server' + and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -817,13 +823,14 @@ exports[`help should show help information for 'info' command using command synt Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -840,13 +847,14 @@ exports[`help should show help information for 'info' command using the "--help" Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -2095,13 +2103,14 @@ exports[`help should show help information with options for sub commands: stdout Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. diff --git a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 index 710a6ec9751..962419c9366 100644 --- a/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 +++ b/test/help/__snapshots__/help.test.js.snap.devServer4.webpack5 @@ -730,13 +730,14 @@ exports[`help should show help information for 'i' command using command syntax: Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -753,13 +754,14 @@ exports[`help should show help information for 'i' command using the "--help" op Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -776,15 +778,17 @@ exports[`help should show help information for 'info' and respect the "--color" Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json - or markdown ) + -o, --output To get the output in a specified format + ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' - and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', + 'webpack-cli' and 'webpack-dev-server' + and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -801,15 +805,17 @@ exports[`help should show help information for 'info' and respect the "--no-colo Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json - or markdown ) + -o, --output To get the output in a specified format + ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' - and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', + 'webpack-cli' and 'webpack-dev-server' + and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -826,13 +832,14 @@ exports[`help should show help information for 'info' command using command synt Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -849,13 +856,14 @@ exports[`help should show help information for 'info' command using the "--help" Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. @@ -2130,13 +2138,14 @@ exports[`help should show help information with options for sub commands: stdout Outputs information about your system. Options: - -o, --output To get the output in a specified format ( accept json or markdown ) + -o, --output To get the output in a specified format ( accept json or markdown ) + -a, --additional-package Adds additional packages to the output Global options: - --color Enable colors on console. - --no-color Disable colors on console. - -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. - -h, --help [verbose] Display help for commands and options. + --color Enable colors on console. + --no-color Disable colors on console. + -v, --version Output the version number of 'webpack', 'webpack-cli' and 'webpack-dev-server' and commands. + -h, --help [verbose] Display help for commands and options. To see list of all supported commands and options run 'webpack --help=verbose'. diff --git a/test/info/additional-package.test.js b/test/info/additional-package.test.js new file mode 100644 index 00000000000..a990bcc0cab --- /dev/null +++ b/test/info/additional-package.test.js @@ -0,0 +1,91 @@ +"use strict"; + +const { join } = require("path"); +const { run } = require("../utils/test-utils"); + +describe("'-a, --additional-package ' usage", () => { + it("should work with only one package", async () => { + const { exitCode, stdout, stderr } = await run(join(__dirname, "../../"), [ + "info", + "--additional-package", + "typescript", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("System:"); + expect(stdout).toContain("Node"); + expect(stdout).toContain("npm"); + expect(stdout).toContain("Yarn"); + expect(stdout).toContain("typescript"); + }); + + it("should work with only one package using '-a' alias", async () => { + const { exitCode, stdout, stderr } = await run(join(__dirname, "../../"), [ + "info", + "-a", + "typescript", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("System:"); + expect(stdout).toContain("Node"); + expect(stdout).toContain("npm"); + expect(stdout).toContain("Yarn"); + expect(stdout).toContain("typescript"); + }); + + it("should work with multiple packages", async () => { + const { exitCode, stdout, stderr } = await run(join(__dirname, "../../"), [ + "info", + "--additional-package", + "typescript", + "--additional-package", + "eslint", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("System:"); + expect(stdout).toContain("Node"); + expect(stdout).toContain("npm"); + expect(stdout).toContain("Yarn"); + expect(stdout).toContain("typescript"); + expect(stdout).toContain("eslint"); + expect(stdout).toContain("eslint-config-prettier"); + expect(stdout).toContain("eslint-plugin-node"); + }); + + it("should work with multiple packages using '-a' alias", async () => { + const { exitCode, stdout, stderr } = await run(join(__dirname, "../../"), [ + "info", + "-a", + "typescript", + "-a", + "eslint", + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("System:"); + expect(stdout).toContain("Node"); + expect(stdout).toContain("npm"); + expect(stdout).toContain("Yarn"); + expect(stdout).toContain("typescript"); + expect(stdout).toContain("eslint"); + expect(stdout).toContain("eslint-config-prettier"); + expect(stdout).toContain("eslint-plugin-node"); + }); + + it("should throw an error on invalid usage", async () => { + const { exitCode, stdout, stderr } = await run(join(__dirname, "../../"), [ + "info", + "--additional-package", + ]); + + expect(exitCode).toBe(2); + expect(stderr).toContain(`Option '-a, --additional-package ' argument missing`); + expect(stdout).toBeFalsy(); + }); +}); diff --git a/test/info/basic.test.js b/test/info/basic.test.js new file mode 100644 index 00000000000..2bf135d795e --- /dev/null +++ b/test/info/basic.test.js @@ -0,0 +1,36 @@ +const { join } = require("path"); +const { run } = require("../utils/test-utils"); + +describe("basic usage", () => { + it("should work", async () => { + const { exitCode, stdout, stderr } = await run(__dirname, ["info"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("System:"); + expect(stdout).toContain("Node"); + expect(stdout).toContain("npm"); + expect(stdout).toContain("Yarn"); + }); + + it("should work and gets more info in project root", async () => { + const { exitCode, stderr, stdout } = await run(join(__dirname, "../../"), ["info"]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain("System:"); + expect(stdout).toContain("Monorepos:"); + expect(stdout).toContain("Packages:"); + expect(stdout).toContain("Node"); + expect(stdout).toContain("npm"); + expect(stdout).toContain("Yarn"); + }); + + it("shows an appropriate warning on supplying unknown args", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--unknown"]); + + expect(exitCode).toBe(2); + expect(stderr).toContain("Error: Unknown option '--unknown'"); + expect(stdout).toBeFalsy(); + }); +}); diff --git a/test/info/info-unknown.test.js b/test/info/info-unknown.test.js deleted file mode 100644 index aa803e17fd3..00000000000 --- a/test/info/info-unknown.test.js +++ /dev/null @@ -1,11 +0,0 @@ -const { run } = require("../utils/test-utils"); - -describe("should handle unknown args", () => { - it("shows an appropriate warning on supplying unknown args", async () => { - const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--unknown"]); - - expect(exitCode).toBe(2); - expect(stderr).toContain("Error: Unknown option '--unknown'"); - expect(stdout).toBeFalsy(); - }); -}); diff --git a/test/info/info-output.test.js b/test/info/output.test.js similarity index 75% rename from test/info/info-output.test.js rename to test/info/output.test.js index 95613a9c608..65404891648 100644 --- a/test/info/info-output.test.js +++ b/test/info/output.test.js @@ -1,10 +1,9 @@ "use strict"; -const { join } = require("path"); const { run } = require("../utils/test-utils"); -describe("basic info usage", () => { - it("gets info without flags", async () => { +describe("'-o, --output ' usage", () => { + it("gets info text by default", async () => { const { exitCode, stdout, stderr } = await run(__dirname, ["info"]); expect(exitCode).toBe(0); @@ -15,19 +14,6 @@ describe("basic info usage", () => { expect(stdout).toContain("Yarn"); }); - it("gets more info in project root", async () => { - const { exitCode, stderr, stdout } = await run(join(__dirname, "../../"), ["info"]); - - expect(exitCode).toBe(0); - expect(stderr).toBeFalsy(); - expect(stdout).toContain("System:"); - expect(stdout).toContain("Monorepos:"); - expect(stdout).toContain("Packages:"); - expect(stdout).toContain("Node"); - expect(stdout).toContain("npm"); - expect(stdout).toContain("Yarn"); - }); - it("gets info as json", async () => { const { exitCode, stderr, stdout } = await run(__dirname, ["info", "--output=json"]); From 09268a27f3e5bbe2542a525bdf958beaa45bb145 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Aug 2021 14:46:15 +0300 Subject: [PATCH 120/173] chore(deps-dev): bump jest from 27.0.6 to 27.1.0 (#2923) --- yarn.lock | 639 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 337 insertions(+), 302 deletions(-) diff --git a/yarn.lock b/yarn.lock index a05297ac031..025b7e014ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -649,94 +649,94 @@ jest-util "^27.0.1" slash "^3.0.0" -"@jest/console@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.0.6.tgz#3eb72ea80897495c3d73dd97aab7f26770e2260f" - integrity sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg== +"@jest/console@^27.1.0": + version "27.1.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.1.0.tgz#de13b603cb1d389b50c0dc6296e86e112381e43c" + integrity sha512-+Vl+xmLwAXLNlqT61gmHEixeRbS4L8MUzAjtpBCOPWH+izNI/dR16IeXjkXJdRtIVWVSf9DO1gdp67B1XorZhQ== dependencies: - "@jest/types" "^27.0.6" + "@jest/types" "^27.1.0" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.0.6" - jest-util "^27.0.6" + jest-message-util "^27.1.0" + jest-util "^27.1.0" slash "^3.0.0" -"@jest/core@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.0.6.tgz#c5f642727a0b3bf0f37c4b46c675372d0978d4a1" - integrity sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow== +"@jest/core@^27.1.0": + version "27.1.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.1.0.tgz#622220f18032f5869e579cecbe744527238648bf" + integrity sha512-3l9qmoknrlCFKfGdrmiQiPne+pUR4ALhKwFTYyOeKw6egfDwJkO21RJ1xf41rN8ZNFLg5W+w6+P4fUqq4EMRWA== dependencies: - "@jest/console" "^27.0.6" - "@jest/reporters" "^27.0.6" - "@jest/test-result" "^27.0.6" - "@jest/transform" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/console" "^27.1.0" + "@jest/reporters" "^27.1.0" + "@jest/test-result" "^27.1.0" + "@jest/transform" "^27.1.0" + "@jest/types" "^27.1.0" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^27.0.6" - jest-config "^27.0.6" - jest-haste-map "^27.0.6" - jest-message-util "^27.0.6" + jest-changed-files "^27.1.0" + jest-config "^27.1.0" + jest-haste-map "^27.1.0" + jest-message-util "^27.1.0" jest-regex-util "^27.0.6" - jest-resolve "^27.0.6" - jest-resolve-dependencies "^27.0.6" - jest-runner "^27.0.6" - jest-runtime "^27.0.6" - jest-snapshot "^27.0.6" - jest-util "^27.0.6" - jest-validate "^27.0.6" - jest-watcher "^27.0.6" + jest-resolve "^27.1.0" + jest-resolve-dependencies "^27.1.0" + jest-runner "^27.1.0" + jest-runtime "^27.1.0" + jest-snapshot "^27.1.0" + jest-util "^27.1.0" + jest-validate "^27.1.0" + jest-watcher "^27.1.0" micromatch "^4.0.4" p-each-series "^2.1.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.6.tgz#ee293fe996db01d7d663b8108fa0e1ff436219d2" - integrity sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg== +"@jest/environment@^27.1.0": + version "27.1.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.1.0.tgz#c7224a67004759ec203d8fa44e8bc0db93f66c44" + integrity sha512-wRp50aAMY2w1U2jP1G32d6FUVBNYqmk8WaGkiIEisU48qyDV0WPtw3IBLnl7orBeggveommAkuijY+RzVnNDOQ== dependencies: - "@jest/fake-timers" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/fake-timers" "^27.1.0" + "@jest/types" "^27.1.0" "@types/node" "*" - jest-mock "^27.0.6" + jest-mock "^27.1.0" -"@jest/fake-timers@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.6.tgz#cbad52f3fe6abe30e7acb8cd5fa3466b9588e3df" - integrity sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ== +"@jest/fake-timers@^27.1.0": + version "27.1.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.1.0.tgz#c0b343d8a16af17eab2cb6862e319947c0ea2abe" + integrity sha512-22Zyn8il8DzpS+30jJNVbTlm7vAtnfy1aYvNeOEHloMlGy1PCYLHa4PWlSws0hvNsMM5bON6GISjkLoQUV3oMA== dependencies: - "@jest/types" "^27.0.6" + "@jest/types" "^27.1.0" "@sinonjs/fake-timers" "^7.0.2" "@types/node" "*" - jest-message-util "^27.0.6" - jest-mock "^27.0.6" - jest-util "^27.0.6" + jest-message-util "^27.1.0" + jest-mock "^27.1.0" + jest-util "^27.1.0" -"@jest/globals@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.6.tgz#48e3903f99a4650673d8657334d13c9caf0e8f82" - integrity sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw== +"@jest/globals@^27.1.0": + version "27.1.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.1.0.tgz#e093a49c718dd678a782c197757775534c88d3f2" + integrity sha512-73vLV4aNHAlAgjk0/QcSIzzCZSqVIPbmFROJJv9D3QUR7BI4f517gVdJpSrCHxuRH3VZFhe0yGG/tmttlMll9g== dependencies: - "@jest/environment" "^27.0.6" - "@jest/types" "^27.0.6" - expect "^27.0.6" + "@jest/environment" "^27.1.0" + "@jest/types" "^27.1.0" + expect "^27.1.0" -"@jest/reporters@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.6.tgz#91e7f2d98c002ad5df94d5b5167c1eb0b9fd5b00" - integrity sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA== +"@jest/reporters@^27.1.0": + version "27.1.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.1.0.tgz#02ed1e6601552c2f6447378533f77aad002781d4" + integrity sha512-5T/zlPkN2HnK3Sboeg64L5eC8iiaZueLpttdktWTJsvALEtP2YMkC5BQxwjRWQACG9SwDmz+XjjkoxXUDMDgdw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.0.6" - "@jest/test-result" "^27.0.6" - "@jest/transform" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/console" "^27.1.0" + "@jest/test-result" "^27.1.0" + "@jest/transform" "^27.1.0" + "@jest/types" "^27.1.0" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" @@ -747,10 +747,10 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^27.0.6" - jest-resolve "^27.0.6" - jest-util "^27.0.6" - jest-worker "^27.0.6" + jest-haste-map "^27.1.0" + jest-resolve "^27.1.0" + jest-util "^27.1.0" + jest-worker "^27.1.0" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" @@ -776,41 +776,41 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-result@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.6.tgz#3fa42015a14e4fdede6acd042ce98c7f36627051" - integrity sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w== +"@jest/test-result@^27.1.0": + version "27.1.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.1.0.tgz#9345ae5f97f6a5287af9ebd54716cd84331d42e8" + integrity sha512-Aoz00gpDL528ODLghat3QSy6UBTD5EmmpjrhZZMK/v1Q2/rRRqTGnFxHuEkrD4z/Py96ZdOHxIWkkCKRpmnE1A== dependencies: - "@jest/console" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/console" "^27.1.0" + "@jest/types" "^27.1.0" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz#80a913ed7a1130545b1cd777ff2735dd3af5d34b" - integrity sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA== +"@jest/test-sequencer@^27.1.0": + version "27.1.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.1.0.tgz#04e8b3bd735570d3d48865e74977a14dc99bff2d" + integrity sha512-lnCWawDr6Z1DAAK9l25o3AjmKGgcutq1iIbp+hC10s/HxnB8ZkUsYq1FzjOoxxZ5hW+1+AthBtvS4x9yno3V1A== dependencies: - "@jest/test-result" "^27.0.6" + "@jest/test-result" "^27.1.0" graceful-fs "^4.2.4" - jest-haste-map "^27.0.6" - jest-runtime "^27.0.6" + jest-haste-map "^27.1.0" + jest-runtime "^27.1.0" -"@jest/transform@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.6.tgz#189ad7107413208f7600f4719f81dd2f7278cc95" - integrity sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA== +"@jest/transform@^27.1.0": + version "27.1.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.1.0.tgz#962e385517e3d1f62827fa39c305edcc3ca8544b" + integrity sha512-ZRGCA2ZEVJ00ubrhkTG87kyLbN6n55g1Ilq0X9nJb5bX3MhMp3O6M7KG+LvYu+nZRqG5cXsQnJEdZbdpTAV8pQ== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^27.0.6" + "@jest/types" "^27.1.0" babel-plugin-istanbul "^6.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 "^27.0.6" + jest-haste-map "^27.1.0" jest-regex-util "^27.0.6" - jest-util "^27.0.6" + jest-util "^27.1.0" micromatch "^4.0.4" pirates "^4.0.1" slash "^3.0.0" @@ -850,6 +850,17 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jest/types@^27.1.0": + version "27.1.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.1.0.tgz#674a40325eab23c857ebc0689e7e191a3c5b10cc" + integrity sha512-pRP5cLIzN7I7Vp6mHKRSaZD7YpBTK7hawx5si8trMKqk4+WOdK8NEKOTO2G8PKWD1HbKMVckVB6/XHh/olhf2g== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + "@lerna/add@4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@lerna/add/-/add-4.0.0.tgz#c36f57d132502a57b9e7058d1548b7a565ef183f" @@ -2690,13 +2701,13 @@ 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@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.6.tgz#e99c6e0577da2655118e3608b68761a5a69bd0d8" - integrity sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA== +babel-jest@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.1.0.tgz#e96ca04554fd32274439869e2b6d24de9d91bc4e" + integrity sha512-6NrdqzaYemALGCuR97QkC/FkFIEBWP5pw5TMJoUHZTVXyOgocujp6A0JE2V6gE0HtqAAv6VKU/nI+OCR1Z4gHA== dependencies: - "@jest/transform" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/transform" "^27.1.0" + "@jest/types" "^27.1.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.0.0" babel-preset-jest "^27.0.6" @@ -4514,16 +4525,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.0.6.tgz#a4d74fbe27222c718fff68ef49d78e26a8fd4c05" - integrity sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw== +expect@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.1.0.tgz#380de0abb3a8f2299c4c6c66bbe930483b5dba9b" + integrity sha512-9kJngV5hOJgkFil4F/uXm3hVBubUK2nERVfvqNNwxxuW8ZOUwSTTSysgfzckYtv/LBzj/LJXbiAF7okHCXgdug== dependencies: - "@jest/types" "^27.0.6" + "@jest/types" "^27.1.0" ansi-styles "^5.0.0" jest-get-type "^27.0.6" - jest-matcher-utils "^27.0.6" - jest-message-util "^27.0.6" + jest-matcher-utils "^27.1.0" + jest-message-util "^27.1.0" jest-regex-util "^27.0.6" express@^4.17.1: @@ -6319,84 +6330,84 @@ jake@^10.6.1: filelist "^1.0.1" minimatch "^3.0.4" -jest-changed-files@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.0.6.tgz#bed6183fcdea8a285482e3b50a9a7712d49a7a8b" - integrity sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA== +jest-changed-files@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.1.0.tgz#42da6ea00f06274172745729d55f42b60a9dffe0" + integrity sha512-eRcb13TfQw0xiV2E98EmiEgs9a5uaBIqJChyl0G7jR9fCIvGjXovnDS6Zbku3joij4tXYcSK4SE1AXqOlUxjWg== dependencies: - "@jest/types" "^27.0.6" + "@jest/types" "^27.1.0" execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.0.6.tgz#dd4df17c4697db6a2c232aaad4e9cec666926668" - integrity sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q== +jest-circus@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.1.0.tgz#24c280c90a625ea57da20ee231d25b1621979a57" + integrity sha512-6FWtHs3nZyZlMBhRf1wvAC5CirnflbGJAY1xssSAnERLiiXQRH+wY2ptBVtXjX4gz4AA2EwRV57b038LmifRbA== dependencies: - "@jest/environment" "^27.0.6" - "@jest/test-result" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/environment" "^27.1.0" + "@jest/test-result" "^27.1.0" + "@jest/types" "^27.1.0" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" - expect "^27.0.6" + expect "^27.1.0" is-generator-fn "^2.0.0" - jest-each "^27.0.6" - jest-matcher-utils "^27.0.6" - jest-message-util "^27.0.6" - jest-runtime "^27.0.6" - jest-snapshot "^27.0.6" - jest-util "^27.0.6" - pretty-format "^27.0.6" + jest-each "^27.1.0" + jest-matcher-utils "^27.1.0" + jest-message-util "^27.1.0" + jest-runtime "^27.1.0" + jest-snapshot "^27.1.0" + jest-util "^27.1.0" + pretty-format "^27.1.0" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.6.tgz#d021e5f4d86d6a212450d4c7b86cb219f1e6864f" - integrity sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg== +jest-cli@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.1.0.tgz#118438e4d11cf6fb66cb2b2eb5778817eab3daeb" + integrity sha512-h6zPUOUu+6oLDrXz0yOWY2YXvBLk8gQinx4HbZ7SF4V3HzasQf+ncoIbKENUMwXyf54/6dBkYXvXJos+gOHYZw== dependencies: - "@jest/core" "^27.0.6" - "@jest/test-result" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/core" "^27.1.0" + "@jest/test-result" "^27.1.0" + "@jest/types" "^27.1.0" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" - jest-config "^27.0.6" - jest-util "^27.0.6" - jest-validate "^27.0.6" + jest-config "^27.1.0" + jest-util "^27.1.0" + jest-validate "^27.1.0" prompts "^2.0.1" yargs "^16.0.3" -jest-config@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.6.tgz#119fb10f149ba63d9c50621baa4f1f179500277f" - integrity sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w== +jest-config@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.1.0.tgz#e6826e2baaa34c07c3839af86466870e339d9ada" + integrity sha512-GMo7f76vMYUA3b3xOdlcKeKQhKcBIgurjERO2hojo0eLkKPGcw7fyIoanH+m6KOP2bLad+fGnF8aWOJYxzNPeg== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^27.0.6" - "@jest/types" "^27.0.6" - babel-jest "^27.0.6" + "@jest/test-sequencer" "^27.1.0" + "@jest/types" "^27.1.0" + babel-jest "^27.1.0" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" is-ci "^3.0.0" - jest-circus "^27.0.6" - jest-environment-jsdom "^27.0.6" - jest-environment-node "^27.0.6" + jest-circus "^27.1.0" + jest-environment-jsdom "^27.1.0" + jest-environment-node "^27.1.0" jest-get-type "^27.0.6" - jest-jasmine2 "^27.0.6" + jest-jasmine2 "^27.1.0" jest-regex-util "^27.0.6" - jest-resolve "^27.0.6" - jest-runner "^27.0.6" - jest-util "^27.0.6" - jest-validate "^27.0.6" + jest-resolve "^27.1.0" + jest-runner "^27.1.0" + jest-util "^27.1.0" + jest-validate "^27.1.0" micromatch "^4.0.4" - pretty-format "^27.0.6" + pretty-format "^27.1.0" jest-diff@^26.0.0: version "26.6.2" @@ -6408,15 +6419,15 @@ jest-diff@^26.0.0: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-diff@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.0.6.tgz#4a7a19ee6f04ad70e0e3388f35829394a44c7b5e" - integrity sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg== +jest-diff@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.1.0.tgz#c7033f25add95e2218f3c7f4c3d7b634ab6b3cd2" + integrity sha512-rjfopEYl58g/SZTsQFmspBODvMSytL16I+cirnScWTLkQVXYVZfxm78DFfdIIXc05RCYuGjxJqrdyG4PIFzcJg== dependencies: chalk "^4.0.0" diff-sequences "^27.0.6" jest-get-type "^27.0.6" - pretty-format "^27.0.6" + pretty-format "^27.1.0" jest-docblock@^27.0.6: version "27.0.6" @@ -6425,41 +6436,41 @@ jest-docblock@^27.0.6: dependencies: detect-newline "^3.0.0" -jest-each@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.0.6.tgz#cee117071b04060158dc8d9a66dc50ad40ef453b" - integrity sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA== +jest-each@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.1.0.tgz#36ac75f7aeecb3b8da2a8e617ccb30a446df408c" + integrity sha512-K/cNvQlmDqQMRHF8CaQ0XPzCfjP5HMJc2bIJglrIqI9fjwpNqITle63IWE+wq4p+3v+iBgh7Wq0IdGpLx5xjDg== dependencies: - "@jest/types" "^27.0.6" + "@jest/types" "^27.1.0" chalk "^4.0.0" jest-get-type "^27.0.6" - jest-util "^27.0.6" - pretty-format "^27.0.6" + jest-util "^27.1.0" + pretty-format "^27.1.0" -jest-environment-jsdom@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz#f66426c4c9950807d0a9f209c590ce544f73291f" - integrity sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw== +jest-environment-jsdom@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.1.0.tgz#5fb3eb8a67e02e6cc623640388d5f90e33075f18" + integrity sha512-JbwOcOxh/HOtsj56ljeXQCUJr3ivnaIlM45F5NBezFLVYdT91N5UofB1ux2B1CATsQiudcHdgTaeuqGXJqjJYQ== dependencies: - "@jest/environment" "^27.0.6" - "@jest/fake-timers" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/environment" "^27.1.0" + "@jest/fake-timers" "^27.1.0" + "@jest/types" "^27.1.0" "@types/node" "*" - jest-mock "^27.0.6" - jest-util "^27.0.6" + jest-mock "^27.1.0" + jest-util "^27.1.0" jsdom "^16.6.0" -jest-environment-node@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.6.tgz#a6699b7ceb52e8d68138b9808b0c404e505f3e07" - integrity sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w== +jest-environment-node@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.1.0.tgz#feea6b765f1fd4582284d4f1007df2b0a8d15b7f" + integrity sha512-JIyJ8H3wVyM4YCXp7njbjs0dIT87yhGlrXCXhDKNIg1OjurXr6X38yocnnbXvvNyqVTqSI4M9l+YfPKueqL1lw== dependencies: - "@jest/environment" "^27.0.6" - "@jest/fake-timers" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/environment" "^27.1.0" + "@jest/fake-timers" "^27.1.0" + "@jest/types" "^27.1.0" "@types/node" "*" - jest-mock "^27.0.6" - jest-util "^27.0.6" + jest-mock "^27.1.0" + jest-util "^27.1.0" jest-get-type@^26.3.0: version "26.3.0" @@ -6471,12 +6482,12 @@ jest-get-type@^27.0.6: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== -jest-haste-map@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.6.tgz#4683a4e68f6ecaa74231679dca237279562c8dc7" - integrity sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w== +jest-haste-map@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.1.0.tgz#a39f456823bd6a74e3c86ad25f6fa870428326bf" + integrity sha512-7mz6LopSe+eA6cTFMf10OfLLqRoIPvmMyz5/OnSXnHO7hB0aDP1iIeLWCXzAcYU5eIJVpHr12Bk9yyq2fTW9vg== dependencies: - "@jest/types" "^27.0.6" + "@jest/types" "^27.1.0" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" @@ -6484,54 +6495,54 @@ jest-haste-map@^27.0.6: graceful-fs "^4.2.4" jest-regex-util "^27.0.6" jest-serializer "^27.0.6" - jest-util "^27.0.6" - jest-worker "^27.0.6" + jest-util "^27.1.0" + jest-worker "^27.1.0" micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz#fd509a9ed3d92bd6edb68a779f4738b100655b37" - integrity sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA== +jest-jasmine2@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.1.0.tgz#324a3de0b2ee20d238b2b5b844acc4571331a206" + integrity sha512-Z/NIt0wBDg3przOW2FCWtYjMn3Ip68t0SL60agD/e67jlhTyV3PIF8IzT9ecwqFbeuUSO2OT8WeJgHcalDGFzQ== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^27.0.6" + "@jest/environment" "^27.1.0" "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/test-result" "^27.1.0" + "@jest/types" "^27.1.0" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^27.0.6" + expect "^27.1.0" is-generator-fn "^2.0.0" - jest-each "^27.0.6" - jest-matcher-utils "^27.0.6" - jest-message-util "^27.0.6" - jest-runtime "^27.0.6" - jest-snapshot "^27.0.6" - jest-util "^27.0.6" - pretty-format "^27.0.6" + jest-each "^27.1.0" + jest-matcher-utils "^27.1.0" + jest-message-util "^27.1.0" + jest-runtime "^27.1.0" + jest-snapshot "^27.1.0" + jest-util "^27.1.0" + pretty-format "^27.1.0" throat "^6.0.1" -jest-leak-detector@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz#545854275f85450d4ef4b8fe305ca2a26450450f" - integrity sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ== +jest-leak-detector@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.1.0.tgz#fe7eb633c851e06280ec4dd248067fe232c00a79" + integrity sha512-oHvSkz1E80VyeTKBvZNnw576qU+cVqRXUD3/wKXh1zpaki47Qty2xeHg2HKie9Hqcd2l4XwircgNOWb/NiGqdA== dependencies: jest-get-type "^27.0.6" - pretty-format "^27.0.6" + pretty-format "^27.1.0" -jest-matcher-utils@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz#2a8da1e86c620b39459f4352eaa255f0d43e39a9" - integrity sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA== +jest-matcher-utils@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.1.0.tgz#68afda0885db1f0b9472ce98dc4c535080785301" + integrity sha512-VmAudus2P6Yt/JVBRdTPFhUzlIN8DYJd+et5Rd9QDsO/Z82Z4iwGjo43U8Z+PTiz8CBvKvlb6Fh3oKy39hykkQ== dependencies: chalk "^4.0.0" - jest-diff "^27.0.6" + jest-diff "^27.1.0" jest-get-type "^27.0.6" - pretty-format "^27.0.6" + pretty-format "^27.1.0" jest-message-util@^27.0.1: version "27.0.1" @@ -6548,27 +6559,27 @@ jest-message-util@^27.0.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.6.tgz#158bcdf4785706492d164a39abca6a14da5ab8b5" - integrity sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw== +jest-message-util@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.1.0.tgz#e77692c84945d1d10ef00afdfd3d2c20bd8fb468" + integrity sha512-Eck8NFnJ5Sg36R9XguD65cf2D5+McC+NF5GIdEninoabcuoOfWrID5qJhufq5FB0DRKoiyxB61hS7MKoMD0trQ== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.0.6" + "@jest/types" "^27.1.0" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.4" - pretty-format "^27.0.6" + pretty-format "^27.1.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.0.6.tgz#0efdd40851398307ba16778728f6d34d583e3467" - integrity sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw== +jest-mock@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.1.0.tgz#7ca6e4d09375c071661642d1c14c4711f3ab4b4f" + integrity sha512-iT3/Yhu7DwAg/0HvvLCqLvrTKTRMyJlrrfJYWzuLSf9RCAxBoIXN3HoymZxMnYsC3eD8ewGbUa9jUknwBenx2w== dependencies: - "@jest/types" "^27.0.6" + "@jest/types" "^27.1.0" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -6586,86 +6597,88 @@ jest-regex-util@^27.0.6: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5" integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ== -jest-resolve-dependencies@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz#3e619e0ef391c3ecfcf6ef4056207a3d2be3269f" - integrity sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA== +jest-resolve-dependencies@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.0.tgz#d32ea4a2c82f76410f6157d0ec6cde24fbff2317" + integrity sha512-Kq5XuDAELuBnrERrjFYEzu/A+i2W7l9HnPWqZEeKGEQ7m1R+6ndMbdXCVCx29Se1qwLZLgvoXwinB3SPIaitMQ== dependencies: - "@jest/types" "^27.0.6" + "@jest/types" "^27.1.0" jest-regex-util "^27.0.6" - jest-snapshot "^27.0.6" + jest-snapshot "^27.1.0" -jest-resolve@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.6.tgz#e90f436dd4f8fbf53f58a91c42344864f8e55bff" - integrity sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA== +jest-resolve@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.1.0.tgz#bb22303c9e240cccdda28562e3c6fbcc6a23ac86" + integrity sha512-TXvzrLyPg0vLOwcWX38ZGYeEztSEmW+cQQKqc4HKDUwun31wsBXwotRlUz4/AYU/Fq4GhbMd/ileIWZEtcdmIA== dependencies: - "@jest/types" "^27.0.6" + "@jest/types" "^27.1.0" chalk "^4.0.0" escalade "^3.1.1" graceful-fs "^4.2.4" + jest-haste-map "^27.1.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.0.6" - jest-validate "^27.0.6" + jest-util "^27.1.0" + jest-validate "^27.1.0" resolve "^1.20.0" slash "^3.0.0" -jest-runner@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.6.tgz#1325f45055539222bbc7256a6976e993ad2f9520" - integrity sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ== +jest-runner@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.1.0.tgz#1b28d114fb3b67407b8354c9385d47395e8ff83f" + integrity sha512-ZWPKr9M5w5gDplz1KsJ6iRmQaDT/yyAFLf18fKbb/+BLWsR1sCNC2wMT0H7pP3gDcBz0qZ6aJraSYUNAGSJGaw== dependencies: - "@jest/console" "^27.0.6" - "@jest/environment" "^27.0.6" - "@jest/test-result" "^27.0.6" - "@jest/transform" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/console" "^27.1.0" + "@jest/environment" "^27.1.0" + "@jest/test-result" "^27.1.0" + "@jest/transform" "^27.1.0" + "@jest/types" "^27.1.0" "@types/node" "*" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" jest-docblock "^27.0.6" - jest-environment-jsdom "^27.0.6" - jest-environment-node "^27.0.6" - jest-haste-map "^27.0.6" - jest-leak-detector "^27.0.6" - jest-message-util "^27.0.6" - jest-resolve "^27.0.6" - jest-runtime "^27.0.6" - jest-util "^27.0.6" - jest-worker "^27.0.6" + jest-environment-jsdom "^27.1.0" + jest-environment-node "^27.1.0" + jest-haste-map "^27.1.0" + jest-leak-detector "^27.1.0" + jest-message-util "^27.1.0" + jest-resolve "^27.1.0" + jest-runtime "^27.1.0" + jest-util "^27.1.0" + jest-worker "^27.1.0" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.6.tgz#45877cfcd386afdd4f317def551fc369794c27c9" - integrity sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q== +jest-runtime@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.1.0.tgz#1a98d984ffebc16a0b4f9eaad8ab47c00a750cf5" + integrity sha512-okiR2cpGjY0RkWmUGGado6ETpFOi9oG3yV0CioYdoktkVxy5Hv0WRLWnJFuArSYS8cHMCNcceUUMGiIfgxCO9A== dependencies: - "@jest/console" "^27.0.6" - "@jest/environment" "^27.0.6" - "@jest/fake-timers" "^27.0.6" - "@jest/globals" "^27.0.6" + "@jest/console" "^27.1.0" + "@jest/environment" "^27.1.0" + "@jest/fake-timers" "^27.1.0" + "@jest/globals" "^27.1.0" "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.0.6" - "@jest/transform" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/test-result" "^27.1.0" + "@jest/transform" "^27.1.0" + "@jest/types" "^27.1.0" "@types/yargs" "^16.0.0" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" + execa "^5.0.0" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-haste-map "^27.0.6" - jest-message-util "^27.0.6" - jest-mock "^27.0.6" + jest-haste-map "^27.1.0" + jest-message-util "^27.1.0" + jest-mock "^27.1.0" jest-regex-util "^27.0.6" - jest-resolve "^27.0.6" - jest-snapshot "^27.0.6" - jest-util "^27.0.6" - jest-validate "^27.0.6" + jest-resolve "^27.1.0" + jest-snapshot "^27.1.0" + jest-util "^27.1.0" + jest-validate "^27.1.0" slash "^3.0.0" strip-bom "^4.0.0" yargs "^16.0.3" @@ -6678,10 +6691,10 @@ jest-serializer@^27.0.6: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.6.tgz#f4e6b208bd2e92e888344d78f0f650bcff05a4bf" - integrity sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A== +jest-snapshot@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.1.0.tgz#2a063ab90064017a7e9302528be7eaea6da12d17" + integrity sha512-eaeUBoEjuuRwmiRI51oTldUsKOohB1F6fPqWKKILuDi/CStxzp2IWekVUXbuHHoz5ik33ioJhshiHpgPFbYgcA== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" @@ -6689,26 +6702,26 @@ jest-snapshot@^27.0.6: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/transform" "^27.1.0" + "@jest/types" "^27.1.0" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.0.6" + expect "^27.1.0" graceful-fs "^4.2.4" - jest-diff "^27.0.6" + jest-diff "^27.1.0" jest-get-type "^27.0.6" - jest-haste-map "^27.0.6" - jest-matcher-utils "^27.0.6" - jest-message-util "^27.0.6" - jest-resolve "^27.0.6" - jest-util "^27.0.6" + jest-haste-map "^27.1.0" + jest-matcher-utils "^27.1.0" + jest-message-util "^27.1.0" + jest-resolve "^27.1.0" + jest-util "^27.1.0" natural-compare "^1.4.0" - pretty-format "^27.0.6" + pretty-format "^27.1.0" semver "^7.3.2" -jest-util@^27.0.0, jest-util@^27.0.1, jest-util@^27.0.6: +jest-util@^27.0.0, jest-util@^27.0.1: version "27.0.6" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.6.tgz#e8e04eec159de2f4d5f57f795df9cdc091e50297" integrity sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ== @@ -6720,17 +6733,29 @@ jest-util@^27.0.0, jest-util@^27.0.1, jest-util@^27.0.6: is-ci "^3.0.0" picomatch "^2.2.3" -jest-validate@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.0.6.tgz#930a527c7a951927df269f43b2dc23262457e2a6" - integrity sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA== +jest-util@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.1.0.tgz#06a53777a8cb7e4940ca8e20bf9c67dd65d9bd68" + integrity sha512-edSLD2OneYDKC6gZM1yc+wY/877s/fuJNoM1k3sOEpzFyeptSmke3SLnk1dDHk9CgTA+58mnfx3ew3J11Kes/w== dependencies: - "@jest/types" "^27.0.6" + "@jest/types" "^27.1.0" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^3.0.0" + picomatch "^2.2.3" + +jest-validate@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.1.0.tgz#d9e82024c5e3f5cef52a600cfc456793a84c0998" + integrity sha512-QiJ+4XuSuMsfPi9zvdO//IrSRSlG6ybJhOpuqYSsuuaABaNT84h0IoD6vvQhThBOKT+DIKvl5sTM0l6is9+SRA== + dependencies: + "@jest/types" "^27.1.0" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^27.0.6" leven "^3.1.0" - pretty-format "^27.0.6" + pretty-format "^27.1.0" jest-watch-typeahead@^0.6.1: version "0.6.4" @@ -6758,17 +6783,17 @@ jest-watcher@^27.0.0: jest-util "^27.0.1" string-length "^4.0.1" -jest-watcher@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.6.tgz#89526f7f9edf1eac4e4be989bcb6dec6b8878d9c" - integrity sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ== +jest-watcher@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.1.0.tgz#2511fcddb0e969a400f3d1daa74265f93f13ce93" + integrity sha512-ivaWTrA46aHWdgPDgPypSHiNQjyKnLBpUIHeBaGg11U+pDzZpkffGlcB1l1a014phmG0mHgkOHtOgiqJQM6yKQ== dependencies: - "@jest/test-result" "^27.0.6" - "@jest/types" "^27.0.6" + "@jest/test-result" "^27.1.0" + "@jest/types" "^27.1.0" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.0.6" + jest-util "^27.1.0" string-length "^4.0.1" jest-worker@^27.0.2: @@ -6780,23 +6805,23 @@ jest-worker@^27.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.6.tgz#a5fdb1e14ad34eb228cfe162d9f729cdbfa28aed" - integrity sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA== +jest-worker@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.1.0.tgz#65f4a88e37148ed984ba8ca8492d6b376938c0aa" + integrity sha512-mO4PHb2QWLn9yRXGp7rkvXLAYuxwhq1ZYUo0LoDhg8wqvv4QizP1ZWEJOeolgbEgAWZLIEU0wsku8J+lGWfBhg== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" jest@^27.0.3: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.0.6.tgz#10517b2a628f0409087fbf473db44777d7a04505" - integrity sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA== + version "27.1.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.1.0.tgz#eaab62dfdc02d8b7c814cd27b8d2d92bc46d3d69" + integrity sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg== dependencies: - "@jest/core" "^27.0.6" + "@jest/core" "^27.1.0" import-local "^3.0.2" - jest-cli "^27.0.6" + jest-cli "^27.1.0" js-tokens@^4.0.0: version "4.0.0" @@ -8786,7 +8811,7 @@ pretty-format@^26.0.0, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^27.0.1, pretty-format@^27.0.6: +pretty-format@^27.0.1: version "27.0.6" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.6.tgz#ab770c47b2c6f893a21aefc57b75da63ef49a11f" integrity sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ== @@ -8796,6 +8821,16 @@ pretty-format@^27.0.1, pretty-format@^27.0.6: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-format@^27.1.0: + version "27.1.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.1.0.tgz#022f3fdb19121e0a2612f3cff8d724431461b9ca" + integrity sha512-4aGaud3w3rxAO6OXmK3fwBFQ0bctIOG3/if+jYEFGNGIs0EvuidQm3bZ9mlP2/t9epLNC/12czabfy7TZNSwVA== + dependencies: + "@jest/types" "^27.1.0" + ansi-regex "^5.0.0" + ansi-styles "^5.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" From 7c30515905cc608a66903b8e87563711af8e2284 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Aug 2021 14:46:25 +0300 Subject: [PATCH 121/173] chore(deps-dev): bump typescript from 4.3.5 to 4.4.2 (#2921) --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 025b7e014ab..f6455e348eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10627,9 +10627,9 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^4.1.3: - version "4.3.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== + version "4.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.2.tgz#6d618640d430e3569a1dfb44f7d7e600ced3ee86" + integrity sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ== uglify-js@^3.1.4: version "3.13.6" From 30f51c77351c1e62e3764953fabbe4d750712b24 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Aug 2021 13:21:52 +0300 Subject: [PATCH 122/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin (#2924) --- yarn.lock | 58 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index f6455e348eb..610a4bc3d08 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2051,27 +2051,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.29.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.3.tgz#95cb8029a8bd8bd9c7f4ab95074a7cb2115adefa" - integrity sha512-tBgfA3K/3TsZY46ROGvoRxQr1wBkclbVqRQep97MjVHJzcRBURRY3sNFqLk0/Xr//BY5hM9H2p/kp+6qim85SA== + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.30.0.tgz#4a0c1ae96b953f4e67435e20248d812bfa55e4fb" + integrity sha512-NgAnqk55RQ/SD+tZFD9aPwNSeHmDHHe5rtUyhIq0ZeCWZEvo4DK9rYz7v9HDuQZFvn320Ot+AikaCKMFKLlD0g== dependencies: - "@typescript-eslint/experimental-utils" "4.29.3" - "@typescript-eslint/scope-manager" "4.29.3" + "@typescript-eslint/experimental-utils" "4.30.0" + "@typescript-eslint/scope-manager" "4.30.0" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.29.3": - version "4.29.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.3.tgz#52e437a689ccdef73e83c5106b34240a706f15e1" - integrity sha512-ffIvbytTVWz+3keg+Sy94FG1QeOvmV9dP2YSdLFHw/ieLXWCa3U1TYu8IRCOpMv2/SPS8XqhM1+ou1YHsdzKrg== +"@typescript-eslint/experimental-utils@4.30.0": + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.30.0.tgz#9e49704fef568432ae16fc0d6685c13d67db0fd5" + integrity sha512-K8RNIX9GnBsv5v4TjtwkKtqMSzYpjqAQg/oSphtxf3xxdt6T0owqnpojztjjTcatSteH3hLj3t/kklKx87NPqw== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.29.3" - "@typescript-eslint/types" "4.29.3" - "@typescript-eslint/typescript-estree" "4.29.3" + "@typescript-eslint/scope-manager" "4.30.0" + "@typescript-eslint/types" "4.30.0" + "@typescript-eslint/typescript-estree" "4.30.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -2093,11 +2093,24 @@ "@typescript-eslint/types" "4.29.3" "@typescript-eslint/visitor-keys" "4.29.3" +"@typescript-eslint/scope-manager@4.30.0": + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz#1a3ffbb385b1a06be85cd5165a22324f069a85ee" + integrity sha512-VJ/jAXovxNh7rIXCQbYhkyV2Y3Ac/0cVHP/FruTJSAUUm4Oacmn/nkN5zfWmWFEanN4ggP0vJSHOeajtHq3f8A== + dependencies: + "@typescript-eslint/types" "4.30.0" + "@typescript-eslint/visitor-keys" "4.30.0" + "@typescript-eslint/types@4.29.3": version "4.29.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.3.tgz#d7980c49aef643d0af8954c9f14f656b7fd16017" integrity sha512-s1eV1lKNgoIYLAl1JUba8NhULmf+jOmmeFO1G5MN/RBCyyzg4TIOfIOICVNC06lor+Xmy4FypIIhFiJXOknhIg== +"@typescript-eslint/types@4.30.0": + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.30.0.tgz#fb9d9b0358426f18687fba82eb0b0f869780204f" + integrity sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw== + "@typescript-eslint/typescript-estree@4.29.3": version "4.29.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.3.tgz#1bafad610015c4ded35c85a70b6222faad598b40" @@ -2111,6 +2124,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.30.0": + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz#ae57833da72a753f4846cd3053758c771670c2ac" + integrity sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg== + dependencies: + "@typescript-eslint/types" "4.30.0" + "@typescript-eslint/visitor-keys" "4.30.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.29.3": version "4.29.3" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.3.tgz#c691760a00bd86bf8320d2a90a93d86d322f1abf" @@ -2119,6 +2145,14 @@ "@typescript-eslint/types" "4.29.3" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.30.0": + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz#a47c6272fc71b0c627d1691f68eaecf4ad71445e" + integrity sha512-pNaaxDt/Ol/+JZwzP7MqWc8PJQTUhZwoee/PVlQ+iYoYhagccvoHnC9e4l+C/krQYYkENxznhVSDwClIbZVxRw== + dependencies: + "@typescript-eslint/types" "4.30.0" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From b6dfd73dd40af615218ff1dab70c08fe5d8cf31d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Aug 2021 13:22:03 +0300 Subject: [PATCH 123/173] chore(deps-dev): bump @typescript-eslint/parser --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 610a4bc3d08..782d5d80759 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2076,13 +2076,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.29.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.29.3.tgz#2ac25535f34c0e98f50c0e6b28c679c2357d45f2" - integrity sha512-jrHOV5g2u8ROghmspKoW7pN8T/qUzk0+DITun0MELptvngtMrwUJ1tv5zMI04CYVEUsSrN4jV7AKSv+I0y0EfQ== + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.30.0.tgz#6abd720f66bd790f3e0e80c3be77180c8fcb192d" + integrity sha512-HJ0XuluSZSxeboLU7Q2VQ6eLlCwXPBOGnA7CqgBnz2Db3JRQYyBDJgQnop6TZ+rsbSx5gEdWhw4rE4mDa1FnZg== dependencies: - "@typescript-eslint/scope-manager" "4.29.3" - "@typescript-eslint/types" "4.29.3" - "@typescript-eslint/typescript-estree" "4.29.3" + "@typescript-eslint/scope-manager" "4.30.0" + "@typescript-eslint/types" "4.30.0" + "@typescript-eslint/typescript-estree" "4.30.0" debug "^4.3.1" "@typescript-eslint/scope-manager@4.29.3": From 4bbcadac1c24d6f3f2801d6f8851b0f18fa2ab32 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Wed, 1 Sep 2021 15:14:10 +0530 Subject: [PATCH 124/173] docs: update SERVE-OPTIONS-v4 (#2927) --- SERVE-OPTIONS-v4.md | 2 ++ scripts/updateDocs.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/SERVE-OPTIONS-v4.md b/SERVE-OPTIONS-v4.md index 78b10f27992..f7062a43d19 100644 --- a/SERVE-OPTIONS-v4.md +++ b/SERVE-OPTIONS-v4.md @@ -67,6 +67,8 @@ Options: --ipc [value] Listen to a unix socket. --live-reload Enables reload/refresh the page(s) when file changes are detected (enabled by default). --no-live-reload Disables reload/refresh the page(s) when file changes are detected (enabled by default) + --magic-html Enables/Disables magic HTML routes (enabled by default). + --no-magic-html Negative 'magic-html' option. --open [value...] Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser). --no-open Does not open the default browser. --open-target Opens specified page in browser. diff --git a/scripts/updateDocs.js b/scripts/updateDocs.js index b8f7dce291a..77edac797fc 100644 --- a/scripts/updateDocs.js +++ b/scripts/updateDocs.js @@ -39,7 +39,7 @@ try { // create SERVE.md writeFileSync(`SERVE-OPTIONS-v${majorDevServerVersion}.md`, serveContent); - console.log('Successfully updated "OPTIONS.md" and "SERVE-OPTIONS.md"'); + console.log(`Successfully updated "OPTIONS.md" and "SERVE-OPTIONS-v${majorDevServerVersion}.md"`); } catch (err) { console.error(err); } From 6fc4f79ef6af3837ba77498e0889027ccc66731f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Sep 2021 12:44:21 +0300 Subject: [PATCH 125/173] chore(deps): bump tar from 4.4.15 to 4.4.19 (#2926) Bumps [tar](https://github.com/npm/node-tar) from 4.4.15 to 4.4.19. - [Release notes](https://github.com/npm/node-tar/releases) - [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/node-tar/compare/v4.4.15...v4.4.19) --- updated-dependencies: - dependency-name: tar dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 68 ++++++++++++++----------------------------------------- 1 file changed, 17 insertions(+), 51 deletions(-) diff --git a/yarn.lock b/yarn.lock index 782d5d80759..5f3a1282714 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2085,14 +2085,6 @@ "@typescript-eslint/typescript-estree" "4.30.0" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.29.3": - version "4.29.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.3.tgz#497dec66f3a22e459f6e306cf14021e40ec86e19" - integrity sha512-x+w8BLXO7iWPkG5mEy9bA1iFRnk36p/goVlYobVWHyDw69YmaH9q6eA+Fgl7kYHmFvWlebUTUfhtIg4zbbl8PA== - dependencies: - "@typescript-eslint/types" "4.29.3" - "@typescript-eslint/visitor-keys" "4.29.3" - "@typescript-eslint/scope-manager@4.30.0": version "4.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz#1a3ffbb385b1a06be85cd5165a22324f069a85ee" @@ -2101,29 +2093,11 @@ "@typescript-eslint/types" "4.30.0" "@typescript-eslint/visitor-keys" "4.30.0" -"@typescript-eslint/types@4.29.3": - version "4.29.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.3.tgz#d7980c49aef643d0af8954c9f14f656b7fd16017" - integrity sha512-s1eV1lKNgoIYLAl1JUba8NhULmf+jOmmeFO1G5MN/RBCyyzg4TIOfIOICVNC06lor+Xmy4FypIIhFiJXOknhIg== - "@typescript-eslint/types@4.30.0": version "4.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.30.0.tgz#fb9d9b0358426f18687fba82eb0b0f869780204f" integrity sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw== -"@typescript-eslint/typescript-estree@4.29.3": - version "4.29.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.3.tgz#1bafad610015c4ded35c85a70b6222faad598b40" - integrity sha512-45oQJA0bxna4O5TMwz55/TpgjX1YrAPOI/rb6kPgmdnemRZx/dB0rsx+Ku8jpDvqTxcE1C/qEbVHbS3h0hflag== - dependencies: - "@typescript-eslint/types" "4.29.3" - "@typescript-eslint/visitor-keys" "4.29.3" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.30.0": version "4.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz#ae57833da72a753f4846cd3053758c771670c2ac" @@ -2137,14 +2111,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.29.3": - version "4.29.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.3.tgz#c691760a00bd86bf8320d2a90a93d86d322f1abf" - integrity sha512-MGGfJvXT4asUTeVs0Q2m+sY63UsfnA+C/FDgBKV3itLBmM9H0u+URcneePtkd0at1YELmZK6HSolCqM4Fzs6yA== - dependencies: - "@typescript-eslint/types" "4.29.3" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.30.0": version "4.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz#a47c6272fc71b0c627d1691f68eaecf4ad71445e" @@ -3167,7 +3133,7 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chownr@^1.1.1: +chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -4972,7 +4938,7 @@ fs-extra@^9.0.0, fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^1.2.5: +fs-minipass@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== @@ -7743,7 +7709,7 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: +minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== @@ -7758,7 +7724,7 @@ minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: dependencies: yallist "^4.0.0" -minizlib@^1.2.1: +minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== @@ -9485,7 +9451,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -10282,17 +10248,17 @@ tapable@^2.1.1, tapable@^2.2.0: integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== tar@^4.4.12: - version "4.4.15" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.15.tgz#3caced4f39ebd46ddda4d6203d48493a919697f8" - integrity sha512-ItbufpujXkry7bHH9NpQyTXPbJ72iTlXgkBAYsAjDXk3Ds8t/3NfO5P4xZGy7u+sYuQUbimgzswX4uQIEeNVOA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" tar@^6.0.2, tar@^6.1.0: version "6.1.0" @@ -11291,7 +11257,7 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.0, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== From e0e0a5fb9eed1e73d50f6d464e8d41acb88004c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Sep 2021 13:53:39 +0300 Subject: [PATCH 126/173] chore(deps-dev): bump webpack from 5.51.1 to 5.51.2 (#2928) Bumps [webpack](https://github.com/webpack/webpack) from 5.51.1 to 5.51.2. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.51.1...v5.51.2) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5f3a1282714..f80154cbe79 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11003,9 +11003,9 @@ webpack-sources@^3.2.0: integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== webpack@^5.45.1: - version "5.51.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.51.1.tgz#41bebf38dccab9a89487b16dbe95c22e147aac57" - integrity sha512-xsn3lwqEKoFvqn4JQggPSRxE4dhsRcysWTqYABAZlmavcoTmwlOb9b1N36Inbt/eIispSkuHa80/FJkDTPos1A== + version "5.51.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.51.2.tgz#f765d258b0bf6abda3c5f21bf855a25720e9796f" + integrity sha512-odydxP4WA3XYYzwSQUivPxywdzMlY42bbfxMwCaEtHb+i/N9uzKSHcLgWkXo/Gsa+4Zlzf3Jg0hEHn1FnZpk2Q== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" From 6ed3df8a8e2c5d2ec4d716cc05f7f886aba295ae Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Sat, 4 Sep 2021 18:19:16 +0530 Subject: [PATCH 127/173] docs: add `WEBPACK_DEV_SERVER_PACKAGE` variable (#2929) --- packages/webpack-cli/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/webpack-cli/README.md b/packages/webpack-cli/README.md index 8ec8b13e69d..063b299d5cc 100644 --- a/packages/webpack-cli/README.md +++ b/packages/webpack-cli/README.md @@ -131,6 +131,7 @@ Checkout [`OPTIONS.md`](https://github.com/webpack/webpack-cli/blob/master/OPTIO | `WEBPACK_CLI_SKIP_IMPORT_LOCAL` | when `true` it will skip using the local instance of `webpack-cli`. | | `WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG` | when `true` it will force load the ESM config. | | `WEBPACK_PACKAGE` | Use a custom webpack version in CLI. | +| `WEBPACK_DEV_SERVER_PACKAGE` | Use a custom webpack-dev-server version in CLI. | | `WEBPACK_CLI_HELP_WIDTH` | Use custom width for help output. | ## Configuration Environment Variables From 89bf3c5448704834a0b57074665f2da25a018dce Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Sun, 5 Sep 2021 16:01:12 +0530 Subject: [PATCH 128/173] chore: update node image to 14 (#2931) --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 2af70d687af..351372c525e 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM node:12 +FROM node:14 # Add global instances of prettier and eslint for vscode RUN npm install -g eslint prettier \ No newline at end of file From ee8387e3c432dc31e4b1e19cf3b7af1694293f34 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Sep 2021 14:24:00 +0300 Subject: [PATCH 129/173] chore(deps-dev): bump webpack from 5.51.2 to 5.52.0 (#2933) Bumps [webpack](https://github.com/webpack/webpack) from 5.51.2 to 5.52.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.51.2...v5.52.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index f80154cbe79..4b3db37ccff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11003,9 +11003,9 @@ webpack-sources@^3.2.0: integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== webpack@^5.45.1: - version "5.51.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.51.2.tgz#f765d258b0bf6abda3c5f21bf855a25720e9796f" - integrity sha512-odydxP4WA3XYYzwSQUivPxywdzMlY42bbfxMwCaEtHb+i/N9uzKSHcLgWkXo/Gsa+4Zlzf3Jg0hEHn1FnZpk2Q== + version "5.52.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.52.0.tgz#88d997c2c3ebb62abcaa453d2a26e0fd917c71a3" + integrity sha512-yRZOat8jWGwBwHpco3uKQhVU7HYaNunZiJ4AkAVQkPCUGoZk/tiIXiwG+8HIy/F+qsiZvSOa+GLQOj3q5RKRYg== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" From 1d6d26ec0c97b346b27e13e8b97232252a346501 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Tue, 7 Sep 2021 11:39:39 +0530 Subject: [PATCH 130/173] docs: add links for commands (#2910) * docs: add links for commands * docs: update * docs: update --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 656b52adde0..fb375ac3b0e 100644 --- a/README.md +++ b/README.md @@ -56,17 +56,17 @@ We organize webpack CLI as a multi-package repository using [lerna](https://gith Supporting developers is an important task for webpack CLI. Thus, webpack CLI provides different commands for many common tasks. -- `build|bundle|b [entries...] [options]` - Run webpack (default command, can be omitted). -- [`configtest|t [config-path]`](./packages/configtest/README.md#webpack-cli-configtest) - Validate a webpack configuration. -- `help|h [command] [option]` - Display help for commands and options. -- [`init|create|new|c|n [generation-path] [options]`](./packages/generators/INIT.md#webpack-cli-init) - Create a new webpack project. -- [`info|i [options]`](./packages/info/README.md#webpack-cli-info) - Returns information related to the local environment. +- [`build|bundle|b [entries...] [options]`](https://webpack.js.org/api/cli/#build) - Run webpack (default command, can be omitted). +- [`configtest|t [config-path]`](https://webpack.js.org/api/cli/#configtest) - Validate a webpack configuration. +- [`help|h [command] [option]`](https://webpack.js.org/api/cli/#help) - Display help for commands and options. +- [`init|create|new|c|n [generation-path] [options]`](https://webpack.js.org/api/cli/#init) - Create a new webpack project. +- [`info|i [options]`](https://webpack.js.org/api/cli/#info) - Returns information related to the local environment. - [`migrate|m [new-config-path]`](https://www.npmjs.com/package/@webpack-cli/migrate) - Migrate project from one version to another. -- [`plugin|p [output-path] [options]`](./packages/generators#generators) - Initiate new plugin project. -- [`loader|l [output-path] [options]`](./packages/generators#generators) - Initiate new loader project. -- [`serve|server|s [entries...] [options]`](./packages/serve/README.md#webpack-cli-serve) - Use webpack with a development server that provides live reloading. -- `version|v [commands...]` - Output the version number of `webpack`, `webpack-cli`, `webpack-dev-server`, and commands -- `watch|w [entries...] [options]` - Run webpack and watch for files changes. +- [`plugin|p [output-path] [options]`](https://webpack.js.org/api/cli/#plugin) - Initiate new plugin project. +- [`loader|l [output-path] [options]`](https://webpack.js.org/api/cli/#loader) - Initiate new loader project. +- [`serve|server|s [entries...] [options]`](https://webpack.js.org/api/cli/#serve) - Use webpack with a development server that provides live reloading. +- [`version|v [commands...]`](https://webpack.js.org/api/cli/#version) - Output the version number of `webpack`, `webpack-cli`, `webpack-dev-server`, and commands. +- [`watch|w [entries...] [options]`](https://webpack.js.org/api/cli/#watch) - Run webpack and watch for files changes. ### Utilities From df939ec12e0dd8bf3e89a2ceeff33d1c71196e31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Sep 2021 14:40:55 +0300 Subject: [PATCH 131/173] chore(deps-dev): bump @typescript-eslint/parser --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4b3db37ccff..ed118e86003 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2076,13 +2076,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.30.0.tgz#6abd720f66bd790f3e0e80c3be77180c8fcb192d" - integrity sha512-HJ0XuluSZSxeboLU7Q2VQ6eLlCwXPBOGnA7CqgBnz2Db3JRQYyBDJgQnop6TZ+rsbSx5gEdWhw4rE4mDa1FnZg== + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.0.tgz#87b7cd16b24b9170c77595d8b1363f8047121e05" + integrity sha512-oWbzvPh5amMuTmKaf1wp0ySxPt2ZXHnFQBN2Szu1O//7LmOvgaKTCIDNLK2NvzpmVd5A2M/1j/rujBqO37hj3w== dependencies: - "@typescript-eslint/scope-manager" "4.30.0" - "@typescript-eslint/types" "4.30.0" - "@typescript-eslint/typescript-estree" "4.30.0" + "@typescript-eslint/scope-manager" "4.31.0" + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/typescript-estree" "4.31.0" debug "^4.3.1" "@typescript-eslint/scope-manager@4.30.0": @@ -2093,11 +2093,24 @@ "@typescript-eslint/types" "4.30.0" "@typescript-eslint/visitor-keys" "4.30.0" +"@typescript-eslint/scope-manager@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.0.tgz#9be33aed4e9901db753803ba233b70d79a87fc3e" + integrity sha512-LJ+xtl34W76JMRLjbaQorhR0hfRAlp3Lscdiz9NeI/8i+q0hdBZ7BsiYieLoYWqy+AnRigaD3hUwPFugSzdocg== + dependencies: + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/visitor-keys" "4.31.0" + "@typescript-eslint/types@4.30.0": version "4.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.30.0.tgz#fb9d9b0358426f18687fba82eb0b0f869780204f" integrity sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw== +"@typescript-eslint/types@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.0.tgz#9a7c86fcc1620189567dc4e46cad7efa07ee8dce" + integrity sha512-9XR5q9mk7DCXgXLS7REIVs+BaAswfdHhx91XqlJklmqWpTALGjygWVIb/UnLh4NWhfwhR5wNe1yTyCInxVhLqQ== + "@typescript-eslint/typescript-estree@4.30.0": version "4.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz#ae57833da72a753f4846cd3053758c771670c2ac" @@ -2111,6 +2124,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.0.tgz#4da4cb6274a7ef3b21d53f9e7147cc76f278a078" + integrity sha512-QHl2014t3ptg+xpmOSSPn5hm4mY8D4s97ftzyk9BZ8RxYQ3j73XcwuijnJ9cMa6DO4aLXeo8XS3z1omT9LA/Eg== + dependencies: + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/visitor-keys" "4.31.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.30.0": version "4.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz#a47c6272fc71b0c627d1691f68eaecf4ad71445e" @@ -2119,6 +2145,14 @@ "@typescript-eslint/types" "4.30.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.0.tgz#4e87b7761cb4e0e627dc2047021aa693fc76ea2b" + integrity sha512-HUcRp2a9I+P21+O21yu3ezv3GEPGjyGiXoEUQwZXjR8UxRApGeLyWH4ZIIUSalE28aG4YsV6GjtaAVB3QKOu0w== + dependencies: + "@typescript-eslint/types" "4.31.0" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From febeb84cd22461a86b273fc5b4282ccfc41e107f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Sep 2021 14:41:08 +0300 Subject: [PATCH 132/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin --- yarn.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index ed118e86003..0b91f6d4f7c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2051,27 +2051,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.30.0.tgz#4a0c1ae96b953f4e67435e20248d812bfa55e4fb" - integrity sha512-NgAnqk55RQ/SD+tZFD9aPwNSeHmDHHe5rtUyhIq0ZeCWZEvo4DK9rYz7v9HDuQZFvn320Ot+AikaCKMFKLlD0g== + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.0.tgz#9c3fa6f44bad789a962426ad951b54695bd3af6b" + integrity sha512-iPKZTZNavAlOhfF4gymiSuUkgLne/nh5Oz2/mdiUmuZVD42m9PapnCnzjxuDsnpnbH3wT5s2D8bw6S39TC6GNw== dependencies: - "@typescript-eslint/experimental-utils" "4.30.0" - "@typescript-eslint/scope-manager" "4.30.0" + "@typescript-eslint/experimental-utils" "4.31.0" + "@typescript-eslint/scope-manager" "4.31.0" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.30.0": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.30.0.tgz#9e49704fef568432ae16fc0d6685c13d67db0fd5" - integrity sha512-K8RNIX9GnBsv5v4TjtwkKtqMSzYpjqAQg/oSphtxf3xxdt6T0owqnpojztjjTcatSteH3hLj3t/kklKx87NPqw== +"@typescript-eslint/experimental-utils@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.0.tgz#0ef1d5d86c334f983a00f310e43c1ce4c14e054d" + integrity sha512-Hld+EQiKLMppgKKkdUsLeVIeEOrwKc2G983NmznY/r5/ZtZCDvIOXnXtwqJIgYz/ymsy7n7RGvMyrzf1WaSQrw== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.30.0" - "@typescript-eslint/types" "4.30.0" - "@typescript-eslint/typescript-estree" "4.30.0" + "@typescript-eslint/scope-manager" "4.31.0" + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/typescript-estree" "4.31.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" From 9b9040e97c1d7a68d0757c05a67fb0fc8184b827 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Tue, 7 Sep 2021 17:14:09 +0530 Subject: [PATCH 133/173] fix: handle `undefined` and empty configuration export (#2930) --- packages/webpack-cli/lib/webpack-cli.js | 6 +++--- test/build/config/no-code/no-code.test.js | 16 ++++++++++++++++ test/build/config/no-code/src/index.js | 1 + test/build/config/no-code/webpack.config.js | 0 test/build/config/undefined-default/src/index.js | 1 + .../undefined-default/undefined-default.test.js | 16 ++++++++++++++++ .../config/undefined-default/webpack.config.js | 1 + test/build/config/undefined/src/index.js | 1 + test/build/config/undefined/undefined.test.js | 16 ++++++++++++++++ test/build/config/undefined/webpack.config.js | 1 + 10 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 test/build/config/no-code/no-code.test.js create mode 100644 test/build/config/no-code/src/index.js create mode 100644 test/build/config/no-code/webpack.config.js create mode 100644 test/build/config/undefined-default/src/index.js create mode 100644 test/build/config/undefined-default/undefined-default.test.js create mode 100644 test/build/config/undefined-default/webpack.config.js create mode 100644 test/build/config/undefined/src/index.js create mode 100644 test/build/config/undefined/undefined.test.js create mode 100644 test/build/config/undefined/webpack.config.js diff --git a/packages/webpack-cli/lib/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index c3d9052e7fa..0548c9a2550 100644 --- a/packages/webpack-cli/lib/webpack-cli.js +++ b/packages/webpack-cli/lib/webpack-cli.js @@ -67,11 +67,11 @@ class WebpackCLI { } // For babel/typescript - if (result.default) { - result = result.default; + if (result && typeof result === "object" && "default" in result) { + result = result.default || {}; } - return result; + return result || {}; } loadJSONFile(pathToFile, handleError = true) { diff --git a/test/build/config/no-code/no-code.test.js b/test/build/config/no-code/no-code.test.js new file mode 100644 index 00000000000..e9515123b1c --- /dev/null +++ b/test/build/config/no-code/no-code.test.js @@ -0,0 +1,16 @@ +"use strict"; +const { resolve } = require("path"); +const { run } = require("../../../utils/test-utils"); + +describe("config flag with no code", () => { + it("should not throw error with no configuration or index file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); +}); diff --git a/test/build/config/no-code/src/index.js b/test/build/config/no-code/src/index.js new file mode 100644 index 00000000000..164e3e9c24f --- /dev/null +++ b/test/build/config/no-code/src/index.js @@ -0,0 +1 @@ +console.log("Peeves"); diff --git a/test/build/config/no-code/webpack.config.js b/test/build/config/no-code/webpack.config.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/build/config/undefined-default/src/index.js b/test/build/config/undefined-default/src/index.js new file mode 100644 index 00000000000..d4caacb0cbb --- /dev/null +++ b/test/build/config/undefined-default/src/index.js @@ -0,0 +1 @@ +console.log("Tom Riddle"); diff --git a/test/build/config/undefined-default/undefined-default.test.js b/test/build/config/undefined-default/undefined-default.test.js new file mode 100644 index 00000000000..eabeb06be42 --- /dev/null +++ b/test/build/config/undefined-default/undefined-default.test.js @@ -0,0 +1,16 @@ +"use strict"; +const { resolve } = require("path"); +const { run } = require("../../../utils/test-utils"); + +describe("config flag with undefined default export config file", () => { + it("should not throw error with no configuration or index file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); +}); diff --git a/test/build/config/undefined-default/webpack.config.js b/test/build/config/undefined-default/webpack.config.js new file mode 100644 index 00000000000..253def99924 --- /dev/null +++ b/test/build/config/undefined-default/webpack.config.js @@ -0,0 +1 @@ +module.exports.default = undefined; diff --git a/test/build/config/undefined/src/index.js b/test/build/config/undefined/src/index.js new file mode 100644 index 00000000000..eb334e35b09 --- /dev/null +++ b/test/build/config/undefined/src/index.js @@ -0,0 +1 @@ +console.log("Percy Weasley"); diff --git a/test/build/config/undefined/undefined.test.js b/test/build/config/undefined/undefined.test.js new file mode 100644 index 00000000000..2845fecb20c --- /dev/null +++ b/test/build/config/undefined/undefined.test.js @@ -0,0 +1,16 @@ +"use strict"; +const { resolve } = require("path"); +const { run } = require("../../../utils/test-utils"); + +describe("config flag with undefined export config file", () => { + it("should not throw error with no configuration or index file", async () => { + const { exitCode, stderr, stdout } = await run(__dirname, [ + "-c", + resolve(__dirname, "webpack.config.js"), + ]); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + }); +}); diff --git a/test/build/config/undefined/webpack.config.js b/test/build/config/undefined/webpack.config.js new file mode 100644 index 00000000000..d0f5f3a7fc4 --- /dev/null +++ b/test/build/config/undefined/webpack.config.js @@ -0,0 +1 @@ +module.exports = undefined; From a4a81745dd24496916570701e318b9e3b3e687f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Sep 2021 13:41:26 +0300 Subject: [PATCH 134/173] chore(deps): bump colorette from 1.3.0 to 1.4.0 (#2938) Bumps [colorette](https://github.com/jorgebucaran/colorette) from 1.3.0 to 1.4.0. - [Release notes](https://github.com/jorgebucaran/colorette/releases) - [Commits](https://github.com/jorgebucaran/colorette/compare/1.3.0...1.4.0) --- updated-dependencies: - dependency-name: colorette dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 40 +++------------------------------------- 1 file changed, 3 insertions(+), 37 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0b91f6d4f7c..81e262187f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2085,14 +2085,6 @@ "@typescript-eslint/typescript-estree" "4.31.0" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.30.0": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz#1a3ffbb385b1a06be85cd5165a22324f069a85ee" - integrity sha512-VJ/jAXovxNh7rIXCQbYhkyV2Y3Ac/0cVHP/FruTJSAUUm4Oacmn/nkN5zfWmWFEanN4ggP0vJSHOeajtHq3f8A== - dependencies: - "@typescript-eslint/types" "4.30.0" - "@typescript-eslint/visitor-keys" "4.30.0" - "@typescript-eslint/scope-manager@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.0.tgz#9be33aed4e9901db753803ba233b70d79a87fc3e" @@ -2101,29 +2093,11 @@ "@typescript-eslint/types" "4.31.0" "@typescript-eslint/visitor-keys" "4.31.0" -"@typescript-eslint/types@4.30.0": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.30.0.tgz#fb9d9b0358426f18687fba82eb0b0f869780204f" - integrity sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw== - "@typescript-eslint/types@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.0.tgz#9a7c86fcc1620189567dc4e46cad7efa07ee8dce" integrity sha512-9XR5q9mk7DCXgXLS7REIVs+BaAswfdHhx91XqlJklmqWpTALGjygWVIb/UnLh4NWhfwhR5wNe1yTyCInxVhLqQ== -"@typescript-eslint/typescript-estree@4.30.0": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz#ae57833da72a753f4846cd3053758c771670c2ac" - integrity sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg== - dependencies: - "@typescript-eslint/types" "4.30.0" - "@typescript-eslint/visitor-keys" "4.30.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.0.tgz#4da4cb6274a7ef3b21d53f9e7147cc76f278a078" @@ -2137,14 +2111,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.30.0": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz#a47c6272fc71b0c627d1691f68eaecf4ad71445e" - integrity sha512-pNaaxDt/Ol/+JZwzP7MqWc8PJQTUhZwoee/PVlQ+iYoYhagccvoHnC9e4l+C/krQYYkENxznhVSDwClIbZVxRw== - dependencies: - "@typescript-eslint/types" "4.30.0" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.0.tgz#4e87b7761cb4e0e627dc2047021aa693fc76ea2b" @@ -3391,9 +3357,9 @@ color-name@~1.1.4: integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colorette@^1.2.1, colorette@^1.2.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" - integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== colors@1.0.3: version "1.0.3" From 5caa341d4f9f26cc7451548a0326785a4eb46f08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Sep 2021 12:35:43 +0530 Subject: [PATCH 135/173] chore(deps-dev): bump jest from 27.1.0 to 27.1.1 (#2940) --- yarn.lock | 630 +++++++++++++++++++++++++++--------------------------- 1 file changed, 315 insertions(+), 315 deletions(-) diff --git a/yarn.lock b/yarn.lock index 81e262187f1..ef03227e072 100644 --- a/yarn.lock +++ b/yarn.lock @@ -649,94 +649,94 @@ jest-util "^27.0.1" slash "^3.0.0" -"@jest/console@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.1.0.tgz#de13b603cb1d389b50c0dc6296e86e112381e43c" - integrity sha512-+Vl+xmLwAXLNlqT61gmHEixeRbS4L8MUzAjtpBCOPWH+izNI/dR16IeXjkXJdRtIVWVSf9DO1gdp67B1XorZhQ== +"@jest/console@^27.1.1": + version "27.1.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.1.1.tgz#e1eb8ef8a410e75e80bb17429047ed5d43411d20" + integrity sha512-VpQJRsWSeAem0zpBjeRtDbcD6DlbNoK11dNYt+PSQ+DDORh9q2/xyEpErfwgnLjWX0EKkSZmTGx/iH9Inzs6vQ== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.1.0" - jest-util "^27.1.0" + jest-message-util "^27.1.1" + jest-util "^27.1.1" slash "^3.0.0" -"@jest/core@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.1.0.tgz#622220f18032f5869e579cecbe744527238648bf" - integrity sha512-3l9qmoknrlCFKfGdrmiQiPne+pUR4ALhKwFTYyOeKw6egfDwJkO21RJ1xf41rN8ZNFLg5W+w6+P4fUqq4EMRWA== +"@jest/core@^27.1.1": + version "27.1.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.1.1.tgz#d9d42214920cb96c2a6cc48517cf62d4351da3aa" + integrity sha512-oCkKeTgI0emznKcLoq5OCD0PhxCijA4l7ejDnWW3d5bgSi+zfVaLybVqa+EQOxpNejQWtTna7tmsAXjMN9N43Q== dependencies: - "@jest/console" "^27.1.0" - "@jest/reporters" "^27.1.0" - "@jest/test-result" "^27.1.0" - "@jest/transform" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/console" "^27.1.1" + "@jest/reporters" "^27.1.1" + "@jest/test-result" "^27.1.1" + "@jest/transform" "^27.1.1" + "@jest/types" "^27.1.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^27.1.0" - jest-config "^27.1.0" - jest-haste-map "^27.1.0" - jest-message-util "^27.1.0" + jest-changed-files "^27.1.1" + jest-config "^27.1.1" + jest-haste-map "^27.1.1" + jest-message-util "^27.1.1" jest-regex-util "^27.0.6" - jest-resolve "^27.1.0" - jest-resolve-dependencies "^27.1.0" - jest-runner "^27.1.0" - jest-runtime "^27.1.0" - jest-snapshot "^27.1.0" - jest-util "^27.1.0" - jest-validate "^27.1.0" - jest-watcher "^27.1.0" + jest-resolve "^27.1.1" + jest-resolve-dependencies "^27.1.1" + jest-runner "^27.1.1" + jest-runtime "^27.1.1" + jest-snapshot "^27.1.1" + jest-util "^27.1.1" + jest-validate "^27.1.1" + jest-watcher "^27.1.1" micromatch "^4.0.4" p-each-series "^2.1.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.1.0.tgz#c7224a67004759ec203d8fa44e8bc0db93f66c44" - integrity sha512-wRp50aAMY2w1U2jP1G32d6FUVBNYqmk8WaGkiIEisU48qyDV0WPtw3IBLnl7orBeggveommAkuijY+RzVnNDOQ== +"@jest/environment@^27.1.1": + version "27.1.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.1.1.tgz#a1f7a552f7008f773988b9c0e445ede35f77bbb7" + integrity sha512-+y882/ZdxhyqF5RzxIrNIANjHj991WH7jifdcplzMDosDUOyCACFYUyVTBGbSTocbU+s1cesroRzkwi8hZ9SHg== dependencies: - "@jest/fake-timers" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/fake-timers" "^27.1.1" + "@jest/types" "^27.1.1" "@types/node" "*" - jest-mock "^27.1.0" + jest-mock "^27.1.1" -"@jest/fake-timers@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.1.0.tgz#c0b343d8a16af17eab2cb6862e319947c0ea2abe" - integrity sha512-22Zyn8il8DzpS+30jJNVbTlm7vAtnfy1aYvNeOEHloMlGy1PCYLHa4PWlSws0hvNsMM5bON6GISjkLoQUV3oMA== +"@jest/fake-timers@^27.1.1": + version "27.1.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.1.1.tgz#557a1c0d067d33bcda4dfae9a7d8f96a15a954b5" + integrity sha512-u8TJ5VlsVYTsGFatoyIae2l25pku4Bu15QCPTx2Gs5z+R//Ee3tHN85462Vc9yGVcdDvgADbqNkhOLxbEwPjMQ== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" "@sinonjs/fake-timers" "^7.0.2" "@types/node" "*" - jest-message-util "^27.1.0" - jest-mock "^27.1.0" - jest-util "^27.1.0" + jest-message-util "^27.1.1" + jest-mock "^27.1.1" + jest-util "^27.1.1" -"@jest/globals@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.1.0.tgz#e093a49c718dd678a782c197757775534c88d3f2" - integrity sha512-73vLV4aNHAlAgjk0/QcSIzzCZSqVIPbmFROJJv9D3QUR7BI4f517gVdJpSrCHxuRH3VZFhe0yGG/tmttlMll9g== +"@jest/globals@^27.1.1": + version "27.1.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.1.1.tgz#cfe5f4d5b37483cef62b79612128ccc7e3c951d8" + integrity sha512-Q3JcTPmY+DAEHnr4MpnBV3mwy50EGrTC6oSDTNnW7FNGGacTJAfpWNk02D7xv422T1OzK2A2BKx+26xJOvHkyw== dependencies: - "@jest/environment" "^27.1.0" - "@jest/types" "^27.1.0" - expect "^27.1.0" + "@jest/environment" "^27.1.1" + "@jest/types" "^27.1.1" + expect "^27.1.1" -"@jest/reporters@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.1.0.tgz#02ed1e6601552c2f6447378533f77aad002781d4" - integrity sha512-5T/zlPkN2HnK3Sboeg64L5eC8iiaZueLpttdktWTJsvALEtP2YMkC5BQxwjRWQACG9SwDmz+XjjkoxXUDMDgdw== +"@jest/reporters@^27.1.1": + version "27.1.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.1.1.tgz#ee5724092f197bb78c60affb9c6f34b6777990c2" + integrity sha512-cEERs62n1P4Pqox9HWyNOEkP57G95aK2mBjB6D8Ruz1Yc98fKH53b58rlVEnsY5nLmkLNZk65fxNi9C0Yds/8w== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.1.0" - "@jest/test-result" "^27.1.0" - "@jest/transform" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/console" "^27.1.1" + "@jest/test-result" "^27.1.1" + "@jest/transform" "^27.1.1" + "@jest/types" "^27.1.1" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" @@ -747,10 +747,10 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^27.1.0" - jest-resolve "^27.1.0" - jest-util "^27.1.0" - jest-worker "^27.1.0" + jest-haste-map "^27.1.1" + jest-resolve "^27.1.1" + jest-util "^27.1.1" + jest-worker "^27.1.1" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" @@ -776,41 +776,41 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-result@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.1.0.tgz#9345ae5f97f6a5287af9ebd54716cd84331d42e8" - integrity sha512-Aoz00gpDL528ODLghat3QSy6UBTD5EmmpjrhZZMK/v1Q2/rRRqTGnFxHuEkrD4z/Py96ZdOHxIWkkCKRpmnE1A== +"@jest/test-result@^27.1.1": + version "27.1.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.1.1.tgz#1086b39af5040b932a55e7f1fa1bc4671bed4781" + integrity sha512-8vy75A0Jtfz9DqXFUkjC5Co/wRla+D7qRFdShUY8SbPqBS3GBx3tpba7sGKFos8mQrdbe39n+c1zgVKtarfy6A== dependencies: - "@jest/console" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/console" "^27.1.1" + "@jest/types" "^27.1.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.1.0.tgz#04e8b3bd735570d3d48865e74977a14dc99bff2d" - integrity sha512-lnCWawDr6Z1DAAK9l25o3AjmKGgcutq1iIbp+hC10s/HxnB8ZkUsYq1FzjOoxxZ5hW+1+AthBtvS4x9yno3V1A== +"@jest/test-sequencer@^27.1.1": + version "27.1.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.1.1.tgz#cea3722ec6f6330000240fd999ad3123adaf5992" + integrity sha512-l8zD3EdeixvwmLNlJoMX3hhj8iIze95okj4sqmBzOq/zW8gZLElUveH4bpKEMuR+Nweazjlwc7L6g4C26M/y6Q== dependencies: - "@jest/test-result" "^27.1.0" + "@jest/test-result" "^27.1.1" graceful-fs "^4.2.4" - jest-haste-map "^27.1.0" - jest-runtime "^27.1.0" + jest-haste-map "^27.1.1" + jest-runtime "^27.1.1" -"@jest/transform@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.1.0.tgz#962e385517e3d1f62827fa39c305edcc3ca8544b" - integrity sha512-ZRGCA2ZEVJ00ubrhkTG87kyLbN6n55g1Ilq0X9nJb5bX3MhMp3O6M7KG+LvYu+nZRqG5cXsQnJEdZbdpTAV8pQ== +"@jest/transform@^27.1.1": + version "27.1.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.1.1.tgz#51a22f5a48d55d796c02757117c02fcfe4da13d7" + integrity sha512-qM19Eu75U6Jc5zosXXVnq900Nl9JDpoGaZ4Mg6wZs7oqbu3heYSMOZS19DlwjlhWdfNRjF4UeAgkrCJCK3fEXg== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" babel-plugin-istanbul "^6.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 "^27.1.0" + jest-haste-map "^27.1.1" jest-regex-util "^27.0.6" - jest-util "^27.1.0" + jest-util "^27.1.1" micromatch "^4.0.4" pirates "^4.0.1" slash "^3.0.0" @@ -850,10 +850,10 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.1.0.tgz#674a40325eab23c857ebc0689e7e191a3c5b10cc" - integrity sha512-pRP5cLIzN7I7Vp6mHKRSaZD7YpBTK7hawx5si8trMKqk4+WOdK8NEKOTO2G8PKWD1HbKMVckVB6/XHh/olhf2g== +"@jest/types@^27.1.1": + version "27.1.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.1.1.tgz#77a3fc014f906c65752d12123a0134359707c0ad" + integrity sha512-yqJPDDseb0mXgKqmNqypCsb85C22K1aY5+LUxh7syIM9n/b0AsaltxNy+o6tt29VcfGDpYEve175bm3uOhcehA== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" @@ -2701,13 +2701,13 @@ 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@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.1.0.tgz#e96ca04554fd32274439869e2b6d24de9d91bc4e" - integrity sha512-6NrdqzaYemALGCuR97QkC/FkFIEBWP5pw5TMJoUHZTVXyOgocujp6A0JE2V6gE0HtqAAv6VKU/nI+OCR1Z4gHA== +babel-jest@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.1.1.tgz#9359c45995d0940b84d2176ab83423f9eed07617" + integrity sha512-JA+dzJl4n2RBvWQEnph6HJaTHrsIPiXGQYatt/D8nR4UpX9UG4GaDzykVVPQBbrdTebZREkRb6SOxyIXJRab6Q== dependencies: - "@jest/transform" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/transform" "^27.1.1" + "@jest/types" "^27.1.1" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.0.0" babel-preset-jest "^27.0.6" @@ -4525,16 +4525,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.1.0.tgz#380de0abb3a8f2299c4c6c66bbe930483b5dba9b" - integrity sha512-9kJngV5hOJgkFil4F/uXm3hVBubUK2nERVfvqNNwxxuW8ZOUwSTTSysgfzckYtv/LBzj/LJXbiAF7okHCXgdug== +expect@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.1.1.tgz#020215da67d41cd6ad805fa00bd030985ca7c093" + integrity sha512-JQAzp0CJoFFHF1RnOtrMUNMdsfx/Tl0+FhRzVl8q0fa23N+JyWdPXwb3T5rkHCvyo9uttnK7lVdKCBl1b/9EDw== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" ansi-styles "^5.0.0" jest-get-type "^27.0.6" - jest-matcher-utils "^27.1.0" - jest-message-util "^27.1.0" + jest-matcher-utils "^27.1.1" + jest-message-util "^27.1.1" jest-regex-util "^27.0.6" express@^4.17.1: @@ -6330,84 +6330,84 @@ jake@^10.6.1: filelist "^1.0.1" minimatch "^3.0.4" -jest-changed-files@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.1.0.tgz#42da6ea00f06274172745729d55f42b60a9dffe0" - integrity sha512-eRcb13TfQw0xiV2E98EmiEgs9a5uaBIqJChyl0G7jR9fCIvGjXovnDS6Zbku3joij4tXYcSK4SE1AXqOlUxjWg== +jest-changed-files@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.1.1.tgz#9b3f67a34cc58e3e811e2e1e21529837653e4200" + integrity sha512-5TV9+fYlC2A6hu3qtoyGHprBwCAn0AuGA77bZdUgYvVlRMjHXo063VcWTEAyx6XAZ85DYHqp0+aHKbPlfRDRvA== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.1.0.tgz#24c280c90a625ea57da20ee231d25b1621979a57" - integrity sha512-6FWtHs3nZyZlMBhRf1wvAC5CirnflbGJAY1xssSAnERLiiXQRH+wY2ptBVtXjX4gz4AA2EwRV57b038LmifRbA== +jest-circus@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.1.1.tgz#08dd3ec5cbaadce68ce6388ebccbe051d1b34bc6" + integrity sha512-Xed1ApiMFu/yzqGMBToHr8sp2gkX/ARZf4nXoGrHJrXrTUdVIWiVYheayfcOaPdQvQEE/uyBLgW7I7YBLIrAXQ== dependencies: - "@jest/environment" "^27.1.0" - "@jest/test-result" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/environment" "^27.1.1" + "@jest/test-result" "^27.1.1" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" - expect "^27.1.0" + expect "^27.1.1" is-generator-fn "^2.0.0" - jest-each "^27.1.0" - jest-matcher-utils "^27.1.0" - jest-message-util "^27.1.0" - jest-runtime "^27.1.0" - jest-snapshot "^27.1.0" - jest-util "^27.1.0" - pretty-format "^27.1.0" + jest-each "^27.1.1" + jest-matcher-utils "^27.1.1" + jest-message-util "^27.1.1" + jest-runtime "^27.1.1" + jest-snapshot "^27.1.1" + jest-util "^27.1.1" + pretty-format "^27.1.1" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.1.0.tgz#118438e4d11cf6fb66cb2b2eb5778817eab3daeb" - integrity sha512-h6zPUOUu+6oLDrXz0yOWY2YXvBLk8gQinx4HbZ7SF4V3HzasQf+ncoIbKENUMwXyf54/6dBkYXvXJos+gOHYZw== +jest-cli@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.1.1.tgz#6491a0278231ffee61083ad468809328e96a8eb2" + integrity sha512-LCjfEYp9D3bcOeVUUpEol9Y1ijZYMWVqflSmtw/wX+6Fb7zP4IlO14/6s9v1pxsoM4Pn46+M2zABgKuQjyDpTw== dependencies: - "@jest/core" "^27.1.0" - "@jest/test-result" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/core" "^27.1.1" + "@jest/test-result" "^27.1.1" + "@jest/types" "^27.1.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" - jest-config "^27.1.0" - jest-util "^27.1.0" - jest-validate "^27.1.0" + jest-config "^27.1.1" + jest-util "^27.1.1" + jest-validate "^27.1.1" prompts "^2.0.1" yargs "^16.0.3" -jest-config@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.1.0.tgz#e6826e2baaa34c07c3839af86466870e339d9ada" - integrity sha512-GMo7f76vMYUA3b3xOdlcKeKQhKcBIgurjERO2hojo0eLkKPGcw7fyIoanH+m6KOP2bLad+fGnF8aWOJYxzNPeg== +jest-config@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.1.1.tgz#cde823ad27f7ec0b9440035eabc75d4ac1ea024c" + integrity sha512-2iSd5zoJV4MsWPcLCGwUVUY/j6pZXm4Qd3rnbCtrd9EHNTg458iHw8PZztPQXfxKBKJxLfBk7tbZqYF8MGtxJA== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^27.1.0" - "@jest/types" "^27.1.0" - babel-jest "^27.1.0" + "@jest/test-sequencer" "^27.1.1" + "@jest/types" "^27.1.1" + babel-jest "^27.1.1" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" is-ci "^3.0.0" - jest-circus "^27.1.0" - jest-environment-jsdom "^27.1.0" - jest-environment-node "^27.1.0" + jest-circus "^27.1.1" + jest-environment-jsdom "^27.1.1" + jest-environment-node "^27.1.1" jest-get-type "^27.0.6" - jest-jasmine2 "^27.1.0" + jest-jasmine2 "^27.1.1" jest-regex-util "^27.0.6" - jest-resolve "^27.1.0" - jest-runner "^27.1.0" - jest-util "^27.1.0" - jest-validate "^27.1.0" + jest-resolve "^27.1.1" + jest-runner "^27.1.1" + jest-util "^27.1.1" + jest-validate "^27.1.1" micromatch "^4.0.4" - pretty-format "^27.1.0" + pretty-format "^27.1.1" jest-diff@^26.0.0: version "26.6.2" @@ -6419,15 +6419,15 @@ jest-diff@^26.0.0: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-diff@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.1.0.tgz#c7033f25add95e2218f3c7f4c3d7b634ab6b3cd2" - integrity sha512-rjfopEYl58g/SZTsQFmspBODvMSytL16I+cirnScWTLkQVXYVZfxm78DFfdIIXc05RCYuGjxJqrdyG4PIFzcJg== +jest-diff@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.1.1.tgz#1d1629ca2e3933b10cb27dc260e28e3dba182684" + integrity sha512-m/6n5158rqEriTazqHtBpOa2B/gGgXJijX6nsEgZfbJ/3pxQcdpVXBe+FP39b1dxWHyLVVmuVXddmAwtqFO4Lg== dependencies: chalk "^4.0.0" diff-sequences "^27.0.6" jest-get-type "^27.0.6" - pretty-format "^27.1.0" + pretty-format "^27.1.1" jest-docblock@^27.0.6: version "27.0.6" @@ -6436,41 +6436,41 @@ jest-docblock@^27.0.6: dependencies: detect-newline "^3.0.0" -jest-each@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.1.0.tgz#36ac75f7aeecb3b8da2a8e617ccb30a446df408c" - integrity sha512-K/cNvQlmDqQMRHF8CaQ0XPzCfjP5HMJc2bIJglrIqI9fjwpNqITle63IWE+wq4p+3v+iBgh7Wq0IdGpLx5xjDg== +jest-each@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.1.1.tgz#caa1e7eed77144be346eb18712885b990389348a" + integrity sha512-r6hOsTLavUBb1xN0uDa89jdDeBmJ+K49fWpbyxeGRA2pLY46PlC4z551/cWNQzrj+IUa5/gSRsCIV/01HdNPug== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" chalk "^4.0.0" jest-get-type "^27.0.6" - jest-util "^27.1.0" - pretty-format "^27.1.0" + jest-util "^27.1.1" + pretty-format "^27.1.1" -jest-environment-jsdom@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.1.0.tgz#5fb3eb8a67e02e6cc623640388d5f90e33075f18" - integrity sha512-JbwOcOxh/HOtsj56ljeXQCUJr3ivnaIlM45F5NBezFLVYdT91N5UofB1ux2B1CATsQiudcHdgTaeuqGXJqjJYQ== +jest-environment-jsdom@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.1.1.tgz#e53e98a16e6a764b8ee8db3b29b3a8c27db06f66" + integrity sha512-6vOnoZ6IaExuw7FvnuJhA1qFYv1DDSnN0sQowzolNwxQp7bG1YhLxj2YU1sVXAYA3IR3MbH2mbnJUsLUWfyfzw== dependencies: - "@jest/environment" "^27.1.0" - "@jest/fake-timers" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/environment" "^27.1.1" + "@jest/fake-timers" "^27.1.1" + "@jest/types" "^27.1.1" "@types/node" "*" - jest-mock "^27.1.0" - jest-util "^27.1.0" + jest-mock "^27.1.1" + jest-util "^27.1.1" jsdom "^16.6.0" -jest-environment-node@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.1.0.tgz#feea6b765f1fd4582284d4f1007df2b0a8d15b7f" - integrity sha512-JIyJ8H3wVyM4YCXp7njbjs0dIT87yhGlrXCXhDKNIg1OjurXr6X38yocnnbXvvNyqVTqSI4M9l+YfPKueqL1lw== +jest-environment-node@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.1.1.tgz#97425d4762b2aeab15892ffba08c6cbed7653e75" + integrity sha512-OEGeZh0PwzngNIYWYgWrvTcLygopV8OJbC9HNb0j70VBKgEIsdZkYhwcFnaURX83OHACMqf1pa9Tv5Pw5jemrg== dependencies: - "@jest/environment" "^27.1.0" - "@jest/fake-timers" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/environment" "^27.1.1" + "@jest/fake-timers" "^27.1.1" + "@jest/types" "^27.1.1" "@types/node" "*" - jest-mock "^27.1.0" - jest-util "^27.1.0" + jest-mock "^27.1.1" + jest-util "^27.1.1" jest-get-type@^26.3.0: version "26.3.0" @@ -6482,12 +6482,12 @@ jest-get-type@^27.0.6: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== -jest-haste-map@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.1.0.tgz#a39f456823bd6a74e3c86ad25f6fa870428326bf" - integrity sha512-7mz6LopSe+eA6cTFMf10OfLLqRoIPvmMyz5/OnSXnHO7hB0aDP1iIeLWCXzAcYU5eIJVpHr12Bk9yyq2fTW9vg== +jest-haste-map@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.1.1.tgz#f7c646b0e417ec29b80b96cf785b57b581384adf" + integrity sha512-NGLYVAdh5C8Ezg5QBFzrNeYsfxptDBPlhvZNaicLiZX77F/rS27a9M6u9ripWAaaD54xnWdZNZpEkdjD5Eo5aQ== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" @@ -6495,54 +6495,54 @@ jest-haste-map@^27.1.0: graceful-fs "^4.2.4" jest-regex-util "^27.0.6" jest-serializer "^27.0.6" - jest-util "^27.1.0" - jest-worker "^27.1.0" + jest-util "^27.1.1" + jest-worker "^27.1.1" micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.1.0.tgz#324a3de0b2ee20d238b2b5b844acc4571331a206" - integrity sha512-Z/NIt0wBDg3przOW2FCWtYjMn3Ip68t0SL60agD/e67jlhTyV3PIF8IzT9ecwqFbeuUSO2OT8WeJgHcalDGFzQ== +jest-jasmine2@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.1.1.tgz#efb9e7b70ce834c35c91e1a2f01bb41b462fad43" + integrity sha512-0LAzUmcmvQwjIdJt0cXUVX4G5qjVXE8ELt6nbMNDzv2yAs2hYCCUtQq+Eje70GwAysWCGcS64QeYj5VPHYVxPg== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^27.1.0" + "@jest/environment" "^27.1.1" "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/test-result" "^27.1.1" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^27.1.0" + expect "^27.1.1" is-generator-fn "^2.0.0" - jest-each "^27.1.0" - jest-matcher-utils "^27.1.0" - jest-message-util "^27.1.0" - jest-runtime "^27.1.0" - jest-snapshot "^27.1.0" - jest-util "^27.1.0" - pretty-format "^27.1.0" + jest-each "^27.1.1" + jest-matcher-utils "^27.1.1" + jest-message-util "^27.1.1" + jest-runtime "^27.1.1" + jest-snapshot "^27.1.1" + jest-util "^27.1.1" + pretty-format "^27.1.1" throat "^6.0.1" -jest-leak-detector@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.1.0.tgz#fe7eb633c851e06280ec4dd248067fe232c00a79" - integrity sha512-oHvSkz1E80VyeTKBvZNnw576qU+cVqRXUD3/wKXh1zpaki47Qty2xeHg2HKie9Hqcd2l4XwircgNOWb/NiGqdA== +jest-leak-detector@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.1.1.tgz#8e05ec4b339814fc4202f07d875da65189e3d7d4" + integrity sha512-gwSgzmqShoeEsEVpgObymQPrM9P6557jt1EsFW5aCeJ46Cme0EdjYU7xr6llQZ5GpWDl56eOstUaPXiZOfiTKw== dependencies: jest-get-type "^27.0.6" - pretty-format "^27.1.0" + pretty-format "^27.1.1" -jest-matcher-utils@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.1.0.tgz#68afda0885db1f0b9472ce98dc4c535080785301" - integrity sha512-VmAudus2P6Yt/JVBRdTPFhUzlIN8DYJd+et5Rd9QDsO/Z82Z4iwGjo43U8Z+PTiz8CBvKvlb6Fh3oKy39hykkQ== +jest-matcher-utils@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.1.1.tgz#1f444d7491ccf9edca746336b056178789a59651" + integrity sha512-Q1a10w9Y4sh0wegkdP6reQOa/Dtz7nAvDqBgrat1ItZAUvk4jzXAqyhXPu/ZuEtDaXaNKpdRPRQA8bvkOh2Eaw== dependencies: chalk "^4.0.0" - jest-diff "^27.1.0" + jest-diff "^27.1.1" jest-get-type "^27.0.6" - pretty-format "^27.1.0" + pretty-format "^27.1.1" jest-message-util@^27.0.1: version "27.0.1" @@ -6559,27 +6559,27 @@ jest-message-util@^27.0.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.1.0.tgz#e77692c84945d1d10ef00afdfd3d2c20bd8fb468" - integrity sha512-Eck8NFnJ5Sg36R9XguD65cf2D5+McC+NF5GIdEninoabcuoOfWrID5qJhufq5FB0DRKoiyxB61hS7MKoMD0trQ== +jest-message-util@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.1.1.tgz#980110fb72fcfa711cd9a95e8f10d335207585c6" + integrity sha512-b697BOJV93+AVGvzLRtVZ0cTVRbd59OaWnbB2D75GRaIMc4I+Z9W0wHxbfjW01JWO+TqqW4yevT0aN7Fd0XWng== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.4" - pretty-format "^27.1.0" + pretty-format "^27.1.1" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.1.0.tgz#7ca6e4d09375c071661642d1c14c4711f3ab4b4f" - integrity sha512-iT3/Yhu7DwAg/0HvvLCqLvrTKTRMyJlrrfJYWzuLSf9RCAxBoIXN3HoymZxMnYsC3eD8ewGbUa9jUknwBenx2w== +jest-mock@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.1.1.tgz#c7a2e81301fdcf3dab114931d23d89ec9d0c3a82" + integrity sha512-SClsFKuYBf+6SSi8jtAYOuPw8DDMsTElUWEae3zq7vDhH01ayVSIHUSIa8UgbDOUalCFp6gNsaikN0rbxN4dbw== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -6597,72 +6597,72 @@ jest-regex-util@^27.0.6: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5" integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ== -jest-resolve-dependencies@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.0.tgz#d32ea4a2c82f76410f6157d0ec6cde24fbff2317" - integrity sha512-Kq5XuDAELuBnrERrjFYEzu/A+i2W7l9HnPWqZEeKGEQ7m1R+6ndMbdXCVCx29Se1qwLZLgvoXwinB3SPIaitMQ== +jest-resolve-dependencies@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.1.tgz#6f3e0916c1764dd1853c6111ed9d66c66c792e40" + integrity sha512-sYZR+uBjFDCo4VhYeazZf/T+ryYItvdLKu9vHatqkUqHGjDMrdEPOykiqC2iEpaCFTS+3iL/21CYiJuKdRbniw== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" jest-regex-util "^27.0.6" - jest-snapshot "^27.1.0" + jest-snapshot "^27.1.1" -jest-resolve@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.1.0.tgz#bb22303c9e240cccdda28562e3c6fbcc6a23ac86" - integrity sha512-TXvzrLyPg0vLOwcWX38ZGYeEztSEmW+cQQKqc4HKDUwun31wsBXwotRlUz4/AYU/Fq4GhbMd/ileIWZEtcdmIA== +jest-resolve@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.1.1.tgz#3a86762f9affcad9697bc88140b0581b623add33" + integrity sha512-M41YFmWhvDVstwe7XuV21zynOiBLJB5Sk0GrIsYYgTkjfEWNLVXDjAyq1W7PHseaYNOxIc0nOGq/r5iwcZNC1A== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" chalk "^4.0.0" escalade "^3.1.1" graceful-fs "^4.2.4" - jest-haste-map "^27.1.0" + jest-haste-map "^27.1.1" jest-pnp-resolver "^1.2.2" - jest-util "^27.1.0" - jest-validate "^27.1.0" + jest-util "^27.1.1" + jest-validate "^27.1.1" resolve "^1.20.0" slash "^3.0.0" -jest-runner@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.1.0.tgz#1b28d114fb3b67407b8354c9385d47395e8ff83f" - integrity sha512-ZWPKr9M5w5gDplz1KsJ6iRmQaDT/yyAFLf18fKbb/+BLWsR1sCNC2wMT0H7pP3gDcBz0qZ6aJraSYUNAGSJGaw== +jest-runner@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.1.1.tgz#1991fdf13a8fe6e49cef47332db33300649357cd" + integrity sha512-lP3MBNQhg75/sQtVkC8dsAQZumvy3lHK/YIwYPfEyqGIX1qEcnYIRxP89q0ZgC5ngvi1vN2P5UFHszQxguWdng== dependencies: - "@jest/console" "^27.1.0" - "@jest/environment" "^27.1.0" - "@jest/test-result" "^27.1.0" - "@jest/transform" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/console" "^27.1.1" + "@jest/environment" "^27.1.1" + "@jest/test-result" "^27.1.1" + "@jest/transform" "^27.1.1" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" jest-docblock "^27.0.6" - jest-environment-jsdom "^27.1.0" - jest-environment-node "^27.1.0" - jest-haste-map "^27.1.0" - jest-leak-detector "^27.1.0" - jest-message-util "^27.1.0" - jest-resolve "^27.1.0" - jest-runtime "^27.1.0" - jest-util "^27.1.0" - jest-worker "^27.1.0" + jest-environment-jsdom "^27.1.1" + jest-environment-node "^27.1.1" + jest-haste-map "^27.1.1" + jest-leak-detector "^27.1.1" + jest-message-util "^27.1.1" + jest-resolve "^27.1.1" + jest-runtime "^27.1.1" + jest-util "^27.1.1" + jest-worker "^27.1.1" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.1.0.tgz#1a98d984ffebc16a0b4f9eaad8ab47c00a750cf5" - integrity sha512-okiR2cpGjY0RkWmUGGado6ETpFOi9oG3yV0CioYdoktkVxy5Hv0WRLWnJFuArSYS8cHMCNcceUUMGiIfgxCO9A== +jest-runtime@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.1.1.tgz#bd0a0958a11c2f7d94d2e5f6f71864ad1c65fe44" + integrity sha512-FEwy+tSzmsvuKaQpyYsUyk31KG5vMmA2r2BSTHgv0yNfcooQdm2Ke91LM9Ud8D3xz8CLDHJWAI24haMFTwrsPg== dependencies: - "@jest/console" "^27.1.0" - "@jest/environment" "^27.1.0" - "@jest/fake-timers" "^27.1.0" - "@jest/globals" "^27.1.0" + "@jest/console" "^27.1.1" + "@jest/environment" "^27.1.1" + "@jest/fake-timers" "^27.1.1" + "@jest/globals" "^27.1.1" "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.1.0" - "@jest/transform" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/test-result" "^27.1.1" + "@jest/transform" "^27.1.1" + "@jest/types" "^27.1.1" "@types/yargs" "^16.0.0" chalk "^4.0.0" cjs-module-lexer "^1.0.0" @@ -6671,14 +6671,14 @@ jest-runtime@^27.1.0: exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-haste-map "^27.1.0" - jest-message-util "^27.1.0" - jest-mock "^27.1.0" + jest-haste-map "^27.1.1" + jest-message-util "^27.1.1" + jest-mock "^27.1.1" jest-regex-util "^27.0.6" - jest-resolve "^27.1.0" - jest-snapshot "^27.1.0" - jest-util "^27.1.0" - jest-validate "^27.1.0" + jest-resolve "^27.1.1" + jest-snapshot "^27.1.1" + jest-util "^27.1.1" + jest-validate "^27.1.1" slash "^3.0.0" strip-bom "^4.0.0" yargs "^16.0.3" @@ -6691,10 +6691,10 @@ jest-serializer@^27.0.6: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.1.0.tgz#2a063ab90064017a7e9302528be7eaea6da12d17" - integrity sha512-eaeUBoEjuuRwmiRI51oTldUsKOohB1F6fPqWKKILuDi/CStxzp2IWekVUXbuHHoz5ik33ioJhshiHpgPFbYgcA== +jest-snapshot@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.1.1.tgz#3b816e0ca4352fbbd1db48dc692e3d9641d2531b" + integrity sha512-Wi3QGiuRFo3lU+EbQmZnBOks0CJyAMPHvYoG7iJk00Do10jeOyuOEO0Jfoaoun8+8TDv+Nzl7Aswir/IK9+1jg== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" @@ -6702,23 +6702,23 @@ jest-snapshot@^27.1.0: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/transform" "^27.1.1" + "@jest/types" "^27.1.1" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.1.0" + expect "^27.1.1" graceful-fs "^4.2.4" - jest-diff "^27.1.0" + jest-diff "^27.1.1" jest-get-type "^27.0.6" - jest-haste-map "^27.1.0" - jest-matcher-utils "^27.1.0" - jest-message-util "^27.1.0" - jest-resolve "^27.1.0" - jest-util "^27.1.0" + jest-haste-map "^27.1.1" + jest-matcher-utils "^27.1.1" + jest-message-util "^27.1.1" + jest-resolve "^27.1.1" + jest-util "^27.1.1" natural-compare "^1.4.0" - pretty-format "^27.1.0" + pretty-format "^27.1.1" semver "^7.3.2" jest-util@^27.0.0, jest-util@^27.0.1: @@ -6733,29 +6733,29 @@ jest-util@^27.0.0, jest-util@^27.0.1: is-ci "^3.0.0" picomatch "^2.2.3" -jest-util@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.1.0.tgz#06a53777a8cb7e4940ca8e20bf9c67dd65d9bd68" - integrity sha512-edSLD2OneYDKC6gZM1yc+wY/877s/fuJNoM1k3sOEpzFyeptSmke3SLnk1dDHk9CgTA+58mnfx3ew3J11Kes/w== +jest-util@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.1.1.tgz#2b06db1391d779ec2bd406ab3690ddc56ac728b9" + integrity sha512-zf9nEbrASWn2mC/L91nNb0K+GkhFvi4MP6XJG2HqnHzHvLYcs7ou/In68xYU1i1dSkJlrWcYfWXQE8nVR+nbOA== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" graceful-fs "^4.2.4" is-ci "^3.0.0" picomatch "^2.2.3" -jest-validate@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.1.0.tgz#d9e82024c5e3f5cef52a600cfc456793a84c0998" - integrity sha512-QiJ+4XuSuMsfPi9zvdO//IrSRSlG6ybJhOpuqYSsuuaABaNT84h0IoD6vvQhThBOKT+DIKvl5sTM0l6is9+SRA== +jest-validate@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.1.1.tgz#0783733af02c988d503995fc0a07bbdc58c7dd50" + integrity sha512-N5Er5FKav/8m2dJwn7BGnZwnoD1BSc8jx5T+diG2OvyeugvZDhPeAt5DrNaGkkaKCrSUvuE7A5E4uHyT7Vj0Mw== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^27.0.6" leven "^3.1.0" - pretty-format "^27.1.0" + pretty-format "^27.1.1" jest-watch-typeahead@^0.6.1: version "0.6.4" @@ -6783,17 +6783,17 @@ jest-watcher@^27.0.0: jest-util "^27.0.1" string-length "^4.0.1" -jest-watcher@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.1.0.tgz#2511fcddb0e969a400f3d1daa74265f93f13ce93" - integrity sha512-ivaWTrA46aHWdgPDgPypSHiNQjyKnLBpUIHeBaGg11U+pDzZpkffGlcB1l1a014phmG0mHgkOHtOgiqJQM6yKQ== +jest-watcher@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.1.1.tgz#a8147e18703b5d753ada4b287451f2daf40f4118" + integrity sha512-XQzyHbxziDe+lZM6Dzs40fEt4q9akOGwitJnxQasJ9WG0bv3JGiRlsBgjw13znGapeMtFaEsyhL0Cl04IbaoWQ== dependencies: - "@jest/test-result" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/test-result" "^27.1.1" + "@jest/types" "^27.1.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.1.0" + jest-util "^27.1.1" string-length "^4.0.1" jest-worker@^27.0.2: @@ -6805,23 +6805,23 @@ jest-worker@^27.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.1.0.tgz#65f4a88e37148ed984ba8ca8492d6b376938c0aa" - integrity sha512-mO4PHb2QWLn9yRXGp7rkvXLAYuxwhq1ZYUo0LoDhg8wqvv4QizP1ZWEJOeolgbEgAWZLIEU0wsku8J+lGWfBhg== +jest-worker@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.1.1.tgz#eb5f05c4657fdcb702c36c48b20d785bd4599378" + integrity sha512-XJKCL7tu+362IUYTWvw8+3S75U7qMiYiRU6u5yqscB48bTvzwN6i8L/7wVTXiFLwkRsxARNM7TISnTvcgv9hxA== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" jest@^27.0.3: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.1.0.tgz#eaab62dfdc02d8b7c814cd27b8d2d92bc46d3d69" - integrity sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg== + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.1.1.tgz#49f0497fa0fb07dc78898318cc1b737b5fbf72d8" + integrity sha512-LFTEZOhoZNR/2DQM3OCaK5xC6c55c1OWhYh0njRsoHX0qd6x4nkcgenkSH0JKjsAGMTmmJAoL7/oqYHMfwhruA== dependencies: - "@jest/core" "^27.1.0" + "@jest/core" "^27.1.1" import-local "^3.0.2" - jest-cli "^27.1.0" + jest-cli "^27.1.1" js-tokens@^4.0.0: version "4.0.0" @@ -8821,12 +8821,12 @@ pretty-format@^27.0.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.1.0.tgz#022f3fdb19121e0a2612f3cff8d724431461b9ca" - integrity sha512-4aGaud3w3rxAO6OXmK3fwBFQ0bctIOG3/if+jYEFGNGIs0EvuidQm3bZ9mlP2/t9epLNC/12czabfy7TZNSwVA== +pretty-format@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.1.1.tgz#cbaf9ec6cd7cfc3141478b6f6293c0ccdbe968e0" + integrity sha512-zdBi/xlstKJL42UH7goQti5Hip/B415w1Mfj+WWWYMBylAYtKESnXGUtVVcMVid9ReVjypCotUV6CEevYPHv2g== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" ansi-regex "^5.0.0" ansi-styles "^5.0.0" react-is "^17.0.1" From 77ed947493309aad868e5e5ffff56508d9d4980f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Sep 2021 13:12:41 +0300 Subject: [PATCH 136/173] chore(deps): bump axios from 0.21.1 to 0.21.4 (#2941) Bumps [axios](https://github.com/axios/axios) from 0.21.1 to 0.21.4. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v0.21.1...v0.21.4) --- updated-dependencies: - dependency-name: axios dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index ef03227e072..aa0f7fedaed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2690,11 +2690,11 @@ aws4@^1.8.0: integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: - follow-redirects "^1.10.0" + follow-redirects "^1.14.0" babel-core@^7.0.0-bridge.0: version "7.0.0-bridge.0" @@ -4865,10 +4865,10 @@ flow-parser@0.*: resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.151.0.tgz#e1656a8bbc5979d3e624224dcc72e3fc8da58cdc" integrity sha512-jDcpO8IFfVs29jlYsh/cDDZ4yQcl8ed0RZP+oQ2Hoo7OrI3xffTYnYa1lg84SB51iIbXLDhS3uwQdXgqKZWb5g== -follow-redirects@^1.0.0, follow-redirects@^1.10.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== +follow-redirects@^1.0.0, follow-redirects@^1.14.0: + version "1.14.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.3.tgz#6ada78118d8d24caee595595accdc0ac6abd022e" + integrity sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw== for-in@^1.0.2: version "1.0.2" From 7cf4c283ed0589fb20ba6f8b99fa4333b175b2a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Sep 2021 13:35:15 +0300 Subject: [PATCH 137/173] chore(deps-dev): bump prettier from 2.3.2 to 2.4.0 (#2943) Bumps [prettier](https://github.com/prettier/prettier) from 2.3.2 to 2.4.0. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/2.3.2...2.4.0) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index aa0f7fedaed..0f5b94f324c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8792,9 +8792,9 @@ prepend-http@^1.0.1: integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= prettier@^2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" - integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== + version "2.4.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.0.tgz#85bdfe0f70c3e777cf13a4ffff39713ca6f64cba" + integrity sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ== pretty-bytes@^5.2.0: version "5.6.0" From 554a4841c5431561d0b393fc06f442db8e62b73c Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Fri, 10 Sep 2021 16:09:26 +0530 Subject: [PATCH 138/173] docs: update serve options (#2942) --- SERVE-OPTIONS-v4.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/SERVE-OPTIONS-v4.md b/SERVE-OPTIONS-v4.md index f7062a43d19..604f4499b4b 100644 --- a/SERVE-OPTIONS-v4.md +++ b/SERVE-OPTIONS-v4.md @@ -60,15 +60,23 @@ Options: --https-passphrase Passphrase for a pfx file. --https-request-cert Request for an SSL certificate. --no-https-request-cert Does not request for an SSL certificate. - --https-cacert Path to an SSL CA certificate. - --https-key Path to an SSL key. - --https-pfx Path to an SSL pfx file. - --https-cert Path to an SSL certificate. + --https-ca Path to an SSL CA certificate or content of an SSL CA certificate. + --https-ca-reset Clear all items provided in 'https.ca' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. + --https-cacert Path to an SSL CA certificate or content of an SSL CA certificate. + --https-cacert-reset Clear all items provided in 'https.cacert' configuration. Path to an SSL CA certificate or content of an SSL CA certificate. + --https-key Path to an SSL key or content of an SSL key. + --https-key-reset Clear all items provided in 'https.key' configuration. Path to an SSL key or content of an SSL key. + --https-pfx Path to an SSL pfx file or content of an SSL pfx file. + --https-pfx-reset Clear all items provided in 'https.pfx' configuration. Path to an SSL pfx file or content of an SSL pfx file. + --https-cert Path to an SSL certificate or content of an SSL certificate. + --https-cert-reset Clear all items provided in 'https.cert' configuration. Path to an SSL certificate or content of an SSL certificate. + --https-crl Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists). + --https-crl-reset Clear all items provided in 'https.crl' configuration. Path to PEM formatted CRLs (Certificate Revocation Lists) or content of PEM formatted CRLs (Certificate Revocation Lists). --ipc [value] Listen to a unix socket. --live-reload Enables reload/refresh the page(s) when file changes are detected (enabled by default). --no-live-reload Disables reload/refresh the page(s) when file changes are detected (enabled by default) - --magic-html Enables/Disables magic HTML routes (enabled by default). - --no-magic-html Negative 'magic-html' option. + --magic-html Tells dev-server whether to enable magic HTML routes (routes corresponding to your webpack output, for example '/main' for 'main.js'). + --no-magic-html Disables magic HTML routes (routes corresponding to your webpack output, for example '/main' for 'main.js'). --open [value...] Allows to configure dev server to open the browser(s) and page(s) after server had been started (set it to true to open your default browser). --no-open Does not open the default browser. --open-target Opens specified page in browser. From c1f15932df9cd8519bb4798424f4414557493a5c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Sep 2021 10:52:47 +0530 Subject: [PATCH 139/173] chore(deps-dev): bump webpack from 5.52.0 to 5.52.1 (#2946) Bumps [webpack](https://github.com/webpack/webpack) from 5.52.0 to 5.52.1. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.52.0...v5.52.1) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0f5b94f324c..d5fe477794c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11003,9 +11003,9 @@ webpack-sources@^3.2.0: integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== webpack@^5.45.1: - version "5.52.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.52.0.tgz#88d997c2c3ebb62abcaa453d2a26e0fd917c71a3" - integrity sha512-yRZOat8jWGwBwHpco3uKQhVU7HYaNunZiJ4AkAVQkPCUGoZk/tiIXiwG+8HIy/F+qsiZvSOa+GLQOj3q5RKRYg== + version "5.52.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.52.1.tgz#2dc1d9029ecb7acfb80da7bf67baab67baa517a7" + integrity sha512-wkGb0hLfrS7ML3n2xIKfUIwHbjB6gxwQHyLmVHoAqEQBw+nWo+G6LoHL098FEXqahqximsntjBLuewStrnJk0g== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" From 3a5ac748b9ffdf8713a97e71af0dfbc22f110bc2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Sep 2021 11:11:41 +0530 Subject: [PATCH 140/173] chore(deps-dev): bump typescript from 4.4.2 to 4.4.3 (#2945) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.4.2 to 4.4.3. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v4.4.2...v4.4.3) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d5fe477794c..c348f062ff6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10627,9 +10627,9 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^4.1.3: - version "4.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.2.tgz#6d618640d430e3569a1dfb44f7d7e600ced3ee86" - integrity sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ== + version "4.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324" + integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA== uglify-js@^3.1.4: version "3.13.6" From e9409ae35b18aaac2f2a77ff903999c29cb8bcdd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Sep 2021 14:00:26 +0300 Subject: [PATCH 141/173] chore(deps-dev): bump @typescript-eslint/parser --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index c348f062ff6..1a988b00e6d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2076,13 +2076,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.0.tgz#87b7cd16b24b9170c77595d8b1363f8047121e05" - integrity sha512-oWbzvPh5amMuTmKaf1wp0ySxPt2ZXHnFQBN2Szu1O//7LmOvgaKTCIDNLK2NvzpmVd5A2M/1j/rujBqO37hj3w== + version "4.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.1.tgz#8f9a2672033e6f6d33b1c0260eebdc0ddf539064" + integrity sha512-dnVZDB6FhpIby6yVbHkwTKkn2ypjVIfAR9nh+kYsA/ZL0JlTsd22BiDjouotisY3Irmd3OW1qlk9EI5R8GrvRQ== dependencies: - "@typescript-eslint/scope-manager" "4.31.0" - "@typescript-eslint/types" "4.31.0" - "@typescript-eslint/typescript-estree" "4.31.0" + "@typescript-eslint/scope-manager" "4.31.1" + "@typescript-eslint/types" "4.31.1" + "@typescript-eslint/typescript-estree" "4.31.1" debug "^4.3.1" "@typescript-eslint/scope-manager@4.31.0": @@ -2093,11 +2093,24 @@ "@typescript-eslint/types" "4.31.0" "@typescript-eslint/visitor-keys" "4.31.0" +"@typescript-eslint/scope-manager@4.31.1": + version "4.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.1.tgz#0c21e8501f608d6a25c842fcf59541ef4f1ab561" + integrity sha512-N1Uhn6SqNtU2XpFSkD4oA+F0PfKdWHyr4bTX0xTj8NRx1314gBDRL1LUuZd5+L3oP+wo6hCbZpaa1in6SwMcVQ== + dependencies: + "@typescript-eslint/types" "4.31.1" + "@typescript-eslint/visitor-keys" "4.31.1" + "@typescript-eslint/types@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.0.tgz#9a7c86fcc1620189567dc4e46cad7efa07ee8dce" integrity sha512-9XR5q9mk7DCXgXLS7REIVs+BaAswfdHhx91XqlJklmqWpTALGjygWVIb/UnLh4NWhfwhR5wNe1yTyCInxVhLqQ== +"@typescript-eslint/types@4.31.1": + version "4.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.1.tgz#5f255b695627a13401d2fdba5f7138bc79450d66" + integrity sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ== + "@typescript-eslint/typescript-estree@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.0.tgz#4da4cb6274a7ef3b21d53f9e7147cc76f278a078" @@ -2111,6 +2124,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.31.1": + version "4.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz#4a04d5232cf1031232b7124a9c0310b577a62d17" + integrity sha512-EGHkbsUvjFrvRnusk6yFGqrqMBTue5E5ROnS5puj3laGQPasVUgwhrxfcgkdHNFECHAewpvELE1Gjv0XO3mdWg== + dependencies: + "@typescript-eslint/types" "4.31.1" + "@typescript-eslint/visitor-keys" "4.31.1" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.0.tgz#4e87b7761cb4e0e627dc2047021aa693fc76ea2b" @@ -2119,6 +2145,14 @@ "@typescript-eslint/types" "4.31.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.31.1": + version "4.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz#f2e7a14c7f20c4ae07d7fc3c5878c4441a1da9cc" + integrity sha512-PCncP8hEqKw6SOJY+3St4LVtoZpPPn+Zlpm7KW5xnviMhdqcsBty4Lsg4J/VECpJjw1CkROaZhH4B8M1OfnXTQ== + dependencies: + "@typescript-eslint/types" "4.31.1" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From 4729cb23e92123aef894f822d0aee591107ff3e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Sep 2021 14:00:45 +0300 Subject: [PATCH 142/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin (#2950) --- yarn.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1a988b00e6d..7903780f768 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2051,27 +2051,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.0.tgz#9c3fa6f44bad789a962426ad951b54695bd3af6b" - integrity sha512-iPKZTZNavAlOhfF4gymiSuUkgLne/nh5Oz2/mdiUmuZVD42m9PapnCnzjxuDsnpnbH3wT5s2D8bw6S39TC6GNw== + version "4.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.1.tgz#e938603a136f01dcabeece069da5fb2e331d4498" + integrity sha512-UDqhWmd5i0TvPLmbK5xY3UZB0zEGseF+DHPghZ37Sb83Qd3p8ujhvAtkU4OF46Ka5Pm5kWvFIx0cCTBFKo0alA== dependencies: - "@typescript-eslint/experimental-utils" "4.31.0" - "@typescript-eslint/scope-manager" "4.31.0" + "@typescript-eslint/experimental-utils" "4.31.1" + "@typescript-eslint/scope-manager" "4.31.1" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.31.0": - version "4.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.0.tgz#0ef1d5d86c334f983a00f310e43c1ce4c14e054d" - integrity sha512-Hld+EQiKLMppgKKkdUsLeVIeEOrwKc2G983NmznY/r5/ZtZCDvIOXnXtwqJIgYz/ymsy7n7RGvMyrzf1WaSQrw== +"@typescript-eslint/experimental-utils@4.31.1": + version "4.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.1.tgz#0c900f832f270b88e13e51753647b02d08371ce5" + integrity sha512-NtoPsqmcSsWty0mcL5nTZXMf7Ei0Xr2MT8jWjXMVgRK0/1qeQ2jZzLFUh4QtyJ4+/lPUyMw5cSfeeME+Zrtp9Q== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.31.0" - "@typescript-eslint/types" "4.31.0" - "@typescript-eslint/typescript-estree" "4.31.0" + "@typescript-eslint/scope-manager" "4.31.1" + "@typescript-eslint/types" "4.31.1" + "@typescript-eslint/typescript-estree" "4.31.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" From 71f9795fe161fa81d986045aa5ad23614ce559c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Sep 2021 15:47:01 +0300 Subject: [PATCH 143/173] chore(deps-dev): bump jest from 27.1.1 to 27.2.0 (#2949) Bumps [jest](https://github.com/facebook/jest) from 27.1.1 to 27.2.0. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/compare/v27.1.1...v27.2.0) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 554 +++++++++++++++++++++++++++--------------------------- 1 file changed, 277 insertions(+), 277 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7903780f768..d4b06e1b3d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -649,27 +649,27 @@ jest-util "^27.0.1" slash "^3.0.0" -"@jest/console@^27.1.1": - version "27.1.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.1.1.tgz#e1eb8ef8a410e75e80bb17429047ed5d43411d20" - integrity sha512-VpQJRsWSeAem0zpBjeRtDbcD6DlbNoK11dNYt+PSQ+DDORh9q2/xyEpErfwgnLjWX0EKkSZmTGx/iH9Inzs6vQ== +"@jest/console@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.2.0.tgz#57f702837ec52899be58c3794dce5941c77a8b63" + integrity sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw== dependencies: "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.1.1" - jest-util "^27.1.1" + jest-message-util "^27.2.0" + jest-util "^27.2.0" slash "^3.0.0" -"@jest/core@^27.1.1": - version "27.1.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.1.1.tgz#d9d42214920cb96c2a6cc48517cf62d4351da3aa" - integrity sha512-oCkKeTgI0emznKcLoq5OCD0PhxCijA4l7ejDnWW3d5bgSi+zfVaLybVqa+EQOxpNejQWtTna7tmsAXjMN9N43Q== +"@jest/core@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.2.0.tgz#61fc27b244e9709170ed9ffe41b006add569f1b3" + integrity sha512-E/2NHhq+VMo18DpKkoty8Sjey8Kps5Cqa88A8NP757s6JjYqPdioMuyUBhDiIOGCdQByEp0ou3jskkTszMS0nw== dependencies: - "@jest/console" "^27.1.1" - "@jest/reporters" "^27.1.1" - "@jest/test-result" "^27.1.1" - "@jest/transform" "^27.1.1" + "@jest/console" "^27.2.0" + "@jest/reporters" "^27.2.0" + "@jest/test-result" "^27.2.0" + "@jest/transform" "^27.2.0" "@jest/types" "^27.1.1" "@types/node" "*" ansi-escapes "^4.2.1" @@ -678,64 +678,64 @@ exit "^0.1.2" graceful-fs "^4.2.4" jest-changed-files "^27.1.1" - jest-config "^27.1.1" - jest-haste-map "^27.1.1" - jest-message-util "^27.1.1" + jest-config "^27.2.0" + jest-haste-map "^27.2.0" + jest-message-util "^27.2.0" jest-regex-util "^27.0.6" - jest-resolve "^27.1.1" - jest-resolve-dependencies "^27.1.1" - jest-runner "^27.1.1" - jest-runtime "^27.1.1" - jest-snapshot "^27.1.1" - jest-util "^27.1.1" - jest-validate "^27.1.1" - jest-watcher "^27.1.1" + jest-resolve "^27.2.0" + jest-resolve-dependencies "^27.2.0" + jest-runner "^27.2.0" + jest-runtime "^27.2.0" + jest-snapshot "^27.2.0" + jest-util "^27.2.0" + jest-validate "^27.2.0" + jest-watcher "^27.2.0" micromatch "^4.0.4" p-each-series "^2.1.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.1.1": - version "27.1.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.1.1.tgz#a1f7a552f7008f773988b9c0e445ede35f77bbb7" - integrity sha512-+y882/ZdxhyqF5RzxIrNIANjHj991WH7jifdcplzMDosDUOyCACFYUyVTBGbSTocbU+s1cesroRzkwi8hZ9SHg== +"@jest/environment@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.2.0.tgz#48d1dbfa65f8e4a5a5c6cbeb9c59d1a5c2776f6b" + integrity sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ== dependencies: - "@jest/fake-timers" "^27.1.1" + "@jest/fake-timers" "^27.2.0" "@jest/types" "^27.1.1" "@types/node" "*" jest-mock "^27.1.1" -"@jest/fake-timers@^27.1.1": - version "27.1.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.1.1.tgz#557a1c0d067d33bcda4dfae9a7d8f96a15a954b5" - integrity sha512-u8TJ5VlsVYTsGFatoyIae2l25pku4Bu15QCPTx2Gs5z+R//Ee3tHN85462Vc9yGVcdDvgADbqNkhOLxbEwPjMQ== +"@jest/fake-timers@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.2.0.tgz#560841bc21ae7fbeff0cbff8de8f5cf43ad3561d" + integrity sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w== dependencies: "@jest/types" "^27.1.1" "@sinonjs/fake-timers" "^7.0.2" "@types/node" "*" - jest-message-util "^27.1.1" + jest-message-util "^27.2.0" jest-mock "^27.1.1" - jest-util "^27.1.1" + jest-util "^27.2.0" -"@jest/globals@^27.1.1": - version "27.1.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.1.1.tgz#cfe5f4d5b37483cef62b79612128ccc7e3c951d8" - integrity sha512-Q3JcTPmY+DAEHnr4MpnBV3mwy50EGrTC6oSDTNnW7FNGGacTJAfpWNk02D7xv422T1OzK2A2BKx+26xJOvHkyw== +"@jest/globals@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.2.0.tgz#4d7085f51df5ac70c8240eb3501289676503933d" + integrity sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg== dependencies: - "@jest/environment" "^27.1.1" + "@jest/environment" "^27.2.0" "@jest/types" "^27.1.1" - expect "^27.1.1" + expect "^27.2.0" -"@jest/reporters@^27.1.1": - version "27.1.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.1.1.tgz#ee5724092f197bb78c60affb9c6f34b6777990c2" - integrity sha512-cEERs62n1P4Pqox9HWyNOEkP57G95aK2mBjB6D8Ruz1Yc98fKH53b58rlVEnsY5nLmkLNZk65fxNi9C0Yds/8w== +"@jest/reporters@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.2.0.tgz#629886d9a42218e504a424889a293abb27919e25" + integrity sha512-7wfkE3iRTLaT0F51h1mnxH3nQVwDCdbfgXiLuCcNkF1FnxXLH9utHqkSLIiwOTV1AtmiE0YagHbOvx4rnMP/GA== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.1.1" - "@jest/test-result" "^27.1.1" - "@jest/transform" "^27.1.1" + "@jest/console" "^27.2.0" + "@jest/test-result" "^27.2.0" + "@jest/transform" "^27.2.0" "@jest/types" "^27.1.1" chalk "^4.0.0" collect-v8-coverage "^1.0.0" @@ -747,10 +747,10 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^27.1.1" - jest-resolve "^27.1.1" - jest-util "^27.1.1" - jest-worker "^27.1.1" + jest-haste-map "^27.2.0" + jest-resolve "^27.2.0" + jest-util "^27.2.0" + jest-worker "^27.2.0" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" @@ -776,30 +776,30 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-result@^27.1.1": - version "27.1.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.1.1.tgz#1086b39af5040b932a55e7f1fa1bc4671bed4781" - integrity sha512-8vy75A0Jtfz9DqXFUkjC5Co/wRla+D7qRFdShUY8SbPqBS3GBx3tpba7sGKFos8mQrdbe39n+c1zgVKtarfy6A== +"@jest/test-result@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.2.0.tgz#377b46a41a6415dd4839fd0bed67b89fecea6b20" + integrity sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA== dependencies: - "@jest/console" "^27.1.1" + "@jest/console" "^27.2.0" "@jest/types" "^27.1.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.1.1": - version "27.1.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.1.1.tgz#cea3722ec6f6330000240fd999ad3123adaf5992" - integrity sha512-l8zD3EdeixvwmLNlJoMX3hhj8iIze95okj4sqmBzOq/zW8gZLElUveH4bpKEMuR+Nweazjlwc7L6g4C26M/y6Q== +"@jest/test-sequencer@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.2.0.tgz#b02b507687825af2fdc84e90c539d36fd8cf7bc9" + integrity sha512-PrqarcpzOU1KSAK7aPwfL8nnpaqTMwPe7JBPnaOYRDSe/C6AoJiL5Kbnonqf1+DregxZIRAoDg69R9/DXMGqXA== dependencies: - "@jest/test-result" "^27.1.1" + "@jest/test-result" "^27.2.0" graceful-fs "^4.2.4" - jest-haste-map "^27.1.1" - jest-runtime "^27.1.1" + jest-haste-map "^27.2.0" + jest-runtime "^27.2.0" -"@jest/transform@^27.1.1": - version "27.1.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.1.1.tgz#51a22f5a48d55d796c02757117c02fcfe4da13d7" - integrity sha512-qM19Eu75U6Jc5zosXXVnq900Nl9JDpoGaZ4Mg6wZs7oqbu3heYSMOZS19DlwjlhWdfNRjF4UeAgkrCJCK3fEXg== +"@jest/transform@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.2.0.tgz#e7e6e49d2591792db2385c33cdbb4379d407068d" + integrity sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg== dependencies: "@babel/core" "^7.1.0" "@jest/types" "^27.1.1" @@ -808,9 +808,9 @@ convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" - jest-haste-map "^27.1.1" + jest-haste-map "^27.2.0" jest-regex-util "^27.0.6" - jest-util "^27.1.1" + jest-util "^27.2.0" micromatch "^4.0.4" pirates "^4.0.1" slash "^3.0.0" @@ -2735,16 +2735,16 @@ 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@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.1.1.tgz#9359c45995d0940b84d2176ab83423f9eed07617" - integrity sha512-JA+dzJl4n2RBvWQEnph6HJaTHrsIPiXGQYatt/D8nR4UpX9UG4GaDzykVVPQBbrdTebZREkRb6SOxyIXJRab6Q== +babel-jest@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.2.0.tgz#c0f129a81f1197028aeb4447acbc04564c8bfc52" + integrity sha512-bS2p+KGGVVmWXBa8+i6SO/xzpiz2Q/2LnqLbQknPKefWXVZ67YIjA4iXup/jMOEZplga9PpWn+wrdb3UdDwRaA== dependencies: - "@jest/transform" "^27.1.1" + "@jest/transform" "^27.2.0" "@jest/types" "^27.1.1" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^27.0.6" + babel-preset-jest "^27.2.0" chalk "^4.0.0" graceful-fs "^4.2.4" slash "^3.0.0" @@ -2767,10 +2767,10 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz#f7c6b3d764af21cb4a2a1ab6870117dbde15b456" - integrity sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw== +babel-plugin-jest-hoist@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz#79f37d43f7e5c4fdc4b2ca3e10cc6cf545626277" + integrity sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -2795,12 +2795,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz#909ef08e9f24a4679768be2f60a3df0856843f9d" - integrity sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw== +babel-preset-jest@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz#556bbbf340608fed5670ab0ea0c8ef2449fba885" + integrity sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg== dependencies: - babel-plugin-jest-hoist "^27.0.6" + babel-plugin-jest-hoist "^27.2.0" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -4559,16 +4559,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.1.1.tgz#020215da67d41cd6ad805fa00bd030985ca7c093" - integrity sha512-JQAzp0CJoFFHF1RnOtrMUNMdsfx/Tl0+FhRzVl8q0fa23N+JyWdPXwb3T5rkHCvyo9uttnK7lVdKCBl1b/9EDw== +expect@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.2.0.tgz#40eb89a492afb726a3929ccf3611ee0799ab976f" + integrity sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ== dependencies: "@jest/types" "^27.1.1" ansi-styles "^5.0.0" jest-get-type "^27.0.6" - jest-matcher-utils "^27.1.1" - jest-message-util "^27.1.1" + jest-matcher-utils "^27.2.0" + jest-message-util "^27.2.0" jest-regex-util "^27.0.6" express@^4.17.1: @@ -6373,75 +6373,75 @@ jest-changed-files@^27.1.1: execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.1.1.tgz#08dd3ec5cbaadce68ce6388ebccbe051d1b34bc6" - integrity sha512-Xed1ApiMFu/yzqGMBToHr8sp2gkX/ARZf4nXoGrHJrXrTUdVIWiVYheayfcOaPdQvQEE/uyBLgW7I7YBLIrAXQ== +jest-circus@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.2.0.tgz#ad0d6d75514050f539d422bae41344224d2328f9" + integrity sha512-WwENhaZwOARB1nmcboYPSv/PwHBUGRpA4MEgszjr9DLCl97MYw0qZprBwLb7rNzvMwfIvNGG7pefQ5rxyBlzIA== dependencies: - "@jest/environment" "^27.1.1" - "@jest/test-result" "^27.1.1" + "@jest/environment" "^27.2.0" + "@jest/test-result" "^27.2.0" "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" - expect "^27.1.1" + expect "^27.2.0" is-generator-fn "^2.0.0" - jest-each "^27.1.1" - jest-matcher-utils "^27.1.1" - jest-message-util "^27.1.1" - jest-runtime "^27.1.1" - jest-snapshot "^27.1.1" - jest-util "^27.1.1" - pretty-format "^27.1.1" + jest-each "^27.2.0" + jest-matcher-utils "^27.2.0" + jest-message-util "^27.2.0" + jest-runtime "^27.2.0" + jest-snapshot "^27.2.0" + jest-util "^27.2.0" + pretty-format "^27.2.0" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.1.1.tgz#6491a0278231ffee61083ad468809328e96a8eb2" - integrity sha512-LCjfEYp9D3bcOeVUUpEol9Y1ijZYMWVqflSmtw/wX+6Fb7zP4IlO14/6s9v1pxsoM4Pn46+M2zABgKuQjyDpTw== +jest-cli@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.2.0.tgz#6da5ecca5bd757e20449f5ec1f1cad5b0303d16b" + integrity sha512-bq1X/B/b1kT9y1zIFMEW3GFRX1HEhFybiqKdbxM+j11XMMYSbU9WezfyWIhrSOmPT+iODLATVjfsCnbQs7cfIA== dependencies: - "@jest/core" "^27.1.1" - "@jest/test-result" "^27.1.1" + "@jest/core" "^27.2.0" + "@jest/test-result" "^27.2.0" "@jest/types" "^27.1.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" - jest-config "^27.1.1" - jest-util "^27.1.1" - jest-validate "^27.1.1" + jest-config "^27.2.0" + jest-util "^27.2.0" + jest-validate "^27.2.0" prompts "^2.0.1" yargs "^16.0.3" -jest-config@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.1.1.tgz#cde823ad27f7ec0b9440035eabc75d4ac1ea024c" - integrity sha512-2iSd5zoJV4MsWPcLCGwUVUY/j6pZXm4Qd3rnbCtrd9EHNTg458iHw8PZztPQXfxKBKJxLfBk7tbZqYF8MGtxJA== +jest-config@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.2.0.tgz#d1c359253927005c53d11ab3e50d3b2f402a673a" + integrity sha512-Z1romHpxeNwLxQtouQ4xt07bY6HSFGKTo0xJcvOK3u6uJHveA4LB2P+ty9ArBLpTh3AqqPxsyw9l9GMnWBYS9A== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^27.1.1" + "@jest/test-sequencer" "^27.2.0" "@jest/types" "^27.1.1" - babel-jest "^27.1.1" + babel-jest "^27.2.0" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" is-ci "^3.0.0" - jest-circus "^27.1.1" - jest-environment-jsdom "^27.1.1" - jest-environment-node "^27.1.1" + jest-circus "^27.2.0" + jest-environment-jsdom "^27.2.0" + jest-environment-node "^27.2.0" jest-get-type "^27.0.6" - jest-jasmine2 "^27.1.1" + jest-jasmine2 "^27.2.0" jest-regex-util "^27.0.6" - jest-resolve "^27.1.1" - jest-runner "^27.1.1" - jest-util "^27.1.1" - jest-validate "^27.1.1" + jest-resolve "^27.2.0" + jest-runner "^27.2.0" + jest-util "^27.2.0" + jest-validate "^27.2.0" micromatch "^4.0.4" - pretty-format "^27.1.1" + pretty-format "^27.2.0" jest-diff@^26.0.0: version "26.6.2" @@ -6453,15 +6453,15 @@ jest-diff@^26.0.0: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-diff@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.1.1.tgz#1d1629ca2e3933b10cb27dc260e28e3dba182684" - integrity sha512-m/6n5158rqEriTazqHtBpOa2B/gGgXJijX6nsEgZfbJ/3pxQcdpVXBe+FP39b1dxWHyLVVmuVXddmAwtqFO4Lg== +jest-diff@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.2.0.tgz#bda761c360f751bab1e7a2fe2fc2b0a35ce8518c" + integrity sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw== dependencies: chalk "^4.0.0" diff-sequences "^27.0.6" jest-get-type "^27.0.6" - pretty-format "^27.1.1" + pretty-format "^27.2.0" jest-docblock@^27.0.6: version "27.0.6" @@ -6470,41 +6470,41 @@ jest-docblock@^27.0.6: dependencies: detect-newline "^3.0.0" -jest-each@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.1.1.tgz#caa1e7eed77144be346eb18712885b990389348a" - integrity sha512-r6hOsTLavUBb1xN0uDa89jdDeBmJ+K49fWpbyxeGRA2pLY46PlC4z551/cWNQzrj+IUa5/gSRsCIV/01HdNPug== +jest-each@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.2.0.tgz#4c531c7223de289429fc7b2473a86e653c86d61f" + integrity sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA== dependencies: "@jest/types" "^27.1.1" chalk "^4.0.0" jest-get-type "^27.0.6" - jest-util "^27.1.1" - pretty-format "^27.1.1" + jest-util "^27.2.0" + pretty-format "^27.2.0" -jest-environment-jsdom@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.1.1.tgz#e53e98a16e6a764b8ee8db3b29b3a8c27db06f66" - integrity sha512-6vOnoZ6IaExuw7FvnuJhA1qFYv1DDSnN0sQowzolNwxQp7bG1YhLxj2YU1sVXAYA3IR3MbH2mbnJUsLUWfyfzw== +jest-environment-jsdom@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.2.0.tgz#c654dfae50ca2272c2a2e2bb95ff0af298283a3c" + integrity sha512-wNQJi6Rd/AkUWqTc4gWhuTIFPo7tlMK0RPZXeM6AqRHZA3D3vwvTa9ktAktyVyWYmUoXdYstOfyYMG3w4jt7eA== dependencies: - "@jest/environment" "^27.1.1" - "@jest/fake-timers" "^27.1.1" + "@jest/environment" "^27.2.0" + "@jest/fake-timers" "^27.2.0" "@jest/types" "^27.1.1" "@types/node" "*" jest-mock "^27.1.1" - jest-util "^27.1.1" + jest-util "^27.2.0" jsdom "^16.6.0" -jest-environment-node@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.1.1.tgz#97425d4762b2aeab15892ffba08c6cbed7653e75" - integrity sha512-OEGeZh0PwzngNIYWYgWrvTcLygopV8OJbC9HNb0j70VBKgEIsdZkYhwcFnaURX83OHACMqf1pa9Tv5Pw5jemrg== +jest-environment-node@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.2.0.tgz#73ef2151cb62206669becb94cd84f33276252de5" + integrity sha512-WbW+vdM4u88iy6Q3ftUEQOSgMPtSgjm3qixYYK2AKEuqmFO2zmACTw1vFUB0qI/QN88X6hA6ZkVKIdIWWzz+yg== dependencies: - "@jest/environment" "^27.1.1" - "@jest/fake-timers" "^27.1.1" + "@jest/environment" "^27.2.0" + "@jest/fake-timers" "^27.2.0" "@jest/types" "^27.1.1" "@types/node" "*" jest-mock "^27.1.1" - jest-util "^27.1.1" + jest-util "^27.2.0" jest-get-type@^26.3.0: version "26.3.0" @@ -6516,10 +6516,10 @@ jest-get-type@^27.0.6: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== -jest-haste-map@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.1.1.tgz#f7c646b0e417ec29b80b96cf785b57b581384adf" - integrity sha512-NGLYVAdh5C8Ezg5QBFzrNeYsfxptDBPlhvZNaicLiZX77F/rS27a9M6u9ripWAaaD54xnWdZNZpEkdjD5Eo5aQ== +jest-haste-map@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.2.0.tgz#703b3a473e3f2e27d75ab07864ffd7bbaad0d75e" + integrity sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q== dependencies: "@jest/types" "^27.1.1" "@types/graceful-fs" "^4.1.2" @@ -6529,54 +6529,54 @@ jest-haste-map@^27.1.1: graceful-fs "^4.2.4" jest-regex-util "^27.0.6" jest-serializer "^27.0.6" - jest-util "^27.1.1" - jest-worker "^27.1.1" + jest-util "^27.2.0" + jest-worker "^27.2.0" micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.1.1.tgz#efb9e7b70ce834c35c91e1a2f01bb41b462fad43" - integrity sha512-0LAzUmcmvQwjIdJt0cXUVX4G5qjVXE8ELt6nbMNDzv2yAs2hYCCUtQq+Eje70GwAysWCGcS64QeYj5VPHYVxPg== +jest-jasmine2@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.2.0.tgz#1ece0ee37c348b59ed3dfcfe509fc24e3377b12d" + integrity sha512-NcPzZBk6IkDW3Z2V8orGueheGJJYfT5P0zI/vTO/Jp+R9KluUdgFrgwfvZ0A34Kw6HKgiWFILZmh3oQ/eS+UxA== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^27.1.1" + "@jest/environment" "^27.2.0" "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.1.1" + "@jest/test-result" "^27.2.0" "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^27.1.1" + expect "^27.2.0" is-generator-fn "^2.0.0" - jest-each "^27.1.1" - jest-matcher-utils "^27.1.1" - jest-message-util "^27.1.1" - jest-runtime "^27.1.1" - jest-snapshot "^27.1.1" - jest-util "^27.1.1" - pretty-format "^27.1.1" + jest-each "^27.2.0" + jest-matcher-utils "^27.2.0" + jest-message-util "^27.2.0" + jest-runtime "^27.2.0" + jest-snapshot "^27.2.0" + jest-util "^27.2.0" + pretty-format "^27.2.0" throat "^6.0.1" -jest-leak-detector@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.1.1.tgz#8e05ec4b339814fc4202f07d875da65189e3d7d4" - integrity sha512-gwSgzmqShoeEsEVpgObymQPrM9P6557jt1EsFW5aCeJ46Cme0EdjYU7xr6llQZ5GpWDl56eOstUaPXiZOfiTKw== +jest-leak-detector@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.2.0.tgz#9a7ca2dad1a21c4e49ad2a8ad7f1214ffdb86a28" + integrity sha512-e91BIEmbZw5+MHkB4Hnrq7S86coTxUMCkz4n7DLmQYvl9pEKmRx9H/JFH87bBqbIU5B2Ju1soKxRWX6/eGFGpA== dependencies: jest-get-type "^27.0.6" - pretty-format "^27.1.1" + pretty-format "^27.2.0" -jest-matcher-utils@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.1.1.tgz#1f444d7491ccf9edca746336b056178789a59651" - integrity sha512-Q1a10w9Y4sh0wegkdP6reQOa/Dtz7nAvDqBgrat1ItZAUvk4jzXAqyhXPu/ZuEtDaXaNKpdRPRQA8bvkOh2Eaw== +jest-matcher-utils@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz#b4d224ab88655d5fab64b96b989ac349e2f5da43" + integrity sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw== dependencies: chalk "^4.0.0" - jest-diff "^27.1.1" + jest-diff "^27.2.0" jest-get-type "^27.0.6" - pretty-format "^27.1.1" + pretty-format "^27.2.0" jest-message-util@^27.0.1: version "27.0.1" @@ -6593,10 +6593,10 @@ jest-message-util@^27.0.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.1.1.tgz#980110fb72fcfa711cd9a95e8f10d335207585c6" - integrity sha512-b697BOJV93+AVGvzLRtVZ0cTVRbd59OaWnbB2D75GRaIMc4I+Z9W0wHxbfjW01JWO+TqqW4yevT0aN7Fd0XWng== +jest-message-util@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.2.0.tgz#2f65c71df55267208686b1d7514e18106c91ceaf" + integrity sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w== dependencies: "@babel/code-frame" "^7.12.13" "@jest/types" "^27.1.1" @@ -6604,7 +6604,7 @@ jest-message-util@^27.1.1: chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.4" - pretty-format "^27.1.1" + pretty-format "^27.2.0" slash "^3.0.0" stack-utils "^2.0.3" @@ -6631,40 +6631,40 @@ jest-regex-util@^27.0.6: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5" integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ== -jest-resolve-dependencies@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.1.tgz#6f3e0916c1764dd1853c6111ed9d66c66c792e40" - integrity sha512-sYZR+uBjFDCo4VhYeazZf/T+ryYItvdLKu9vHatqkUqHGjDMrdEPOykiqC2iEpaCFTS+3iL/21CYiJuKdRbniw== +jest-resolve-dependencies@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.0.tgz#b56a1aab95b0fd21e0a69a15fda985c05f902b8a" + integrity sha512-EY5jc/Y0oxn+oVEEldTidmmdVoZaknKPyDORA012JUdqPyqPL+lNdRyI3pGti0RCydds6coaw6xt4JQY54dKsg== dependencies: "@jest/types" "^27.1.1" jest-regex-util "^27.0.6" - jest-snapshot "^27.1.1" + jest-snapshot "^27.2.0" -jest-resolve@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.1.1.tgz#3a86762f9affcad9697bc88140b0581b623add33" - integrity sha512-M41YFmWhvDVstwe7XuV21zynOiBLJB5Sk0GrIsYYgTkjfEWNLVXDjAyq1W7PHseaYNOxIc0nOGq/r5iwcZNC1A== +jest-resolve@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.2.0.tgz#f5d053693ab3806ec2f778e6df8b0aa4cfaef95f" + integrity sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw== dependencies: "@jest/types" "^27.1.1" chalk "^4.0.0" escalade "^3.1.1" graceful-fs "^4.2.4" - jest-haste-map "^27.1.1" + jest-haste-map "^27.2.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.1.1" - jest-validate "^27.1.1" + jest-util "^27.2.0" + jest-validate "^27.2.0" resolve "^1.20.0" slash "^3.0.0" -jest-runner@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.1.1.tgz#1991fdf13a8fe6e49cef47332db33300649357cd" - integrity sha512-lP3MBNQhg75/sQtVkC8dsAQZumvy3lHK/YIwYPfEyqGIX1qEcnYIRxP89q0ZgC5ngvi1vN2P5UFHszQxguWdng== +jest-runner@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.2.0.tgz#281b255d88a473aebc0b5cb46e58a83a1251cab3" + integrity sha512-Cl+BHpduIc0cIVTjwoyx0pQk4Br8gn+wkr35PmKCmzEdOUnQ2wN7QVXA8vXnMQXSlFkN/+KWnk20TAVBmhgrww== dependencies: - "@jest/console" "^27.1.1" - "@jest/environment" "^27.1.1" - "@jest/test-result" "^27.1.1" - "@jest/transform" "^27.1.1" + "@jest/console" "^27.2.0" + "@jest/environment" "^27.2.0" + "@jest/test-result" "^27.2.0" + "@jest/transform" "^27.2.0" "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" @@ -6672,30 +6672,30 @@ jest-runner@^27.1.1: exit "^0.1.2" graceful-fs "^4.2.4" jest-docblock "^27.0.6" - jest-environment-jsdom "^27.1.1" - jest-environment-node "^27.1.1" - jest-haste-map "^27.1.1" - jest-leak-detector "^27.1.1" - jest-message-util "^27.1.1" - jest-resolve "^27.1.1" - jest-runtime "^27.1.1" - jest-util "^27.1.1" - jest-worker "^27.1.1" + jest-environment-jsdom "^27.2.0" + jest-environment-node "^27.2.0" + jest-haste-map "^27.2.0" + jest-leak-detector "^27.2.0" + jest-message-util "^27.2.0" + jest-resolve "^27.2.0" + jest-runtime "^27.2.0" + jest-util "^27.2.0" + jest-worker "^27.2.0" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.1.1.tgz#bd0a0958a11c2f7d94d2e5f6f71864ad1c65fe44" - integrity sha512-FEwy+tSzmsvuKaQpyYsUyk31KG5vMmA2r2BSTHgv0yNfcooQdm2Ke91LM9Ud8D3xz8CLDHJWAI24haMFTwrsPg== +jest-runtime@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.2.0.tgz#998295ccd80008b3031eeb5cc60e801e8551024b" + integrity sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ== dependencies: - "@jest/console" "^27.1.1" - "@jest/environment" "^27.1.1" - "@jest/fake-timers" "^27.1.1" - "@jest/globals" "^27.1.1" + "@jest/console" "^27.2.0" + "@jest/environment" "^27.2.0" + "@jest/fake-timers" "^27.2.0" + "@jest/globals" "^27.2.0" "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.1.1" - "@jest/transform" "^27.1.1" + "@jest/test-result" "^27.2.0" + "@jest/transform" "^27.2.0" "@jest/types" "^27.1.1" "@types/yargs" "^16.0.0" chalk "^4.0.0" @@ -6705,14 +6705,14 @@ jest-runtime@^27.1.1: exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-haste-map "^27.1.1" - jest-message-util "^27.1.1" + jest-haste-map "^27.2.0" + jest-message-util "^27.2.0" jest-mock "^27.1.1" jest-regex-util "^27.0.6" - jest-resolve "^27.1.1" - jest-snapshot "^27.1.1" - jest-util "^27.1.1" - jest-validate "^27.1.1" + jest-resolve "^27.2.0" + jest-snapshot "^27.2.0" + jest-util "^27.2.0" + jest-validate "^27.2.0" slash "^3.0.0" strip-bom "^4.0.0" yargs "^16.0.3" @@ -6725,10 +6725,10 @@ jest-serializer@^27.0.6: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.1.1.tgz#3b816e0ca4352fbbd1db48dc692e3d9641d2531b" - integrity sha512-Wi3QGiuRFo3lU+EbQmZnBOks0CJyAMPHvYoG7iJk00Do10jeOyuOEO0Jfoaoun8+8TDv+Nzl7Aswir/IK9+1jg== +jest-snapshot@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.2.0.tgz#7961e7107ac666a46fbb23e7bb48ce0b8c6a9285" + integrity sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" @@ -6736,23 +6736,23 @@ jest-snapshot@^27.1.1: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.1.1" + "@jest/transform" "^27.2.0" "@jest/types" "^27.1.1" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.1.1" + expect "^27.2.0" graceful-fs "^4.2.4" - jest-diff "^27.1.1" + jest-diff "^27.2.0" jest-get-type "^27.0.6" - jest-haste-map "^27.1.1" - jest-matcher-utils "^27.1.1" - jest-message-util "^27.1.1" - jest-resolve "^27.1.1" - jest-util "^27.1.1" + jest-haste-map "^27.2.0" + jest-matcher-utils "^27.2.0" + jest-message-util "^27.2.0" + jest-resolve "^27.2.0" + jest-util "^27.2.0" natural-compare "^1.4.0" - pretty-format "^27.1.1" + pretty-format "^27.2.0" semver "^7.3.2" jest-util@^27.0.0, jest-util@^27.0.1: @@ -6767,10 +6767,10 @@ jest-util@^27.0.0, jest-util@^27.0.1: is-ci "^3.0.0" picomatch "^2.2.3" -jest-util@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.1.1.tgz#2b06db1391d779ec2bd406ab3690ddc56ac728b9" - integrity sha512-zf9nEbrASWn2mC/L91nNb0K+GkhFvi4MP6XJG2HqnHzHvLYcs7ou/In68xYU1i1dSkJlrWcYfWXQE8nVR+nbOA== +jest-util@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.2.0.tgz#bfccb85cfafae752257319e825a5b8d4ada470dc" + integrity sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A== dependencies: "@jest/types" "^27.1.1" "@types/node" "*" @@ -6779,17 +6779,17 @@ jest-util@^27.1.1: is-ci "^3.0.0" picomatch "^2.2.3" -jest-validate@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.1.1.tgz#0783733af02c988d503995fc0a07bbdc58c7dd50" - integrity sha512-N5Er5FKav/8m2dJwn7BGnZwnoD1BSc8jx5T+diG2OvyeugvZDhPeAt5DrNaGkkaKCrSUvuE7A5E4uHyT7Vj0Mw== +jest-validate@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.2.0.tgz#b7535f12d95dd3b4382831f4047384ca098642ab" + integrity sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ== dependencies: "@jest/types" "^27.1.1" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^27.0.6" leven "^3.1.0" - pretty-format "^27.1.1" + pretty-format "^27.2.0" jest-watch-typeahead@^0.6.1: version "0.6.4" @@ -6817,17 +6817,17 @@ jest-watcher@^27.0.0: jest-util "^27.0.1" string-length "^4.0.1" -jest-watcher@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.1.1.tgz#a8147e18703b5d753ada4b287451f2daf40f4118" - integrity sha512-XQzyHbxziDe+lZM6Dzs40fEt4q9akOGwitJnxQasJ9WG0bv3JGiRlsBgjw13znGapeMtFaEsyhL0Cl04IbaoWQ== +jest-watcher@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.2.0.tgz#dc2eef4c13c6d41cebf3f1fc5f900a54b51c2ea0" + integrity sha512-SjRWhnr+qO8aBsrcnYIyF+qRxNZk6MZH8TIDgvi+VlsyrvOyqg0d+Rm/v9KHiTtC9mGGeFi9BFqgavyWib6xLg== dependencies: - "@jest/test-result" "^27.1.1" + "@jest/test-result" "^27.2.0" "@jest/types" "^27.1.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.1.1" + jest-util "^27.2.0" string-length "^4.0.1" jest-worker@^27.0.2: @@ -6839,23 +6839,23 @@ jest-worker@^27.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.1.1.tgz#eb5f05c4657fdcb702c36c48b20d785bd4599378" - integrity sha512-XJKCL7tu+362IUYTWvw8+3S75U7qMiYiRU6u5yqscB48bTvzwN6i8L/7wVTXiFLwkRsxARNM7TISnTvcgv9hxA== +jest-worker@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.2.0.tgz#11eef39f1c88f41384ca235c2f48fe50bc229bc0" + integrity sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" jest@^27.0.3: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.1.1.tgz#49f0497fa0fb07dc78898318cc1b737b5fbf72d8" - integrity sha512-LFTEZOhoZNR/2DQM3OCaK5xC6c55c1OWhYh0njRsoHX0qd6x4nkcgenkSH0JKjsAGMTmmJAoL7/oqYHMfwhruA== + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.2.0.tgz#3bc329287d699d26361e2094919630eefdf1ac0d" + integrity sha512-oUqVXyvh5YwEWl263KWdPUAqEzBFzGHdFLQ05hUnITr1tH+9SscEI9A/GH9eBClA+Nw1ct+KNuuOV6wlnmBPcg== dependencies: - "@jest/core" "^27.1.1" + "@jest/core" "^27.2.0" import-local "^3.0.2" - jest-cli "^27.1.1" + jest-cli "^27.2.0" js-tokens@^4.0.0: version "4.0.0" @@ -8855,10 +8855,10 @@ pretty-format@^27.0.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.1.1.tgz#cbaf9ec6cd7cfc3141478b6f6293c0ccdbe968e0" - integrity sha512-zdBi/xlstKJL42UH7goQti5Hip/B415w1Mfj+WWWYMBylAYtKESnXGUtVVcMVid9ReVjypCotUV6CEevYPHv2g== +pretty-format@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.2.0.tgz#ee37a94ce2a79765791a8649ae374d468c18ef19" + integrity sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA== dependencies: "@jest/types" "^27.1.1" ansi-regex "^5.0.0" From 6679ce5200129e8e18f28533e8b3631c73e368e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Sep 2021 15:52:44 +0300 Subject: [PATCH 144/173] chore(deps): bump @discoveryjs/json-ext from 0.5.3 to 0.5.5 (#2951) Bumps [@discoveryjs/json-ext](https://github.com/discoveryjs/json-ext) from 0.5.3 to 0.5.5. - [Release notes](https://github.com/discoveryjs/json-ext/releases) - [Changelog](https://github.com/discoveryjs/json-ext/blob/master/CHANGELOG.md) - [Commits](https://github.com/discoveryjs/json-ext/compare/v0.5.3...v0.5.5) --- updated-dependencies: - dependency-name: "@discoveryjs/json-ext" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 40 +++------------------------------------- 1 file changed, 3 insertions(+), 37 deletions(-) diff --git a/yarn.lock b/yarn.lock index d4b06e1b3d6..75a61a464de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -588,9 +588,9 @@ chalk "^4.0.0" "@discoveryjs/json-ext@^0.5.0": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" - integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== + version "0.5.5" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz#9283c9ce5b289a3c4f61c12757469e59377f81f3" + integrity sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA== "@eslint/eslintrc@^0.4.3": version "0.4.3" @@ -2085,14 +2085,6 @@ "@typescript-eslint/typescript-estree" "4.31.1" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.31.0": - version "4.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.0.tgz#9be33aed4e9901db753803ba233b70d79a87fc3e" - integrity sha512-LJ+xtl34W76JMRLjbaQorhR0hfRAlp3Lscdiz9NeI/8i+q0hdBZ7BsiYieLoYWqy+AnRigaD3hUwPFugSzdocg== - dependencies: - "@typescript-eslint/types" "4.31.0" - "@typescript-eslint/visitor-keys" "4.31.0" - "@typescript-eslint/scope-manager@4.31.1": version "4.31.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.1.tgz#0c21e8501f608d6a25c842fcf59541ef4f1ab561" @@ -2101,29 +2093,11 @@ "@typescript-eslint/types" "4.31.1" "@typescript-eslint/visitor-keys" "4.31.1" -"@typescript-eslint/types@4.31.0": - version "4.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.0.tgz#9a7c86fcc1620189567dc4e46cad7efa07ee8dce" - integrity sha512-9XR5q9mk7DCXgXLS7REIVs+BaAswfdHhx91XqlJklmqWpTALGjygWVIb/UnLh4NWhfwhR5wNe1yTyCInxVhLqQ== - "@typescript-eslint/types@4.31.1": version "4.31.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.1.tgz#5f255b695627a13401d2fdba5f7138bc79450d66" integrity sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ== -"@typescript-eslint/typescript-estree@4.31.0": - version "4.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.0.tgz#4da4cb6274a7ef3b21d53f9e7147cc76f278a078" - integrity sha512-QHl2014t3ptg+xpmOSSPn5hm4mY8D4s97ftzyk9BZ8RxYQ3j73XcwuijnJ9cMa6DO4aLXeo8XS3z1omT9LA/Eg== - dependencies: - "@typescript-eslint/types" "4.31.0" - "@typescript-eslint/visitor-keys" "4.31.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.31.1": version "4.31.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz#4a04d5232cf1031232b7124a9c0310b577a62d17" @@ -2137,14 +2111,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.31.0": - version "4.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.0.tgz#4e87b7761cb4e0e627dc2047021aa693fc76ea2b" - integrity sha512-HUcRp2a9I+P21+O21yu3ezv3GEPGjyGiXoEUQwZXjR8UxRApGeLyWH4ZIIUSalE28aG4YsV6GjtaAVB3QKOu0w== - dependencies: - "@typescript-eslint/types" "4.31.0" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.31.1": version "4.31.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz#f2e7a14c7f20c4ae07d7fc3c5878c4441a1da9cc" From c9affb180b12bfd6222518c138714f776fa4a349 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Sep 2021 11:14:23 +0530 Subject: [PATCH 145/173] chore(deps-dev): bump prettier from 2.4.0 to 2.4.1 (#2953) Bumps [prettier](https://github.com/prettier/prettier) from 2.4.0 to 2.4.1. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/2.4.0...2.4.1) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 75a61a464de..62f30c0b918 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8792,9 +8792,9 @@ prepend-http@^1.0.1: integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= prettier@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.0.tgz#85bdfe0f70c3e777cf13a4ffff39713ca6f64cba" - integrity sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ== + version "2.4.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" + integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== pretty-bytes@^5.2.0: version "5.6.0" From 2e8d5c8ba7be1f21b62a37ec6f0c6e68e64bf6ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Sep 2021 13:19:58 +0530 Subject: [PATCH 146/173] chore(deps-dev): bump webpack from 5.52.1 to 5.53.0 (#2954) Bumps [webpack](https://github.com/webpack/webpack) from 5.52.1 to 5.53.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.52.1...v5.53.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 62f30c0b918..5b408ce624a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11003,9 +11003,9 @@ webpack-sources@^3.2.0: integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== webpack@^5.45.1: - version "5.52.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.52.1.tgz#2dc1d9029ecb7acfb80da7bf67baab67baa517a7" - integrity sha512-wkGb0hLfrS7ML3n2xIKfUIwHbjB6gxwQHyLmVHoAqEQBw+nWo+G6LoHL098FEXqahqximsntjBLuewStrnJk0g== + version "5.53.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.53.0.tgz#f463cd9c6fc1356ae4b9b7ac911fd1f5b2df86af" + integrity sha512-RZ1Z3z3ni44snoWjfWeHFyzvd9HMVYDYC5VXmlYUT6NWgEOWdCNpad5Fve2CzzHoRED7WtsKe+FCyP5Vk4pWiQ== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" From 3813e7ae22b22be63c84d530072073254bc2104a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Sep 2021 14:04:58 +0300 Subject: [PATCH 147/173] chore(deps-dev): bump coffeescript from 2.5.1 to 2.6.0 (#2957) Bumps [coffeescript](https://github.com/jashkenas/coffeescript) from 2.5.1 to 2.6.0. - [Release notes](https://github.com/jashkenas/coffeescript/releases) - [Commits](https://github.com/jashkenas/coffeescript/compare/2.5.1...2.6.0) --- updated-dependencies: - dependency-name: coffeescript dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5b408ce624a..81e4ee5c4bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3315,9 +3315,9 @@ code-point-at@^1.0.0: integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= coffeescript@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.5.1.tgz#b2442a1f2c806139669534a54adc35010559d16a" - integrity sha512-J2jRPX0eeFh5VKyVnoLrfVFgLZtnnmp96WQSLAS8OrLm2wtQLcnikYKe1gViJKDH7vucjuhHvBKKBP3rKcD1tQ== + version "2.6.0" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.6.0.tgz#927d52aa03df17d445c93c1afb66b081d26e1fa0" + integrity sha512-gCGXhR72sTAdEr+oZh3FcOj04DrcMc9lZYSJUBNudkQ4tQXuPKE3cvcYVbK/HiVW+zFzLmnZdHexuJ33ufLZOg== collect-v8-coverage@^1.0.0: version "1.0.1" From 5123f8ae1d8fe4457815973af3b810a3778030ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Sep 2021 10:01:55 +0300 Subject: [PATCH 148/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin (#2958) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 4.31.1 to 4.31.2. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.31.2/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 58 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index 81e4ee5c4bd..5528447ac34 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2051,27 +2051,27 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.31.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.1.tgz#e938603a136f01dcabeece069da5fb2e331d4498" - integrity sha512-UDqhWmd5i0TvPLmbK5xY3UZB0zEGseF+DHPghZ37Sb83Qd3p8ujhvAtkU4OF46Ka5Pm5kWvFIx0cCTBFKo0alA== + version "4.31.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.2.tgz#9f41efaee32cdab7ace94b15bd19b756dd099b0a" + integrity sha512-w63SCQ4bIwWN/+3FxzpnWrDjQRXVEGiTt9tJTRptRXeFvdZc/wLiz3FQUwNQ2CVoRGI6KUWMNUj/pk63noUfcA== dependencies: - "@typescript-eslint/experimental-utils" "4.31.1" - "@typescript-eslint/scope-manager" "4.31.1" + "@typescript-eslint/experimental-utils" "4.31.2" + "@typescript-eslint/scope-manager" "4.31.2" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.31.1": - version "4.31.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.1.tgz#0c900f832f270b88e13e51753647b02d08371ce5" - integrity sha512-NtoPsqmcSsWty0mcL5nTZXMf7Ei0Xr2MT8jWjXMVgRK0/1qeQ2jZzLFUh4QtyJ4+/lPUyMw5cSfeeME+Zrtp9Q== +"@typescript-eslint/experimental-utils@4.31.2": + version "4.31.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.2.tgz#98727a9c1e977dd5d20c8705e69cd3c2a86553fa" + integrity sha512-3tm2T4nyA970yQ6R3JZV9l0yilE2FedYg8dcXrTar34zC9r6JB7WyBQbpIVongKPlhEMjhQ01qkwrzWy38Bk1Q== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.31.1" - "@typescript-eslint/types" "4.31.1" - "@typescript-eslint/typescript-estree" "4.31.1" + "@typescript-eslint/scope-manager" "4.31.2" + "@typescript-eslint/types" "4.31.2" + "@typescript-eslint/typescript-estree" "4.31.2" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -2093,11 +2093,24 @@ "@typescript-eslint/types" "4.31.1" "@typescript-eslint/visitor-keys" "4.31.1" +"@typescript-eslint/scope-manager@4.31.2": + version "4.31.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.2.tgz#1d528cb3ed3bcd88019c20a57c18b897b073923a" + integrity sha512-2JGwudpFoR/3Czq6mPpE8zBPYdHWFGL6lUNIGolbKQeSNv4EAiHaR5GVDQaLA0FwgcdcMtRk+SBJbFGL7+La5w== + dependencies: + "@typescript-eslint/types" "4.31.2" + "@typescript-eslint/visitor-keys" "4.31.2" + "@typescript-eslint/types@4.31.1": version "4.31.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.1.tgz#5f255b695627a13401d2fdba5f7138bc79450d66" integrity sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ== +"@typescript-eslint/types@4.31.2": + version "4.31.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.2.tgz#2aea7177d6d744521a168ed4668eddbd912dfadf" + integrity sha512-kWiTTBCTKEdBGrZKwFvOlGNcAsKGJSBc8xLvSjSppFO88AqGxGNYtF36EuEYG6XZ9vT0xX8RNiHbQUKglbSi1w== + "@typescript-eslint/typescript-estree@4.31.1": version "4.31.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz#4a04d5232cf1031232b7124a9c0310b577a62d17" @@ -2111,6 +2124,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.31.2": + version "4.31.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.2.tgz#abfd50594d8056b37e7428df3b2d185ef2d0060c" + integrity sha512-ieBq8U9at6PvaC7/Z6oe8D3czeW5d//Fo1xkF/s9394VR0bg/UaMYPdARiWyKX+lLEjY3w/FNZJxitMsiWv+wA== + dependencies: + "@typescript-eslint/types" "4.31.2" + "@typescript-eslint/visitor-keys" "4.31.2" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.31.1": version "4.31.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz#f2e7a14c7f20c4ae07d7fc3c5878c4441a1da9cc" @@ -2119,6 +2145,14 @@ "@typescript-eslint/types" "4.31.1" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.31.2": + version "4.31.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.2.tgz#7d5b4a4705db7fe59ecffb273c1d082760f635cc" + integrity sha512-PrBId7EQq2Nibns7dd/ch6S6/M4/iwLM9McbgeEbCXfxdwRUNxJ4UNreJ6Gh3fI2GNKNrWnQxKL7oCPmngKBug== + dependencies: + "@typescript-eslint/types" "4.31.2" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From 51367daf1e720845f4362429107539d6518de58a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Sep 2021 10:07:06 +0300 Subject: [PATCH 149/173] chore(deps-dev): bump jest from 27.2.0 to 27.2.1 (#2960) Bumps [jest](https://github.com/facebook/jest) from 27.2.0 to 27.2.1. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/compare/v27.2.0...v27.2.1) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 194 +++++++++++++++++++++++++++--------------------------- 1 file changed, 97 insertions(+), 97 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5528447ac34..d957e90c054 100644 --- a/yarn.lock +++ b/yarn.lock @@ -661,15 +661,15 @@ jest-util "^27.2.0" slash "^3.0.0" -"@jest/core@^27.2.0": - version "27.2.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.2.0.tgz#61fc27b244e9709170ed9ffe41b006add569f1b3" - integrity sha512-E/2NHhq+VMo18DpKkoty8Sjey8Kps5Cqa88A8NP757s6JjYqPdioMuyUBhDiIOGCdQByEp0ou3jskkTszMS0nw== +"@jest/core@^27.2.1": + version "27.2.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.2.1.tgz#93dc50e2aaba2c944e5765cf658dcd98d804c970" + integrity sha512-XcGt9UgPyzylThvezwUIMCNVp8xxN78Ic3WwhJZehZt4n2hPHR6Bd85A1nKFZBeqW58Vd+Cx/LaN6YL4n58KlA== dependencies: "@jest/console" "^27.2.0" - "@jest/reporters" "^27.2.0" + "@jest/reporters" "^27.2.1" "@jest/test-result" "^27.2.0" - "@jest/transform" "^27.2.0" + "@jest/transform" "^27.2.1" "@jest/types" "^27.1.1" "@types/node" "*" ansi-escapes "^4.2.1" @@ -678,15 +678,15 @@ exit "^0.1.2" graceful-fs "^4.2.4" jest-changed-files "^27.1.1" - jest-config "^27.2.0" + jest-config "^27.2.1" jest-haste-map "^27.2.0" jest-message-util "^27.2.0" jest-regex-util "^27.0.6" jest-resolve "^27.2.0" - jest-resolve-dependencies "^27.2.0" - jest-runner "^27.2.0" - jest-runtime "^27.2.0" - jest-snapshot "^27.2.0" + jest-resolve-dependencies "^27.2.1" + jest-runner "^27.2.1" + jest-runtime "^27.2.1" + jest-snapshot "^27.2.1" jest-util "^27.2.0" jest-validate "^27.2.0" jest-watcher "^27.2.0" @@ -718,24 +718,24 @@ jest-mock "^27.1.1" jest-util "^27.2.0" -"@jest/globals@^27.2.0": - version "27.2.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.2.0.tgz#4d7085f51df5ac70c8240eb3501289676503933d" - integrity sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg== +"@jest/globals@^27.2.1": + version "27.2.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.2.1.tgz#6842c70b6713fbe2fcaf89eac20d77eeeb0e282c" + integrity sha512-4P46Zr4cckSitsWtOMRvgMMn7mOKbBsQdYxHeGSIG3kpI4gNR2vk51balPulZHnBQCQb/XBptprtoSv1REfaew== dependencies: "@jest/environment" "^27.2.0" "@jest/types" "^27.1.1" - expect "^27.2.0" + expect "^27.2.1" -"@jest/reporters@^27.2.0": - version "27.2.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.2.0.tgz#629886d9a42218e504a424889a293abb27919e25" - integrity sha512-7wfkE3iRTLaT0F51h1mnxH3nQVwDCdbfgXiLuCcNkF1FnxXLH9utHqkSLIiwOTV1AtmiE0YagHbOvx4rnMP/GA== +"@jest/reporters@^27.2.1": + version "27.2.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.2.1.tgz#2e43361b962e26975d40eafd7b4f14c70b4fe9a0" + integrity sha512-ILqR+bIIBlhaHjDtQR/0Z20YkKAQVM+NVRuJLaWFCoRx/rKQQSxG01ZLiLV0MsA6wkBHf6J9fzFuXp0k5l7epw== dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^27.2.0" "@jest/test-result" "^27.2.0" - "@jest/transform" "^27.2.0" + "@jest/transform" "^27.2.1" "@jest/types" "^27.1.1" chalk "^4.0.0" collect-v8-coverage "^1.0.0" @@ -786,20 +786,20 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.2.0": - version "27.2.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.2.0.tgz#b02b507687825af2fdc84e90c539d36fd8cf7bc9" - integrity sha512-PrqarcpzOU1KSAK7aPwfL8nnpaqTMwPe7JBPnaOYRDSe/C6AoJiL5Kbnonqf1+DregxZIRAoDg69R9/DXMGqXA== +"@jest/test-sequencer@^27.2.1": + version "27.2.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.2.1.tgz#1682cd3a16198fa358ff9565b0d2792919f36562" + integrity sha512-fWcEgWQXgvU4DFY5YHfQsGwqfJWyuCUzdOzLZTYtyLB3WK1mFPQGYAszM7mCEZjyVon5XRuCa+2/+hif/uMucQ== dependencies: "@jest/test-result" "^27.2.0" graceful-fs "^4.2.4" jest-haste-map "^27.2.0" - jest-runtime "^27.2.0" + jest-runtime "^27.2.1" -"@jest/transform@^27.2.0": - version "27.2.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.2.0.tgz#e7e6e49d2591792db2385c33cdbb4379d407068d" - integrity sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg== +"@jest/transform@^27.2.1": + version "27.2.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.2.1.tgz#743443adb84b3b7419951fc702515ce20ba6285e" + integrity sha512-xmB5vh81KK8DiiCMtI5vI59mP+GggNmc9BiN+fg4mKdQHV369+WuZc1Lq2xWFCOCsRPHt24D9h7Idp4YaMB1Ww== dependencies: "@babel/core" "^7.1.0" "@jest/types" "^27.1.1" @@ -2735,12 +2735,12 @@ 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@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.2.0.tgz#c0f129a81f1197028aeb4447acbc04564c8bfc52" - integrity sha512-bS2p+KGGVVmWXBa8+i6SO/xzpiz2Q/2LnqLbQknPKefWXVZ67YIjA4iXup/jMOEZplga9PpWn+wrdb3UdDwRaA== +babel-jest@^27.2.1: + version "27.2.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.2.1.tgz#48edfa5cf8d59ab293da94321a369ccc7b67a4b1" + integrity sha512-kkaekSJHew1zfDW3cA2QiSBPg4uiLpiW0OwJKqFv0r2/mFgym/IBn7hxPntL6FvS66G/ROh+lz4pRiCJAH1/UQ== dependencies: - "@jest/transform" "^27.2.0" + "@jest/transform" "^27.2.1" "@jest/types" "^27.1.1" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.0.0" @@ -4559,10 +4559,10 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.2.0.tgz#40eb89a492afb726a3929ccf3611ee0799ab976f" - integrity sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ== +expect@^27.2.1: + version "27.2.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.2.1.tgz#5f882b308716618613f0106a488b46c303908157" + integrity sha512-ekOA2mBtT2phxcoPVHCXIzbJxCvRXhx2fr7m28IgGdZxUOh8UvxvoRz1FcPlfgZMpE92biHB6woIcAKXqR28hA== dependencies: "@jest/types" "^27.1.1" ansi-styles "^5.0.0" @@ -6373,10 +6373,10 @@ jest-changed-files@^27.1.1: execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.2.0.tgz#ad0d6d75514050f539d422bae41344224d2328f9" - integrity sha512-WwENhaZwOARB1nmcboYPSv/PwHBUGRpA4MEgszjr9DLCl97MYw0qZprBwLb7rNzvMwfIvNGG7pefQ5rxyBlzIA== +jest-circus@^27.2.1: + version "27.2.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.2.1.tgz#c5166052b328c0df932cdaf89f5982085e7b4812" + integrity sha512-9q/8X8DgJmW8IqXsJNnS2E28iarx990hf6D+frS3P0lB+avhFDD33alLwZzKgm45u0wvEi6iFh43WjNbp5fhjw== dependencies: "@jest/environment" "^27.2.0" "@jest/test-result" "^27.2.0" @@ -6385,59 +6385,59 @@ jest-circus@^27.2.0: chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" - expect "^27.2.0" + expect "^27.2.1" is-generator-fn "^2.0.0" jest-each "^27.2.0" jest-matcher-utils "^27.2.0" jest-message-util "^27.2.0" - jest-runtime "^27.2.0" - jest-snapshot "^27.2.0" + jest-runtime "^27.2.1" + jest-snapshot "^27.2.1" jest-util "^27.2.0" pretty-format "^27.2.0" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.2.0.tgz#6da5ecca5bd757e20449f5ec1f1cad5b0303d16b" - integrity sha512-bq1X/B/b1kT9y1zIFMEW3GFRX1HEhFybiqKdbxM+j11XMMYSbU9WezfyWIhrSOmPT+iODLATVjfsCnbQs7cfIA== +jest-cli@^27.2.1: + version "27.2.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.2.1.tgz#031e887245945864cc6ed8605c939f1937858c09" + integrity sha512-IfxuGkBZS/ogY7yFvvD1dFidzQRXlSBHtUZQ3UTIHydzNMF4/ZRTdGFso6HkbCkemwLh4hnNybONexEqWmYwjw== dependencies: - "@jest/core" "^27.2.0" + "@jest/core" "^27.2.1" "@jest/test-result" "^27.2.0" "@jest/types" "^27.1.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" - jest-config "^27.2.0" + jest-config "^27.2.1" jest-util "^27.2.0" jest-validate "^27.2.0" prompts "^2.0.1" yargs "^16.0.3" -jest-config@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.2.0.tgz#d1c359253927005c53d11ab3e50d3b2f402a673a" - integrity sha512-Z1romHpxeNwLxQtouQ4xt07bY6HSFGKTo0xJcvOK3u6uJHveA4LB2P+ty9ArBLpTh3AqqPxsyw9l9GMnWBYS9A== +jest-config@^27.2.1: + version "27.2.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.2.1.tgz#2e727e023fc4b77a9f067a40c5448a939aa8386b" + integrity sha512-BAOemP8udmFw9nkgaLAac7vXORdvrt4yrJWoh7uYb0nPZeSsu0kGwJU18SwtY4paq9fed5OgAssC3A+Bf4WMQA== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^27.2.0" + "@jest/test-sequencer" "^27.2.1" "@jest/types" "^27.1.1" - babel-jest "^27.2.0" + babel-jest "^27.2.1" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" is-ci "^3.0.0" - jest-circus "^27.2.0" + jest-circus "^27.2.1" jest-environment-jsdom "^27.2.0" jest-environment-node "^27.2.0" jest-get-type "^27.0.6" - jest-jasmine2 "^27.2.0" + jest-jasmine2 "^27.2.1" jest-regex-util "^27.0.6" jest-resolve "^27.2.0" - jest-runner "^27.2.0" + jest-runner "^27.2.1" jest-util "^27.2.0" jest-validate "^27.2.0" micromatch "^4.0.4" @@ -6536,10 +6536,10 @@ jest-haste-map@^27.2.0: optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.2.0.tgz#1ece0ee37c348b59ed3dfcfe509fc24e3377b12d" - integrity sha512-NcPzZBk6IkDW3Z2V8orGueheGJJYfT5P0zI/vTO/Jp+R9KluUdgFrgwfvZ0A34Kw6HKgiWFILZmh3oQ/eS+UxA== +jest-jasmine2@^27.2.1: + version "27.2.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.2.1.tgz#30ee71f38670a621ecf3b6dcb89875933f780de6" + integrity sha512-3vytj3+S49+XYsxGJyjlchDo4xblYzjDY4XK7pV2IAdspbMFOpmeNMOeDonYuvlbUtcV8yrFLA6XtliXapDmMA== dependencies: "@babel/traverse" "^7.1.0" "@jest/environment" "^27.2.0" @@ -6549,13 +6549,13 @@ jest-jasmine2@^27.2.0: "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^27.2.0" + expect "^27.2.1" is-generator-fn "^2.0.0" jest-each "^27.2.0" jest-matcher-utils "^27.2.0" jest-message-util "^27.2.0" - jest-runtime "^27.2.0" - jest-snapshot "^27.2.0" + jest-runtime "^27.2.1" + jest-snapshot "^27.2.1" jest-util "^27.2.0" pretty-format "^27.2.0" throat "^6.0.1" @@ -6631,14 +6631,14 @@ jest-regex-util@^27.0.6: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5" integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ== -jest-resolve-dependencies@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.0.tgz#b56a1aab95b0fd21e0a69a15fda985c05f902b8a" - integrity sha512-EY5jc/Y0oxn+oVEEldTidmmdVoZaknKPyDORA012JUdqPyqPL+lNdRyI3pGti0RCydds6coaw6xt4JQY54dKsg== +jest-resolve-dependencies@^27.2.1: + version "27.2.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.1.tgz#239be969ece749d4dc2e1efcf3d2b86c99525c2e" + integrity sha512-9bKEwmz4YshGPjGZAVZOVw6jt7pq2/FjWJmyhnWhvDuiRCHVZBcJhycinX+e/EJ7jafsq26bTpzBIQas3xql1g== dependencies: "@jest/types" "^27.1.1" jest-regex-util "^27.0.6" - jest-snapshot "^27.2.0" + jest-snapshot "^27.2.1" jest-resolve@^27.2.0: version "27.2.0" @@ -6656,15 +6656,15 @@ jest-resolve@^27.2.0: resolve "^1.20.0" slash "^3.0.0" -jest-runner@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.2.0.tgz#281b255d88a473aebc0b5cb46e58a83a1251cab3" - integrity sha512-Cl+BHpduIc0cIVTjwoyx0pQk4Br8gn+wkr35PmKCmzEdOUnQ2wN7QVXA8vXnMQXSlFkN/+KWnk20TAVBmhgrww== +jest-runner@^27.2.1: + version "27.2.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.2.1.tgz#3443b1fc08b8a50f305dfc2d41dd2badf335843b" + integrity sha512-USHitkUUzcB3Y5mRdzlp+KHgRRR2VsXDq5OeATuDmq1qXfT/RwwnQykUhn+KVx3FotxK3pID74UY7o6HYIR8vA== dependencies: "@jest/console" "^27.2.0" "@jest/environment" "^27.2.0" "@jest/test-result" "^27.2.0" - "@jest/transform" "^27.2.0" + "@jest/transform" "^27.2.1" "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" @@ -6678,24 +6678,24 @@ jest-runner@^27.2.0: jest-leak-detector "^27.2.0" jest-message-util "^27.2.0" jest-resolve "^27.2.0" - jest-runtime "^27.2.0" + jest-runtime "^27.2.1" jest-util "^27.2.0" jest-worker "^27.2.0" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.2.0.tgz#998295ccd80008b3031eeb5cc60e801e8551024b" - integrity sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ== +jest-runtime@^27.2.1: + version "27.2.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.2.1.tgz#db506f679356f5b94b7be20e770f2541b7c2b339" + integrity sha512-QJNnwL4iteDE/Jq4TfQK7AjhPoUZflBKTtUIkRnFYFkTAZTP/o8k7ekaROiVjmo+NYop5+DQPqX6pz4vWbZSOQ== dependencies: "@jest/console" "^27.2.0" "@jest/environment" "^27.2.0" "@jest/fake-timers" "^27.2.0" - "@jest/globals" "^27.2.0" + "@jest/globals" "^27.2.1" "@jest/source-map" "^27.0.6" "@jest/test-result" "^27.2.0" - "@jest/transform" "^27.2.0" + "@jest/transform" "^27.2.1" "@jest/types" "^27.1.1" "@types/yargs" "^16.0.0" chalk "^4.0.0" @@ -6710,7 +6710,7 @@ jest-runtime@^27.2.0: jest-mock "^27.1.1" jest-regex-util "^27.0.6" jest-resolve "^27.2.0" - jest-snapshot "^27.2.0" + jest-snapshot "^27.2.1" jest-util "^27.2.0" jest-validate "^27.2.0" slash "^3.0.0" @@ -6725,10 +6725,10 @@ jest-serializer@^27.0.6: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.2.0.tgz#7961e7107ac666a46fbb23e7bb48ce0b8c6a9285" - integrity sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ== +jest-snapshot@^27.2.1: + version "27.2.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.2.1.tgz#385accf3bb71ac84e9a6bda4fc9bb458d53abb35" + integrity sha512-8CTg2YrgZuQbPHW7G0YvLTj4yTRXLmSeEO+ka3eC5lbu5dsTRyoDNS1L7x7EFUTyYQhFH9HQG1/TNlbUgR9Lug== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" @@ -6736,13 +6736,13 @@ jest-snapshot@^27.2.0: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.2.0" + "@jest/transform" "^27.2.1" "@jest/types" "^27.1.1" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.2.0" + expect "^27.2.1" graceful-fs "^4.2.4" jest-diff "^27.2.0" jest-get-type "^27.0.6" @@ -6849,13 +6849,13 @@ jest-worker@^27.2.0: supports-color "^8.0.0" jest@^27.0.3: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.2.0.tgz#3bc329287d699d26361e2094919630eefdf1ac0d" - integrity sha512-oUqVXyvh5YwEWl263KWdPUAqEzBFzGHdFLQ05hUnITr1tH+9SscEI9A/GH9eBClA+Nw1ct+KNuuOV6wlnmBPcg== + version "27.2.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.2.1.tgz#9263102056fe152fd2478d181cf9bbbd2a6a8da4" + integrity sha512-0MyvNS7J1HbkeotYaqKNGioN+p1/AAPtI1Z8iwMtCBE+PwBT+M4l25D9Pve8/KdhktYLgZaGyyj9CoDytD+R2Q== dependencies: - "@jest/core" "^27.2.0" + "@jest/core" "^27.2.1" import-local "^3.0.2" - jest-cli "^27.2.0" + jest-cli "^27.2.1" js-tokens@^4.0.0: version "4.0.0" From c8888612dd871c4a4f69400793375c0cfad0a51c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Sep 2021 10:11:29 +0300 Subject: [PATCH 150/173] chore(deps-dev): bump @typescript-eslint/parser from 4.31.1 to 4.31.2 (#2959) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.31.1 to 4.31.2. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.31.2/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index d957e90c054..93f35d6026f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2076,13 +2076,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.31.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.1.tgz#8f9a2672033e6f6d33b1c0260eebdc0ddf539064" - integrity sha512-dnVZDB6FhpIby6yVbHkwTKkn2ypjVIfAR9nh+kYsA/ZL0JlTsd22BiDjouotisY3Irmd3OW1qlk9EI5R8GrvRQ== + version "4.31.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.2.tgz#54aa75986e3302d91eff2bbbaa6ecfa8084e9c34" + integrity sha512-EcdO0E7M/sv23S/rLvenHkb58l3XhuSZzKf6DBvLgHqOYdL6YFMYVtreGFWirxaU2mS1GYDby3Lyxco7X5+Vjw== dependencies: - "@typescript-eslint/scope-manager" "4.31.1" - "@typescript-eslint/types" "4.31.1" - "@typescript-eslint/typescript-estree" "4.31.1" + "@typescript-eslint/scope-manager" "4.31.2" + "@typescript-eslint/types" "4.31.2" + "@typescript-eslint/typescript-estree" "4.31.2" debug "^4.3.1" "@typescript-eslint/scope-manager@4.31.1": From da135dd717e88b6aa9a0559c1e4e8acb4ee8f3c1 Mon Sep 17 00:00:00 2001 From: "Henry Q. Dineen" Date: Tue, 21 Sep 2021 20:23:49 -0400 Subject: [PATCH 151/173] fix: allow falsy values for `port` option (#2962) `webpack-dev-server@3` allows using `null` or `0` to automatically use a free port. --- packages/serve/src/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/serve/src/index.ts b/packages/serve/src/index.ts index 3f9e0d3d326..e1aa7c4dec1 100644 --- a/packages/serve/src/index.ts +++ b/packages/serve/src/index.ts @@ -296,7 +296,8 @@ class ServeCommand { }; devServerOptions.host = devServerOptions.host || "localhost"; - devServerOptions.port = devServerOptions.port || 8080; + devServerOptions.port = + typeof devServerOptions.port !== "undefined" ? devServerOptions.port : 8080; devServerOptions.stats = getStatsOption(); devServerOptions.publicPath = getPublicPathOption(); } From c8db7d535b6b26505b9700293b5b741178badea7 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Wed, 22 Sep 2021 16:57:35 +0530 Subject: [PATCH 152/173] refactor: config tests (#2939) * fix: absent config test * chore: basic config description * chore: update default js config test * chore: update dot webpack config test * chore: update dot webpack webpackfile test * chore: fix description of cjs config * chore: update mjs config * chore: default config with mode * chore: fix empty test * chore: update empty array * chore: update empty function descriptions * chore: update empty promise * chore: update config array error * chore: update no config * chore: update invalid path file * chore: update config error test * chore: fix funtional config test * chore: invalid export * chore: update multiple config test * chore: update config test * chore: update no code test * chore: update no config array test * chore: update no config object test --- test/build/config/absent/config-absent.test.js | 4 ++-- test/build/config/absent/webpack.config-absent.js | 9 --------- test/build/config/basic/basic-config.test.js | 2 +- .../defaults/basic-config/default-js-config.test.js | 4 ++-- .../defaults/cjs-config/default-cjs-config.test.js | 4 ++-- ...on-config.test.js => dot-webpack-webpackfile.test.js} | 4 ++-- ...ev-none-config.test.js => dot-webpack-config.test.js} | 4 ++-- .../defaults/mjs-config/default-mjs-config.test.js | 4 ++-- ...e-config.test.js => default-config-with-mode.test.js} | 4 ++-- test/build/config/empty-array/empty-array.test.js | 4 ++-- test/build/config/empty-function/empty-function.test.js | 4 ++-- test/build/config/empty-promise/empty-promise.test.js | 4 ++-- test/build/config/empty/empty.test.js | 2 +- test/build/config/error-array/config-array-error.test.js | 2 +- test/build/config/error-commonjs/config-error.test.js | 2 +- test/build/config/function/functional-config.test.js | 4 ++-- test/build/config/invalid-export/invalid-export.test.js | 4 ++-- test/build/config/invalid-path/a.js | 1 - test/build/config/invalid-path/invalid-path.test.js | 4 ++-- test/build/config/invalid-path/webpack.config.js | 9 --------- .../multiple-with-one-compilation.test.js | 4 ++-- test/build/config/multiple/multiple-config.test.js | 4 ++-- test/build/config/no-code/no-code.test.js | 2 +- .../build/config/no-config-array/no-config-array.test.js | 4 ++-- .../config/no-config-object/no-config-object.test.js | 2 +- 25 files changed, 38 insertions(+), 57 deletions(-) delete mode 100644 test/build/config/absent/webpack.config-absent.js rename test/build/config/defaults/dot-webpack-directory-webpackfile/{multiple-location-config.test.js => dot-webpack-webpackfile.test.js} (76%) rename test/build/config/defaults/dot-webpack-directory/{dev-none-config.test.js => dot-webpack-config.test.js} (74%) rename test/build/config/defaults/with-mode/{multiple-config.test.js => default-config-with-mode.test.js} (75%) delete mode 100644 test/build/config/invalid-path/a.js delete mode 100644 test/build/config/invalid-path/webpack.config.js diff --git a/test/build/config/absent/config-absent.test.js b/test/build/config/absent/config-absent.test.js index d79d5f7ddfe..11887430263 100644 --- a/test/build/config/absent/config-absent.test.js +++ b/test/build/config/absent/config-absent.test.js @@ -3,8 +3,8 @@ const path = require("path"); const { run } = require("../../../utils/test-utils"); -describe("Config:", () => { - it("supplied config file is absent", async () => { +describe("config flag with non existent file", () => { + it("should throw error with non-existent configuration file", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "-c", path.resolve(__dirname, "webpack.config.js"), diff --git a/test/build/config/absent/webpack.config-absent.js b/test/build/config/absent/webpack.config-absent.js deleted file mode 100644 index 9043cafbd4b..00000000000 --- a/test/build/config/absent/webpack.config-absent.js +++ /dev/null @@ -1,9 +0,0 @@ -const { resolve } = require("path"); - -module.exports = { - entry: "./a.js", - output: { - path: resolve(__dirname, "binary"), - filename: "a.bundle.js", - }, -}; diff --git a/test/build/config/basic/basic-config.test.js b/test/build/config/basic/basic-config.test.js index 180041bdce4..0b294f2466d 100644 --- a/test/build/config/basic/basic-config.test.js +++ b/test/build/config/basic/basic-config.test.js @@ -4,7 +4,7 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("basic config file", () => { - it("is able to understand and parse a very basic configuration file", async () => { + it("should build and not throw error with a basic configuration file", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "-c", resolve(__dirname, "webpack.config.js"), diff --git a/test/build/config/defaults/basic-config/default-js-config.test.js b/test/build/config/defaults/basic-config/default-js-config.test.js index 012e50e97a4..6450af39762 100644 --- a/test/build/config/defaults/basic-config/default-js-config.test.js +++ b/test/build/config/defaults/basic-config/default-js-config.test.js @@ -2,8 +2,8 @@ const fs = require("fs"); const path = require("path"); const { run, isWebpack5 } = require("../../../../utils/test-utils"); -describe("Zero Config", () => { - it("runs when config is present but not supplied via flag", async () => { +describe("default config", () => { + it("should build and not throw error when config is present but not supplied via flag", async () => { const { exitCode, stderr, stdout } = await run(__dirname, []); expect(exitCode).toEqual(0); diff --git a/test/build/config/defaults/cjs-config/default-cjs-config.test.js b/test/build/config/defaults/cjs-config/default-cjs-config.test.js index 80ff2007dc0..378bfeffb64 100644 --- a/test/build/config/defaults/cjs-config/default-cjs-config.test.js +++ b/test/build/config/defaults/cjs-config/default-cjs-config.test.js @@ -2,8 +2,8 @@ const fs = require("fs"); const path = require("path"); const { run, isWebpack5 } = require("../../../../utils/test-utils"); -describe("Default Config:", () => { - it("Should be able to pick cjs config by default", async () => { +describe("default config with cjs extention", () => { + it("should build and not throw error with cjs config by default", async () => { const { exitCode, stderr, stdout } = await run(__dirname, []); expect(exitCode).toEqual(0); diff --git a/test/build/config/defaults/dot-webpack-directory-webpackfile/multiple-location-config.test.js b/test/build/config/defaults/dot-webpack-directory-webpackfile/dot-webpack-webpackfile.test.js similarity index 76% rename from test/build/config/defaults/dot-webpack-directory-webpackfile/multiple-location-config.test.js rename to test/build/config/defaults/dot-webpack-directory-webpackfile/dot-webpack-webpackfile.test.js index 9a4960a5928..267c53daea9 100644 --- a/test/build/config/defaults/dot-webpack-directory-webpackfile/multiple-location-config.test.js +++ b/test/build/config/defaults/dot-webpack-directory-webpackfile/dot-webpack-webpackfile.test.js @@ -3,8 +3,8 @@ const { existsSync } = require("fs"); const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); -describe("multiple dev config files with webpack.config.js", () => { - it("Uses webpack.config.development.js", async () => { +describe(".webpack webpackfile", () => { + it("should build and not throw with .webpack webpackfile", async () => { const { stdout, stderr, exitCode } = await run(__dirname, []); expect(exitCode).toEqual(0); expect(stderr).toBeFalsy(); diff --git a/test/build/config/defaults/dot-webpack-directory/dev-none-config.test.js b/test/build/config/defaults/dot-webpack-directory/dot-webpack-config.test.js similarity index 74% rename from test/build/config/defaults/dot-webpack-directory/dev-none-config.test.js rename to test/build/config/defaults/dot-webpack-directory/dot-webpack-config.test.js index 466ba729d2e..0b210a6d268 100644 --- a/test/build/config/defaults/dot-webpack-directory/dev-none-config.test.js +++ b/test/build/config/defaults/dot-webpack-directory/dot-webpack-config.test.js @@ -3,8 +3,8 @@ const { existsSync } = require("fs"); const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); -describe("multiple config files", () => { - it("Uses dev config when both dev and none are present", async () => { +describe(".webpack configuration file", () => { + it("should build and not throw error when config is present in .webpack", async () => { const { stdout, stderr, exitCode } = await run(__dirname, []); expect(exitCode).toEqual(0); expect(stderr).toBeFalsy(); diff --git a/test/build/config/defaults/mjs-config/default-mjs-config.test.js b/test/build/config/defaults/mjs-config/default-mjs-config.test.js index 1b73a13983d..44c37388349 100644 --- a/test/build/config/defaults/mjs-config/default-mjs-config.test.js +++ b/test/build/config/defaults/mjs-config/default-mjs-config.test.js @@ -2,8 +2,8 @@ const fs = require("fs"); const path = require("path"); const { run, isWebpack5 } = require("../../../../utils/test-utils"); -describe("Default Config:", () => { - it("Should be able to pick mjs config by default", async () => { +describe("default config with mjs extention", () => { + it("should build and not throw error with mjs config by default", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [], { env: { WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG: true }, }); diff --git a/test/build/config/defaults/with-mode/multiple-config.test.js b/test/build/config/defaults/with-mode/default-config-with-mode.test.js similarity index 75% rename from test/build/config/defaults/with-mode/multiple-config.test.js rename to test/build/config/defaults/with-mode/default-config-with-mode.test.js index 189ca39770b..e93b2912638 100644 --- a/test/build/config/defaults/with-mode/multiple-config.test.js +++ b/test/build/config/defaults/with-mode/default-config-with-mode.test.js @@ -3,8 +3,8 @@ const { existsSync } = require("fs"); const { resolve } = require("path"); const { run } = require("../../../../utils/test-utils"); -describe("multiple config files", () => { - it("Uses dev config when development mode is supplied", async () => { +describe("default config with mode from cli", () => { + it("should build and not throw error with development mode supplied", async () => { const { stdout, stderr, exitCode } = await run(__dirname, ["--mode", "development"]); expect(exitCode).toEqual(0); expect(stderr).toBeFalsy(); diff --git a/test/build/config/empty-array/empty-array.test.js b/test/build/config/empty-array/empty-array.test.js index eb87fab2587..18143e32245 100644 --- a/test/build/config/empty-array/empty-array.test.js +++ b/test/build/config/empty-array/empty-array.test.js @@ -2,8 +2,8 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); -describe("config flag with empty config file", () => { - it("should throw error with no configuration or index file", async () => { +describe("config flag with config file returning empty array", () => { + it("should build and not throw error with no configuration or index file", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "-c", resolve(__dirname, "webpack.config.js"), diff --git a/test/build/config/empty-function/empty-function.test.js b/test/build/config/empty-function/empty-function.test.js index eb87fab2587..b5033346ef2 100644 --- a/test/build/config/empty-function/empty-function.test.js +++ b/test/build/config/empty-function/empty-function.test.js @@ -2,8 +2,8 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); -describe("config flag with empty config file", () => { - it("should throw error with no configuration or index file", async () => { +describe("config file with function returning empty object", () => { + it("should build and not throw error with no configuration or index file", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "-c", resolve(__dirname, "webpack.config.js"), diff --git a/test/build/config/empty-promise/empty-promise.test.js b/test/build/config/empty-promise/empty-promise.test.js index eb87fab2587..1f841389596 100644 --- a/test/build/config/empty-promise/empty-promise.test.js +++ b/test/build/config/empty-promise/empty-promise.test.js @@ -2,8 +2,8 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); -describe("config flag with empty config file", () => { - it("should throw error with no configuration or index file", async () => { +describe("config file with promise resolving empty object", () => { + it("should build and not throw error with no configuration or index file", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "-c", resolve(__dirname, "webpack.config.js"), diff --git a/test/build/config/empty/empty.test.js b/test/build/config/empty/empty.test.js index eb87fab2587..48cc8d287a3 100644 --- a/test/build/config/empty/empty.test.js +++ b/test/build/config/empty/empty.test.js @@ -3,7 +3,7 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("config flag with empty config file", () => { - it("should throw error with no configuration or index file", async () => { + it("should build and not throw error with no configuration or index file", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "-c", resolve(__dirname, "webpack.config.js"), diff --git a/test/build/config/error-array/config-array-error.test.js b/test/build/config/error-array/config-array-error.test.js index a16f4e4f507..1db01c95366 100644 --- a/test/build/config/error-array/config-array-error.test.js +++ b/test/build/config/error-array/config-array-error.test.js @@ -1,7 +1,7 @@ "use strict"; const { run } = require("../../../utils/test-utils"); -describe("array config error", () => { +describe("config with invalid array syntax", () => { it("should throw syntax error and exit with non-zero exit code when even 1 object has syntax error", async () => { const { exitCode, stderr, stdout } = await run(__dirname, ["-c", "./webpack.config.js"]); expect(exitCode).toBe(2); diff --git a/test/build/config/error-commonjs/config-error.test.js b/test/build/config/error-commonjs/config-error.test.js index e5baa11acde..4abf26ab8f1 100644 --- a/test/build/config/error-commonjs/config-error.test.js +++ b/test/build/config/error-commonjs/config-error.test.js @@ -2,7 +2,7 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); -describe("config error", () => { +describe("config with errors", () => { it("should throw error with invalid configuration", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "-c", diff --git a/test/build/config/function/functional-config.test.js b/test/build/config/function/functional-config.test.js index d657588d99a..913d6c442c7 100644 --- a/test/build/config/function/functional-config.test.js +++ b/test/build/config/function/functional-config.test.js @@ -5,7 +5,7 @@ const { existsSync } = require("fs"); const { run } = require("../../../utils/test-utils"); describe("functional config", () => { - it("should work as expected in case of single config", async () => { + it("should build and not throw error with single configuration", async () => { const { stderr, stdout, exitCode } = await run(__dirname, [ "--config", resolve(__dirname, "single-webpack.config.js"), @@ -17,7 +17,7 @@ describe("functional config", () => { expect(existsSync(resolve(__dirname, "./dist/dist-single.js"))).toBeTruthy(); }); - it("should work as expected in case of multiple config", async () => { + it("should build and not throw errors with multiple configurations", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "--config", resolve(__dirname, "multi-webpack.config.js"), diff --git a/test/build/config/invalid-export/invalid-export.test.js b/test/build/config/invalid-export/invalid-export.test.js index e47054e71df..7ebab784945 100644 --- a/test/build/config/invalid-export/invalid-export.test.js +++ b/test/build/config/invalid-export/invalid-export.test.js @@ -2,8 +2,8 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); -describe("invalid export", () => { - it("should throw error with no configuration or index file", async () => { +describe("config with invalid export", () => { + it("should throw error with configuration exporting invalid configuration", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "-c", resolve(__dirname, "webpack.config.js"), diff --git a/test/build/config/invalid-path/a.js b/test/build/config/invalid-path/a.js deleted file mode 100644 index 0e9a8dc5145..00000000000 --- a/test/build/config/invalid-path/a.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = "a.js"; diff --git a/test/build/config/invalid-path/invalid-path.test.js b/test/build/config/invalid-path/invalid-path.test.js index d54df8c455e..4b9287e0532 100644 --- a/test/build/config/invalid-path/invalid-path.test.js +++ b/test/build/config/invalid-path/invalid-path.test.js @@ -2,8 +2,8 @@ const path = require("path"); const { run } = require("../../../utils/test-utils"); -describe("basic config file", () => { - it("is able to understand and parse a very basic configuration file", async () => { +describe("config with invalid path supplied by CLI", () => { + it("should throw error when invalid configuration path is passed to cli", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "-c", path.resolve(__dirname, "invalid-webpack.config.js"), diff --git a/test/build/config/invalid-path/webpack.config.js b/test/build/config/invalid-path/webpack.config.js deleted file mode 100644 index 9043cafbd4b..00000000000 --- a/test/build/config/invalid-path/webpack.config.js +++ /dev/null @@ -1,9 +0,0 @@ -const { resolve } = require("path"); - -module.exports = { - entry: "./a.js", - output: { - path: resolve(__dirname, "binary"), - filename: "a.bundle.js", - }, -}; diff --git a/test/build/config/multiple-with-one-compilation/multiple-with-one-compilation.test.js b/test/build/config/multiple-with-one-compilation/multiple-with-one-compilation.test.js index 180041bdce4..a15c12f5864 100644 --- a/test/build/config/multiple-with-one-compilation/multiple-with-one-compilation.test.js +++ b/test/build/config/multiple-with-one-compilation/multiple-with-one-compilation.test.js @@ -3,8 +3,8 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); -describe("basic config file", () => { - it("is able to understand and parse a very basic configuration file", async () => { +describe("config with single config in array", () => { + it("should build and not throw error with configuration file exporting single configuration in array", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "-c", resolve(__dirname, "webpack.config.js"), diff --git a/test/build/config/multiple/multiple-config.test.js b/test/build/config/multiple/multiple-config.test.js index c63293b0641..2ebe537929e 100644 --- a/test/build/config/multiple/multiple-config.test.js +++ b/test/build/config/multiple/multiple-config.test.js @@ -2,8 +2,8 @@ const { run } = require("../../../utils/test-utils"); -describe("Multiple config flag: ", () => { - it("spawns multiple compilers for multiple configs", async () => { +describe("multiple configuration files", () => { + it("should not throw error and spawn compilers for each configuration file", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "--config", "webpack1.config.js", diff --git a/test/build/config/no-code/no-code.test.js b/test/build/config/no-code/no-code.test.js index e9515123b1c..a38c2986c7b 100644 --- a/test/build/config/no-code/no-code.test.js +++ b/test/build/config/no-code/no-code.test.js @@ -3,7 +3,7 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("config flag with no code", () => { - it("should not throw error with no configuration or index file", async () => { + it("should build and not throw error with no configuration or index file", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "-c", resolve(__dirname, "webpack.config.js"), diff --git a/test/build/config/no-config-array/no-config-array.test.js b/test/build/config/no-config-array/no-config-array.test.js index aa56ae7267c..bbbeb4209c2 100644 --- a/test/build/config/no-config-array/no-config-array.test.js +++ b/test/build/config/no-config-array/no-config-array.test.js @@ -3,8 +3,8 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); -describe("no configs in array", () => { - it("is able to understand and parse a very basic configuration file", async () => { +describe("config with empty array", () => { + it("should build and not throw error with empty configuration", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "-c", resolve(__dirname, "webpack.config.js"), diff --git a/test/build/config/no-config-object/no-config-object.test.js b/test/build/config/no-config-object/no-config-object.test.js index e88b1339d03..663117d8f00 100644 --- a/test/build/config/no-config-object/no-config-object.test.js +++ b/test/build/config/no-config-object/no-config-object.test.js @@ -4,7 +4,7 @@ const { resolve } = require("path"); const { run } = require("../../../utils/test-utils"); describe("empty config", () => { - it("should work", async () => { + it("should build and not throw error with empty object as configuration", async () => { const { exitCode, stderr, stdout } = await run(__dirname, [ "-c", resolve(__dirname, "webpack.config.js"), From 99279170165805986e46249d87adb5cf84101085 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Sep 2021 14:33:10 +0300 Subject: [PATCH 153/173] chore(deps): bump tmpl from 1.0.4 to 1.0.5 (#2961) Bumps [tmpl](https://github.com/daaku/nodejs-tmpl) from 1.0.4 to 1.0.5. - [Release notes](https://github.com/daaku/nodejs-tmpl/releases) - [Commits](https://github.com/daaku/nodejs-tmpl/commits/v1.0.5) --- updated-dependencies: - dependency-name: tmpl dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 93f35d6026f..f082de5a482 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10441,9 +10441,9 @@ tmp@^0.0.33: os-tmpdir "~1.0.2" tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-fast-properties@^2.0.0: version "2.0.0" From 09aa4a5443fa91d13d3833e0b1985525dfdcf0dd Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Fri, 24 Sep 2021 15:01:22 +0530 Subject: [PATCH 154/173] refactor: use colors from cli (#2964) --- packages/generators/package.json | 1 - packages/generators/src/init-generator.ts | 7 ++--- yarn.lock | 34 ----------------------- 3 files changed, 3 insertions(+), 39 deletions(-) diff --git a/packages/generators/package.json b/packages/generators/package.json index 4e0c6876b82..fded97134f6 100644 --- a/packages/generators/package.json +++ b/packages/generators/package.json @@ -22,7 +22,6 @@ "plugin-template" ], "dependencies": { - "colorette": "^1.2.1", "yeoman-environment": "^2.10.3", "yeoman-generator": "^4.12.0" }, diff --git a/packages/generators/src/init-generator.ts b/packages/generators/src/init-generator.ts index 5e54686d808..8a73876ce39 100644 --- a/packages/generators/src/init-generator.ts +++ b/packages/generators/src/init-generator.ts @@ -1,4 +1,3 @@ -import { blue, yellow } from "colorette"; import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs"; import path from "path"; @@ -49,7 +48,7 @@ export default class InitGenerator extends CustomGenerator { public async prompting(): Promise { if (!existsSync(this.resolvedGenerationPath)) { this.utils.logger.log( - `${blue( + `${this.utils.colors.blue( "ℹ INFO ", )} supplied generation path doesn't exist, required folders will be created.`, ); @@ -98,7 +97,7 @@ export default class InitGenerator extends CustomGenerator { } public writing(): void { - this.utils.logger.log(`${blue("ℹ INFO ")} Initialising project...`); + this.utils.logger.log(`${this.utils.colors.blue("ℹ INFO ")} Initialising project...`); handlers[this.template].generate(this); } @@ -116,7 +115,7 @@ export default class InitGenerator extends CustomGenerator { writeFileSync(this.configurationPath, formattedSource); } catch (err) { this.utils.logger.log( - `${yellow( + `${this.utils.colors.yellow( `⚠ Generated configuration may not be properly formatted as prettier is not installed.`, )}`, ); diff --git a/yarn.lock b/yarn.lock index f082de5a482..6ef0d907183 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2085,14 +2085,6 @@ "@typescript-eslint/typescript-estree" "4.31.2" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.31.1": - version "4.31.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.1.tgz#0c21e8501f608d6a25c842fcf59541ef4f1ab561" - integrity sha512-N1Uhn6SqNtU2XpFSkD4oA+F0PfKdWHyr4bTX0xTj8NRx1314gBDRL1LUuZd5+L3oP+wo6hCbZpaa1in6SwMcVQ== - dependencies: - "@typescript-eslint/types" "4.31.1" - "@typescript-eslint/visitor-keys" "4.31.1" - "@typescript-eslint/scope-manager@4.31.2": version "4.31.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.2.tgz#1d528cb3ed3bcd88019c20a57c18b897b073923a" @@ -2101,29 +2093,11 @@ "@typescript-eslint/types" "4.31.2" "@typescript-eslint/visitor-keys" "4.31.2" -"@typescript-eslint/types@4.31.1": - version "4.31.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.1.tgz#5f255b695627a13401d2fdba5f7138bc79450d66" - integrity sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ== - "@typescript-eslint/types@4.31.2": version "4.31.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.2.tgz#2aea7177d6d744521a168ed4668eddbd912dfadf" integrity sha512-kWiTTBCTKEdBGrZKwFvOlGNcAsKGJSBc8xLvSjSppFO88AqGxGNYtF36EuEYG6XZ9vT0xX8RNiHbQUKglbSi1w== -"@typescript-eslint/typescript-estree@4.31.1": - version "4.31.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz#4a04d5232cf1031232b7124a9c0310b577a62d17" - integrity sha512-EGHkbsUvjFrvRnusk6yFGqrqMBTue5E5ROnS5puj3laGQPasVUgwhrxfcgkdHNFECHAewpvELE1Gjv0XO3mdWg== - dependencies: - "@typescript-eslint/types" "4.31.1" - "@typescript-eslint/visitor-keys" "4.31.1" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.31.2": version "4.31.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.2.tgz#abfd50594d8056b37e7428df3b2d185ef2d0060c" @@ -2137,14 +2111,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.31.1": - version "4.31.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz#f2e7a14c7f20c4ae07d7fc3c5878c4441a1da9cc" - integrity sha512-PCncP8hEqKw6SOJY+3St4LVtoZpPPn+Zlpm7KW5xnviMhdqcsBty4Lsg4J/VECpJjw1CkROaZhH4B8M1OfnXTQ== - dependencies: - "@typescript-eslint/types" "4.31.1" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.31.2": version "4.31.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.2.tgz#7d5b4a4705db7fe59ecffb273c1d082760f635cc" From 19e10fc28b0a64896c504b27a20a1b1f634a49ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Sep 2021 12:31:34 +0300 Subject: [PATCH 155/173] chore(deps-dev): bump strip-ansi from 6.0.0 to 6.0.1 (#2963) Bumps [strip-ansi](https://github.com/chalk/strip-ansi) from 6.0.0 to 6.0.1. - [Release notes](https://github.com/chalk/strip-ansi/releases) - [Commits](https://github.com/chalk/strip-ansi/compare/v6.0.0...v6.0.1) --- updated-dependencies: - dependency-name: strip-ansi dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6ef0d907183..f6886c6dd24 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2444,10 +2444,10 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.0, ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^2.2.1: version "2.2.1" @@ -10103,11 +10103,11 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: ansi-regex "^4.1.0" strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^5.0.0" + ansi-regex "^5.0.1" strip-bom-buf@^1.0.0: version "1.0.0" From 0851469d781292c374eb0fc0ef0c210db94ded3a Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Thu, 30 Sep 2021 19:24:53 +0530 Subject: [PATCH 156/173] test: fix CI for `webpack-dev-server@latest` (#2968) --- test/utils/test-utils.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/utils/test-utils.js b/test/utils/test-utils.js index c088fa89455..bc5371dacea 100644 --- a/test/utils/test-utils.js +++ b/test/utils/test-utils.js @@ -313,6 +313,14 @@ const normalizeStderr = (stderr) => { normalizedStderr = normalizedStderr.join("\n"); } + // the warning below is causing CI failiure on some jobs + if (/Gracefully shutting down/.test(stderr)) { + normalizedStderr = normalizedStderr.replace( + "\n [webpack-dev-server] Gracefully shutting down. To force exit, press ^C again. Please wait...", + "", + ); + } + normalizedStderr = normalizeVersions(normalizedStderr); normalizedStderr = normalizeError(normalizedStderr); From 15715166870c215741360d3df69d389dc9a2d2d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Sep 2021 16:56:27 +0300 Subject: [PATCH 157/173] chore(deps-dev): bump @typescript-eslint/parser --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index f6886c6dd24..b96b6be0cd1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2076,13 +2076,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.31.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.2.tgz#54aa75986e3302d91eff2bbbaa6ecfa8084e9c34" - integrity sha512-EcdO0E7M/sv23S/rLvenHkb58l3XhuSZzKf6DBvLgHqOYdL6YFMYVtreGFWirxaU2mS1GYDby3Lyxco7X5+Vjw== + version "4.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.32.0.tgz#751ecca0e2fecd3d44484a9b3049ffc1871616e5" + integrity sha512-lhtYqQ2iEPV5JqV7K+uOVlPePjClj4dOw7K4/Z1F2yvjIUvyr13yJnDzkK6uon4BjHYuHy3EG0c2Z9jEhFk56w== dependencies: - "@typescript-eslint/scope-manager" "4.31.2" - "@typescript-eslint/types" "4.31.2" - "@typescript-eslint/typescript-estree" "4.31.2" + "@typescript-eslint/scope-manager" "4.32.0" + "@typescript-eslint/types" "4.32.0" + "@typescript-eslint/typescript-estree" "4.32.0" debug "^4.3.1" "@typescript-eslint/scope-manager@4.31.2": @@ -2093,11 +2093,24 @@ "@typescript-eslint/types" "4.31.2" "@typescript-eslint/visitor-keys" "4.31.2" +"@typescript-eslint/scope-manager@4.32.0": + version "4.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.32.0.tgz#e03c8668f8b954072b3f944d5b799c0c9225a7d5" + integrity sha512-DK+fMSHdM216C0OM/KR1lHXjP1CNtVIhJ54kQxfOE6x8UGFAjha8cXgDMBEIYS2XCYjjCtvTkjQYwL3uvGOo0w== + dependencies: + "@typescript-eslint/types" "4.32.0" + "@typescript-eslint/visitor-keys" "4.32.0" + "@typescript-eslint/types@4.31.2": version "4.31.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.2.tgz#2aea7177d6d744521a168ed4668eddbd912dfadf" integrity sha512-kWiTTBCTKEdBGrZKwFvOlGNcAsKGJSBc8xLvSjSppFO88AqGxGNYtF36EuEYG6XZ9vT0xX8RNiHbQUKglbSi1w== +"@typescript-eslint/types@4.32.0": + version "4.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.32.0.tgz#52c633c18da47aee09449144bf59565ab36df00d" + integrity sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w== + "@typescript-eslint/typescript-estree@4.31.2": version "4.31.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.2.tgz#abfd50594d8056b37e7428df3b2d185ef2d0060c" @@ -2111,6 +2124,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.32.0": + version "4.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz#db00ccc41ccedc8d7367ea3f50c6994b8efa9f3b" + integrity sha512-tRYCgJ3g1UjMw1cGG8Yn1KzOzNlQ6u1h9AmEtPhb5V5a1TmiHWcRyF/Ic+91M4f43QeChyYlVTcf3DvDTZR9vw== + dependencies: + "@typescript-eslint/types" "4.32.0" + "@typescript-eslint/visitor-keys" "4.32.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.31.2": version "4.31.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.2.tgz#7d5b4a4705db7fe59ecffb273c1d082760f635cc" @@ -2119,6 +2145,14 @@ "@typescript-eslint/types" "4.31.2" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.32.0": + version "4.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz#455ba8b51242f2722a497ffae29313f33b14cb7f" + integrity sha512-e7NE0qz8W+atzv3Cy9qaQ7BTLwWsm084Z0c4nIO2l3Bp6u9WIgdqCgyPyV5oSPDMIW3b20H59OOCmVk3jw3Ptw== + dependencies: + "@typescript-eslint/types" "4.32.0" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From a16e58bda9f7f0ebac28667456fa89ee2fa1d73a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Sep 2021 16:56:48 +0300 Subject: [PATCH 158/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin (#2972) --- yarn.lock | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/yarn.lock b/yarn.lock index b96b6be0cd1..2a0da29963d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2051,27 +2051,28 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.31.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.2.tgz#9f41efaee32cdab7ace94b15bd19b756dd099b0a" - integrity sha512-w63SCQ4bIwWN/+3FxzpnWrDjQRXVEGiTt9tJTRptRXeFvdZc/wLiz3FQUwNQ2CVoRGI6KUWMNUj/pk63noUfcA== + version "4.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.32.0.tgz#46d2370ae9311092f2a6f7246d28357daf2d4e89" + integrity sha512-+OWTuWRSbWI1KDK8iEyG/6uK2rTm3kpS38wuVifGUTDB6kjEuNrzBI1MUtxnkneuWG/23QehABe2zHHrj+4yuA== dependencies: - "@typescript-eslint/experimental-utils" "4.31.2" - "@typescript-eslint/scope-manager" "4.31.2" + "@typescript-eslint/experimental-utils" "4.32.0" + "@typescript-eslint/scope-manager" "4.32.0" debug "^4.3.1" functional-red-black-tree "^1.0.1" + ignore "^5.1.8" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.31.2": - version "4.31.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.2.tgz#98727a9c1e977dd5d20c8705e69cd3c2a86553fa" - integrity sha512-3tm2T4nyA970yQ6R3JZV9l0yilE2FedYg8dcXrTar34zC9r6JB7WyBQbpIVongKPlhEMjhQ01qkwrzWy38Bk1Q== +"@typescript-eslint/experimental-utils@4.32.0": + version "4.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.32.0.tgz#53a8267d16ca5a79134739129871966c56a59dc4" + integrity sha512-WLoXcc+cQufxRYjTWr4kFt0DyEv6hDgSaFqYhIzQZ05cF+kXfqXdUh+//kgquPJVUBbL3oQGKQxwPbLxHRqm6A== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.31.2" - "@typescript-eslint/types" "4.31.2" - "@typescript-eslint/typescript-estree" "4.31.2" + "@typescript-eslint/scope-manager" "4.32.0" + "@typescript-eslint/types" "4.32.0" + "@typescript-eslint/typescript-estree" "4.32.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -5699,7 +5700,7 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.1, ignore@^5.1.4: +ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== From 3d5a08e2429dbdba52d596dc0f85107c3f27c2b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Sep 2021 16:57:45 +0300 Subject: [PATCH 159/173] chore(deps-dev): bump jest from 27.2.1 to 27.2.4 (#2978) --- yarn.lock | 659 +++++++++++++++++++++++++++--------------------------- 1 file changed, 329 insertions(+), 330 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2a0da29963d..f464fa526de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -649,94 +649,93 @@ jest-util "^27.0.1" slash "^3.0.0" -"@jest/console@^27.2.0": - version "27.2.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.2.0.tgz#57f702837ec52899be58c3794dce5941c77a8b63" - integrity sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw== +"@jest/console@^27.2.4": + version "27.2.4" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.2.4.tgz#2f1a4bf82b9940065d4818fac271def99ec55e5e" + integrity sha512-94znCKynPZpDpYHQ6esRJSc11AmONrVkBOBZiD7S+bSubHhrUfbS95EY5HIOxhm4PQO7cnvZkL3oJcY0oMA+Wg== dependencies: - "@jest/types" "^27.1.1" + "@jest/types" "^27.2.4" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.2.0" - jest-util "^27.2.0" + jest-message-util "^27.2.4" + jest-util "^27.2.4" slash "^3.0.0" -"@jest/core@^27.2.1": - version "27.2.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.2.1.tgz#93dc50e2aaba2c944e5765cf658dcd98d804c970" - integrity sha512-XcGt9UgPyzylThvezwUIMCNVp8xxN78Ic3WwhJZehZt4n2hPHR6Bd85A1nKFZBeqW58Vd+Cx/LaN6YL4n58KlA== +"@jest/core@^27.2.4": + version "27.2.4" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.2.4.tgz#0b932da787d64848eab720dbb88e5b7a3f86e539" + integrity sha512-UNQLyy+rXoojNm2MGlapgzWhZD1CT1zcHZQYeiD0xE7MtJfC19Q6J5D/Lm2l7i4V97T30usKDoEtjI8vKwWcLg== dependencies: - "@jest/console" "^27.2.0" - "@jest/reporters" "^27.2.1" - "@jest/test-result" "^27.2.0" - "@jest/transform" "^27.2.1" - "@jest/types" "^27.1.1" + "@jest/console" "^27.2.4" + "@jest/reporters" "^27.2.4" + "@jest/test-result" "^27.2.4" + "@jest/transform" "^27.2.4" + "@jest/types" "^27.2.4" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^27.1.1" - jest-config "^27.2.1" - jest-haste-map "^27.2.0" - jest-message-util "^27.2.0" + jest-changed-files "^27.2.4" + jest-config "^27.2.4" + jest-haste-map "^27.2.4" + jest-message-util "^27.2.4" jest-regex-util "^27.0.6" - jest-resolve "^27.2.0" - jest-resolve-dependencies "^27.2.1" - jest-runner "^27.2.1" - jest-runtime "^27.2.1" - jest-snapshot "^27.2.1" - jest-util "^27.2.0" - jest-validate "^27.2.0" - jest-watcher "^27.2.0" + jest-resolve "^27.2.4" + jest-resolve-dependencies "^27.2.4" + jest-runner "^27.2.4" + jest-runtime "^27.2.4" + jest-snapshot "^27.2.4" + jest-util "^27.2.4" + jest-validate "^27.2.4" + jest-watcher "^27.2.4" micromatch "^4.0.4" - p-each-series "^2.1.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.2.0": - version "27.2.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.2.0.tgz#48d1dbfa65f8e4a5a5c6cbeb9c59d1a5c2776f6b" - integrity sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ== +"@jest/environment@^27.2.4": + version "27.2.4" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.2.4.tgz#db3e60f7dd30ab950f6ce2d6d7293ed9a6b7cbcd" + integrity sha512-wkuui5yr3SSQW0XD0Qm3TATUbL/WE3LDEM3ulC+RCQhMf2yxhci8x7svGkZ4ivJ6Pc94oOzpZ6cdHBAMSYd1ew== dependencies: - "@jest/fake-timers" "^27.2.0" - "@jest/types" "^27.1.1" + "@jest/fake-timers" "^27.2.4" + "@jest/types" "^27.2.4" "@types/node" "*" - jest-mock "^27.1.1" + jest-mock "^27.2.4" -"@jest/fake-timers@^27.2.0": - version "27.2.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.2.0.tgz#560841bc21ae7fbeff0cbff8de8f5cf43ad3561d" - integrity sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w== +"@jest/fake-timers@^27.2.4": + version "27.2.4" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.2.4.tgz#00df08bd60332bd59503cb5b6db21e4903785f86" + integrity sha512-cs/TzvwWUM7kAA6Qm/890SK6JJ2pD5RfDNM3SSEom6BmdyV6OiWP1qf/pqo6ts6xwpcM36oN0wSEzcZWc6/B6w== dependencies: - "@jest/types" "^27.1.1" - "@sinonjs/fake-timers" "^7.0.2" + "@jest/types" "^27.2.4" + "@sinonjs/fake-timers" "^8.0.1" "@types/node" "*" - jest-message-util "^27.2.0" - jest-mock "^27.1.1" - jest-util "^27.2.0" + jest-message-util "^27.2.4" + jest-mock "^27.2.4" + jest-util "^27.2.4" -"@jest/globals@^27.2.1": - version "27.2.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.2.1.tgz#6842c70b6713fbe2fcaf89eac20d77eeeb0e282c" - integrity sha512-4P46Zr4cckSitsWtOMRvgMMn7mOKbBsQdYxHeGSIG3kpI4gNR2vk51balPulZHnBQCQb/XBptprtoSv1REfaew== +"@jest/globals@^27.2.4": + version "27.2.4" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.2.4.tgz#0aeb22b011f8c8c4b8ff3b4dbd1ee0392fe0dd8a" + integrity sha512-DRsRs5dh0i+fA9mGHylTU19+8fhzNJoEzrgsu+zgJoZth3x8/0juCQ8nVVdW1er4Cqifb/ET7/hACYVPD0dBEA== dependencies: - "@jest/environment" "^27.2.0" - "@jest/types" "^27.1.1" - expect "^27.2.1" + "@jest/environment" "^27.2.4" + "@jest/types" "^27.2.4" + expect "^27.2.4" -"@jest/reporters@^27.2.1": - version "27.2.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.2.1.tgz#2e43361b962e26975d40eafd7b4f14c70b4fe9a0" - integrity sha512-ILqR+bIIBlhaHjDtQR/0Z20YkKAQVM+NVRuJLaWFCoRx/rKQQSxG01ZLiLV0MsA6wkBHf6J9fzFuXp0k5l7epw== +"@jest/reporters@^27.2.4": + version "27.2.4" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.2.4.tgz#1482ff007f2e919d85c54b1563abb8b2ea2d5198" + integrity sha512-LHeSdDnDZkDnJ8kvnjcqV8P1Yv/32yL4d4XfR5gBiy3xGO0onwll1QEbvtW96fIwhx2nejug0GTaEdNDoyr3fQ== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.2.0" - "@jest/test-result" "^27.2.0" - "@jest/transform" "^27.2.1" - "@jest/types" "^27.1.1" + "@jest/console" "^27.2.4" + "@jest/test-result" "^27.2.4" + "@jest/transform" "^27.2.4" + "@jest/types" "^27.2.4" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" @@ -747,15 +746,15 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^27.2.0" - jest-resolve "^27.2.0" - jest-util "^27.2.0" - jest-worker "^27.2.0" + jest-haste-map "^27.2.4" + jest-resolve "^27.2.4" + jest-util "^27.2.4" + jest-worker "^27.2.4" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^8.0.0" + v8-to-istanbul "^8.1.0" "@jest/source-map@^27.0.6": version "27.0.6" @@ -776,41 +775,41 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-result@^27.2.0": - version "27.2.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.2.0.tgz#377b46a41a6415dd4839fd0bed67b89fecea6b20" - integrity sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA== +"@jest/test-result@^27.2.4": + version "27.2.4" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.2.4.tgz#d1ca8298d168f1b0be834bfb543b1ac0294c05d7" + integrity sha512-eU+PRo0+lIS01b0dTmMdVZ0TtcRSxEaYquZTRFMQz6CvsehGhx9bRzi9Zdw6VROviJyv7rstU+qAMX5pNBmnfQ== dependencies: - "@jest/console" "^27.2.0" - "@jest/types" "^27.1.1" + "@jest/console" "^27.2.4" + "@jest/types" "^27.2.4" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.2.1": - version "27.2.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.2.1.tgz#1682cd3a16198fa358ff9565b0d2792919f36562" - integrity sha512-fWcEgWQXgvU4DFY5YHfQsGwqfJWyuCUzdOzLZTYtyLB3WK1mFPQGYAszM7mCEZjyVon5XRuCa+2/+hif/uMucQ== +"@jest/test-sequencer@^27.2.4": + version "27.2.4" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.2.4.tgz#df66422a3e9e7440ce8b7498e255fa6b52c0bc03" + integrity sha512-fpk5eknU3/DXE2QCCG1wv/a468+cfPo3Asu6d6yUtM9LOPh709ubZqrhuUOYfM8hXMrIpIdrv1CdCrWWabX0rQ== dependencies: - "@jest/test-result" "^27.2.0" + "@jest/test-result" "^27.2.4" graceful-fs "^4.2.4" - jest-haste-map "^27.2.0" - jest-runtime "^27.2.1" + jest-haste-map "^27.2.4" + jest-runtime "^27.2.4" -"@jest/transform@^27.2.1": - version "27.2.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.2.1.tgz#743443adb84b3b7419951fc702515ce20ba6285e" - integrity sha512-xmB5vh81KK8DiiCMtI5vI59mP+GggNmc9BiN+fg4mKdQHV369+WuZc1Lq2xWFCOCsRPHt24D9h7Idp4YaMB1Ww== +"@jest/transform@^27.2.4": + version "27.2.4" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.2.4.tgz#2fe5b6836895f7a1b8bdec442c51e83943c62733" + integrity sha512-n5FlX2TH0oQGwyVDKPxdJ5nI2sO7TJBFe3u3KaAtt7TOiV4yL+Y+rSFDl+Ic5MpbiA/eqXmLAQxjnBmWgS2rEA== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^27.1.1" + "@jest/types" "^27.2.4" babel-plugin-istanbul "^6.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 "^27.2.0" + jest-haste-map "^27.2.4" jest-regex-util "^27.0.6" - jest-util "^27.2.0" + jest-util "^27.2.4" micromatch "^4.0.4" pirates "^4.0.1" slash "^3.0.0" @@ -850,10 +849,10 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^27.1.1": - version "27.1.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.1.1.tgz#77a3fc014f906c65752d12123a0134359707c0ad" - integrity sha512-yqJPDDseb0mXgKqmNqypCsb85C22K1aY5+LUxh7syIM9n/b0AsaltxNy+o6tt29VcfGDpYEve175bm3uOhcehA== +"@jest/types@^27.2.4": + version "27.2.4" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.2.4.tgz#2430042a66e00dc5b140c3636f4474d464c21ee8" + integrity sha512-IDO2ezTxeMvQAHxzG/ZvEyA47q0aVfzT95rGFl7bZs/Go0aIucvfDbS2rmnoEdXxlLQhcolmoG/wvL/uKx4tKA== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" @@ -1754,10 +1753,10 @@ dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^7.0.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz#2524eae70c4910edccf99b2f4e6efc5894aff7b5" - integrity sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg== +"@sinonjs/fake-timers@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz#1c1c9a91419f804e59ae8df316a07dd1c3a76b94" + integrity sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew== dependencies: "@sinonjs/commons" "^1.7.0" @@ -2736,13 +2735,13 @@ 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@^27.2.1: - version "27.2.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.2.1.tgz#48edfa5cf8d59ab293da94321a369ccc7b67a4b1" - integrity sha512-kkaekSJHew1zfDW3cA2QiSBPg4uiLpiW0OwJKqFv0r2/mFgym/IBn7hxPntL6FvS66G/ROh+lz4pRiCJAH1/UQ== +babel-jest@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.2.4.tgz#21ed6729d51bdd75470bbbf3c8b08d86209fb0dc" + integrity sha512-f24OmxyWymk5jfgLdlCMu4fTs4ldxFBIdn5sJdhvGC1m08rSkJ5hYbWkNmfBSvE/DjhCVNSHXepxsI6THGfGsg== dependencies: - "@jest/transform" "^27.2.1" - "@jest/types" "^27.1.1" + "@jest/transform" "^27.2.4" + "@jest/types" "^27.2.4" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.0.0" babel-preset-jest "^27.2.0" @@ -4560,16 +4559,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^27.2.1: - version "27.2.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.2.1.tgz#5f882b308716618613f0106a488b46c303908157" - integrity sha512-ekOA2mBtT2phxcoPVHCXIzbJxCvRXhx2fr7m28IgGdZxUOh8UvxvoRz1FcPlfgZMpE92biHB6woIcAKXqR28hA== +expect@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.2.4.tgz#4debf546050bcdad8914a8c95fec7662e02bf67c" + integrity sha512-gOtuonQ8TCnbNNCSw2fhVzRf8EFYDII4nB5NmG4IEV0rbUnW1I5zXvoTntU4iicB/Uh0oZr20NGlOLdJiwsOZA== dependencies: - "@jest/types" "^27.1.1" + "@jest/types" "^27.2.4" ansi-styles "^5.0.0" jest-get-type "^27.0.6" - jest-matcher-utils "^27.2.0" - jest-message-util "^27.2.0" + jest-matcher-utils "^27.2.4" + jest-message-util "^27.2.4" jest-regex-util "^27.0.6" express@^4.17.1: @@ -6365,84 +6364,84 @@ jake@^10.6.1: filelist "^1.0.1" minimatch "^3.0.4" -jest-changed-files@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.1.1.tgz#9b3f67a34cc58e3e811e2e1e21529837653e4200" - integrity sha512-5TV9+fYlC2A6hu3qtoyGHprBwCAn0AuGA77bZdUgYvVlRMjHXo063VcWTEAyx6XAZ85DYHqp0+aHKbPlfRDRvA== +jest-changed-files@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.2.4.tgz#d7de46e90e5a599c47e260760f5ab53516e835e6" + integrity sha512-eeO1C1u4ex7pdTroYXezr+rbr957myyVoKGjcY4R1TJi3A+9v+4fu1Iv9J4eLq1bgFyT3O3iRWU9lZsEE7J72Q== dependencies: - "@jest/types" "^27.1.1" + "@jest/types" "^27.2.4" execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.2.1: - version "27.2.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.2.1.tgz#c5166052b328c0df932cdaf89f5982085e7b4812" - integrity sha512-9q/8X8DgJmW8IqXsJNnS2E28iarx990hf6D+frS3P0lB+avhFDD33alLwZzKgm45u0wvEi6iFh43WjNbp5fhjw== +jest-circus@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.2.4.tgz#3bd898a29dcaf6a506f3f1b780dff5f67ca83c23" + integrity sha512-TtheheTElrGjlsY9VxkzUU1qwIx05ItIusMVKnvNkMt4o/PeegLRcjq3Db2Jz0GGdBalJdbzLZBgeulZAJxJWA== dependencies: - "@jest/environment" "^27.2.0" - "@jest/test-result" "^27.2.0" - "@jest/types" "^27.1.1" + "@jest/environment" "^27.2.4" + "@jest/test-result" "^27.2.4" + "@jest/types" "^27.2.4" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" - expect "^27.2.1" + expect "^27.2.4" is-generator-fn "^2.0.0" - jest-each "^27.2.0" - jest-matcher-utils "^27.2.0" - jest-message-util "^27.2.0" - jest-runtime "^27.2.1" - jest-snapshot "^27.2.1" - jest-util "^27.2.0" - pretty-format "^27.2.0" + jest-each "^27.2.4" + jest-matcher-utils "^27.2.4" + jest-message-util "^27.2.4" + jest-runtime "^27.2.4" + jest-snapshot "^27.2.4" + jest-util "^27.2.4" + pretty-format "^27.2.4" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.2.1: - version "27.2.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.2.1.tgz#031e887245945864cc6ed8605c939f1937858c09" - integrity sha512-IfxuGkBZS/ogY7yFvvD1dFidzQRXlSBHtUZQ3UTIHydzNMF4/ZRTdGFso6HkbCkemwLh4hnNybONexEqWmYwjw== +jest-cli@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.2.4.tgz#acda7f367aa6e674723fc1a7334e0ae1799448d2" + integrity sha512-4kpQQkg74HYLaXo3nzwtg4PYxSLgL7puz1LXHj5Tu85KmlIpxQFjRkXlx4V47CYFFIDoyl3rHA/cXOxUWyMpNg== dependencies: - "@jest/core" "^27.2.1" - "@jest/test-result" "^27.2.0" - "@jest/types" "^27.1.1" + "@jest/core" "^27.2.4" + "@jest/test-result" "^27.2.4" + "@jest/types" "^27.2.4" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" - jest-config "^27.2.1" - jest-util "^27.2.0" - jest-validate "^27.2.0" + jest-config "^27.2.4" + jest-util "^27.2.4" + jest-validate "^27.2.4" prompts "^2.0.1" - yargs "^16.0.3" + yargs "^16.2.0" -jest-config@^27.2.1: - version "27.2.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.2.1.tgz#2e727e023fc4b77a9f067a40c5448a939aa8386b" - integrity sha512-BAOemP8udmFw9nkgaLAac7vXORdvrt4yrJWoh7uYb0nPZeSsu0kGwJU18SwtY4paq9fed5OgAssC3A+Bf4WMQA== +jest-config@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.2.4.tgz#0204969f5ae2e5190d47be2c14c04d631b7836e2" + integrity sha512-tWy0UxhdzqiKyp4l5Vq4HxLyD+gH5td+GCF3c22/DJ0bYAOsMo+qi2XtbJI6oYMH5JOJQs9nLW/r34nvFCehjA== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^27.2.1" - "@jest/types" "^27.1.1" - babel-jest "^27.2.1" + "@jest/test-sequencer" "^27.2.4" + "@jest/types" "^27.2.4" + babel-jest "^27.2.4" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" is-ci "^3.0.0" - jest-circus "^27.2.1" - jest-environment-jsdom "^27.2.0" - jest-environment-node "^27.2.0" + jest-circus "^27.2.4" + jest-environment-jsdom "^27.2.4" + jest-environment-node "^27.2.4" jest-get-type "^27.0.6" - jest-jasmine2 "^27.2.1" + jest-jasmine2 "^27.2.4" jest-regex-util "^27.0.6" - jest-resolve "^27.2.0" - jest-runner "^27.2.1" - jest-util "^27.2.0" - jest-validate "^27.2.0" + jest-resolve "^27.2.4" + jest-runner "^27.2.4" + jest-util "^27.2.4" + jest-validate "^27.2.4" micromatch "^4.0.4" - pretty-format "^27.2.0" + pretty-format "^27.2.4" jest-diff@^26.0.0: version "26.6.2" @@ -6454,15 +6453,15 @@ jest-diff@^26.0.0: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-diff@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.2.0.tgz#bda761c360f751bab1e7a2fe2fc2b0a35ce8518c" - integrity sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw== +jest-diff@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.2.4.tgz#171c51d3d2c105c457100fee6e7bf7cee51c8d8c" + integrity sha512-bLAVlDSCR3gqUPGv+4nzVpEXGsHh98HjUL7Vb2hVyyuBDoQmja8eJb0imUABsuxBeUVmf47taJSAd9nDrwWKEg== dependencies: chalk "^4.0.0" diff-sequences "^27.0.6" jest-get-type "^27.0.6" - pretty-format "^27.2.0" + pretty-format "^27.2.4" jest-docblock@^27.0.6: version "27.0.6" @@ -6471,41 +6470,41 @@ jest-docblock@^27.0.6: dependencies: detect-newline "^3.0.0" -jest-each@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.2.0.tgz#4c531c7223de289429fc7b2473a86e653c86d61f" - integrity sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA== +jest-each@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.2.4.tgz#b4f280aafd63129ba82e345f0e74c5a10200aeef" + integrity sha512-w9XVc+0EDBUTJS4xBNJ7N2JCcWItFd006lFjz77OarAQcQ10eFDBMrfDv2GBJMKlXe9aq0HrIIF51AXcZrRJyg== dependencies: - "@jest/types" "^27.1.1" + "@jest/types" "^27.2.4" chalk "^4.0.0" jest-get-type "^27.0.6" - jest-util "^27.2.0" - pretty-format "^27.2.0" + jest-util "^27.2.4" + pretty-format "^27.2.4" -jest-environment-jsdom@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.2.0.tgz#c654dfae50ca2272c2a2e2bb95ff0af298283a3c" - integrity sha512-wNQJi6Rd/AkUWqTc4gWhuTIFPo7tlMK0RPZXeM6AqRHZA3D3vwvTa9ktAktyVyWYmUoXdYstOfyYMG3w4jt7eA== +jest-environment-jsdom@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.2.4.tgz#39ae80bbb8675306bfaf0440be1e5f877554539a" + integrity sha512-X70pTXFSypD7AIzKT1mLnDi5hP9w9mdTRcOGOmoDoBrNyNEg4rYm6d4LQWFLc9ps1VnMuDOkFSG0wjSNYGjkng== dependencies: - "@jest/environment" "^27.2.0" - "@jest/fake-timers" "^27.2.0" - "@jest/types" "^27.1.1" + "@jest/environment" "^27.2.4" + "@jest/fake-timers" "^27.2.4" + "@jest/types" "^27.2.4" "@types/node" "*" - jest-mock "^27.1.1" - jest-util "^27.2.0" + jest-mock "^27.2.4" + jest-util "^27.2.4" jsdom "^16.6.0" -jest-environment-node@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.2.0.tgz#73ef2151cb62206669becb94cd84f33276252de5" - integrity sha512-WbW+vdM4u88iy6Q3ftUEQOSgMPtSgjm3qixYYK2AKEuqmFO2zmACTw1vFUB0qI/QN88X6hA6ZkVKIdIWWzz+yg== +jest-environment-node@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.2.4.tgz#b79f98cb36e0c9111aac859c9c99f04eb2f74ff6" + integrity sha512-ZbVbFSnbzTvhLOIkqh5lcLuGCCFvtG4xTXIRPK99rV2KzQT3kNg16KZwfTnLNlIiWCE8do960eToeDfcqmpSAw== dependencies: - "@jest/environment" "^27.2.0" - "@jest/fake-timers" "^27.2.0" - "@jest/types" "^27.1.1" + "@jest/environment" "^27.2.4" + "@jest/fake-timers" "^27.2.4" + "@jest/types" "^27.2.4" "@types/node" "*" - jest-mock "^27.1.1" - jest-util "^27.2.0" + jest-mock "^27.2.4" + jest-util "^27.2.4" jest-get-type@^26.3.0: version "26.3.0" @@ -6517,12 +6516,12 @@ jest-get-type@^27.0.6: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== -jest-haste-map@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.2.0.tgz#703b3a473e3f2e27d75ab07864ffd7bbaad0d75e" - integrity sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q== +jest-haste-map@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.2.4.tgz#f8974807bedf07348ca9fd24e5861ab7c8e61aba" + integrity sha512-bkJ4bT00T2K+1NZXbRcyKnbJ42I6QBvoDNMTAQQDBhaGNnZreiQKUNqax0e6hLTx7E75pKDeltVu3V1HAdu+YA== dependencies: - "@jest/types" "^27.1.1" + "@jest/types" "^27.2.4" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" @@ -6530,54 +6529,54 @@ jest-haste-map@^27.2.0: graceful-fs "^4.2.4" jest-regex-util "^27.0.6" jest-serializer "^27.0.6" - jest-util "^27.2.0" - jest-worker "^27.2.0" + jest-util "^27.2.4" + jest-worker "^27.2.4" micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.2.1: - version "27.2.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.2.1.tgz#30ee71f38670a621ecf3b6dcb89875933f780de6" - integrity sha512-3vytj3+S49+XYsxGJyjlchDo4xblYzjDY4XK7pV2IAdspbMFOpmeNMOeDonYuvlbUtcV8yrFLA6XtliXapDmMA== +jest-jasmine2@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.2.4.tgz#4a1608133dbdb4d68b5929bfd785503ed9c9ba51" + integrity sha512-fcffjO/xLWLVnW2ct3No4EksxM5RyPwHDYu9QU+90cC+/eSMLkFAxS55vkqsxexOO5zSsZ3foVpMQcg/amSeIQ== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^27.2.0" + "@jest/environment" "^27.2.4" "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.2.0" - "@jest/types" "^27.1.1" + "@jest/test-result" "^27.2.4" + "@jest/types" "^27.2.4" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^27.2.1" + expect "^27.2.4" is-generator-fn "^2.0.0" - jest-each "^27.2.0" - jest-matcher-utils "^27.2.0" - jest-message-util "^27.2.0" - jest-runtime "^27.2.1" - jest-snapshot "^27.2.1" - jest-util "^27.2.0" - pretty-format "^27.2.0" + jest-each "^27.2.4" + jest-matcher-utils "^27.2.4" + jest-message-util "^27.2.4" + jest-runtime "^27.2.4" + jest-snapshot "^27.2.4" + jest-util "^27.2.4" + pretty-format "^27.2.4" throat "^6.0.1" -jest-leak-detector@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.2.0.tgz#9a7ca2dad1a21c4e49ad2a8ad7f1214ffdb86a28" - integrity sha512-e91BIEmbZw5+MHkB4Hnrq7S86coTxUMCkz4n7DLmQYvl9pEKmRx9H/JFH87bBqbIU5B2Ju1soKxRWX6/eGFGpA== +jest-leak-detector@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.2.4.tgz#9bb7eab26a73bb280e9298be8d80f389288ec8f1" + integrity sha512-SrcHWbe0EHg/bw2uBjVoHacTo5xosl068x2Q0aWsjr2yYuW2XwqrSkZV4lurUop0jhv1709ymG4or+8E4sH27Q== dependencies: jest-get-type "^27.0.6" - pretty-format "^27.2.0" + pretty-format "^27.2.4" -jest-matcher-utils@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz#b4d224ab88655d5fab64b96b989ac349e2f5da43" - integrity sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw== +jest-matcher-utils@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.2.4.tgz#008fff018151415ad1b6cfc083fd70fe1e012525" + integrity sha512-nQeLfFAIPPkyhkDfifAPfP/U5wm1x0fLtAzqXZSSKckXDNuk2aaOfQiDYv1Mgf5GY6yOsxfUnvNm3dDjXM+BXw== dependencies: chalk "^4.0.0" - jest-diff "^27.2.0" + jest-diff "^27.2.4" jest-get-type "^27.0.6" - pretty-format "^27.2.0" + pretty-format "^27.2.4" jest-message-util@^27.0.1: version "27.0.1" @@ -6594,27 +6593,27 @@ jest-message-util@^27.0.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.2.0.tgz#2f65c71df55267208686b1d7514e18106c91ceaf" - integrity sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w== +jest-message-util@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.2.4.tgz#667e8c0f2b973156d1bac7398a7f677705cafaca" + integrity sha512-wbKT/BNGnBVB9nzi+IoaLkXt6fbSvqUxx+IYY66YFh96J3goY33BAaNG3uPqaw/Sh/FR9YpXGVDfd5DJdbh4nA== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.1.1" + "@jest/types" "^27.2.4" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.4" - pretty-format "^27.2.0" + pretty-format "^27.2.4" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.1.1: - version "27.1.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.1.1.tgz#c7a2e81301fdcf3dab114931d23d89ec9d0c3a82" - integrity sha512-SClsFKuYBf+6SSi8jtAYOuPw8DDMsTElUWEae3zq7vDhH01ayVSIHUSIa8UgbDOUalCFp6gNsaikN0rbxN4dbw== +jest-mock@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.2.4.tgz#c8f0ef33f73d8ff53e3f60b16d59f1128f4072ae" + integrity sha512-iVRU905rutaAoUcrt5Tm1JoHHWi24YabqEGXjPJI4tAyA6wZ7mzDi3GrZ+M7ebgWBqUkZE93GAx1STk7yCMIQA== dependencies: - "@jest/types" "^27.1.1" + "@jest/types" "^27.2.4" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -6632,72 +6631,72 @@ jest-regex-util@^27.0.6: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5" integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ== -jest-resolve-dependencies@^27.2.1: - version "27.2.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.1.tgz#239be969ece749d4dc2e1efcf3d2b86c99525c2e" - integrity sha512-9bKEwmz4YshGPjGZAVZOVw6jt7pq2/FjWJmyhnWhvDuiRCHVZBcJhycinX+e/EJ7jafsq26bTpzBIQas3xql1g== +jest-resolve-dependencies@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.4.tgz#20c41cc02b66aa45169b282356ec73b133013089" + integrity sha512-i5s7Uh9B3Q6uwxLpMhNKlgBf6pcemvWaORxsW1zNF/YCY3jd5EftvnGBI+fxVwJ1CBxkVfxqCvm1lpZkbaoGmg== dependencies: - "@jest/types" "^27.1.1" + "@jest/types" "^27.2.4" jest-regex-util "^27.0.6" - jest-snapshot "^27.2.1" + jest-snapshot "^27.2.4" -jest-resolve@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.2.0.tgz#f5d053693ab3806ec2f778e6df8b0aa4cfaef95f" - integrity sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw== +jest-resolve@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.2.4.tgz#d3b999f073ff84a8ae109ce99ff7f3223048701a" + integrity sha512-IsAO/3+3BZnKjI2I4f3835TBK/90dxR7Otgufn3mnrDFTByOSXclDi3G2XJsawGV4/18IMLARJ+V7Wm7t+J89Q== dependencies: - "@jest/types" "^27.1.1" + "@jest/types" "^27.2.4" chalk "^4.0.0" escalade "^3.1.1" graceful-fs "^4.2.4" - jest-haste-map "^27.2.0" + jest-haste-map "^27.2.4" jest-pnp-resolver "^1.2.2" - jest-util "^27.2.0" - jest-validate "^27.2.0" + jest-util "^27.2.4" + jest-validate "^27.2.4" resolve "^1.20.0" slash "^3.0.0" -jest-runner@^27.2.1: - version "27.2.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.2.1.tgz#3443b1fc08b8a50f305dfc2d41dd2badf335843b" - integrity sha512-USHitkUUzcB3Y5mRdzlp+KHgRRR2VsXDq5OeATuDmq1qXfT/RwwnQykUhn+KVx3FotxK3pID74UY7o6HYIR8vA== +jest-runner@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.2.4.tgz#d816f4cb4af04f3cba703afcf5a35a335b77cad4" + integrity sha512-hIo5PPuNUyVDidZS8EetntuuJbQ+4IHWxmHgYZz9FIDbG2wcZjrP6b52uMDjAEQiHAn8yn8ynNe+TL8UuGFYKg== dependencies: - "@jest/console" "^27.2.0" - "@jest/environment" "^27.2.0" - "@jest/test-result" "^27.2.0" - "@jest/transform" "^27.2.1" - "@jest/types" "^27.1.1" + "@jest/console" "^27.2.4" + "@jest/environment" "^27.2.4" + "@jest/test-result" "^27.2.4" + "@jest/transform" "^27.2.4" + "@jest/types" "^27.2.4" "@types/node" "*" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" jest-docblock "^27.0.6" - jest-environment-jsdom "^27.2.0" - jest-environment-node "^27.2.0" - jest-haste-map "^27.2.0" - jest-leak-detector "^27.2.0" - jest-message-util "^27.2.0" - jest-resolve "^27.2.0" - jest-runtime "^27.2.1" - jest-util "^27.2.0" - jest-worker "^27.2.0" + jest-environment-jsdom "^27.2.4" + jest-environment-node "^27.2.4" + jest-haste-map "^27.2.4" + jest-leak-detector "^27.2.4" + jest-message-util "^27.2.4" + jest-resolve "^27.2.4" + jest-runtime "^27.2.4" + jest-util "^27.2.4" + jest-worker "^27.2.4" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.2.1: - version "27.2.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.2.1.tgz#db506f679356f5b94b7be20e770f2541b7c2b339" - integrity sha512-QJNnwL4iteDE/Jq4TfQK7AjhPoUZflBKTtUIkRnFYFkTAZTP/o8k7ekaROiVjmo+NYop5+DQPqX6pz4vWbZSOQ== +jest-runtime@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.2.4.tgz#170044041e5d30625ab8d753516bbe503f213a5c" + integrity sha512-ICKzzYdjIi70P17MZsLLIgIQFCQmIjMFf+xYww3aUySiUA/QBPUTdUqo5B2eg4HOn9/KkUsV0z6GVgaqAPBJvg== dependencies: - "@jest/console" "^27.2.0" - "@jest/environment" "^27.2.0" - "@jest/fake-timers" "^27.2.0" - "@jest/globals" "^27.2.1" + "@jest/console" "^27.2.4" + "@jest/environment" "^27.2.4" + "@jest/fake-timers" "^27.2.4" + "@jest/globals" "^27.2.4" "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.2.0" - "@jest/transform" "^27.2.1" - "@jest/types" "^27.1.1" + "@jest/test-result" "^27.2.4" + "@jest/transform" "^27.2.4" + "@jest/types" "^27.2.4" "@types/yargs" "^16.0.0" chalk "^4.0.0" cjs-module-lexer "^1.0.0" @@ -6706,17 +6705,17 @@ jest-runtime@^27.2.1: exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-haste-map "^27.2.0" - jest-message-util "^27.2.0" - jest-mock "^27.1.1" + jest-haste-map "^27.2.4" + jest-message-util "^27.2.4" + jest-mock "^27.2.4" jest-regex-util "^27.0.6" - jest-resolve "^27.2.0" - jest-snapshot "^27.2.1" - jest-util "^27.2.0" - jest-validate "^27.2.0" + jest-resolve "^27.2.4" + jest-snapshot "^27.2.4" + jest-util "^27.2.4" + jest-validate "^27.2.4" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^16.0.3" + yargs "^16.2.0" jest-serializer@^27.0.6: version "27.0.6" @@ -6726,10 +6725,10 @@ jest-serializer@^27.0.6: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^27.2.1: - version "27.2.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.2.1.tgz#385accf3bb71ac84e9a6bda4fc9bb458d53abb35" - integrity sha512-8CTg2YrgZuQbPHW7G0YvLTj4yTRXLmSeEO+ka3eC5lbu5dsTRyoDNS1L7x7EFUTyYQhFH9HQG1/TNlbUgR9Lug== +jest-snapshot@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.2.4.tgz#277b2269437e3ffcb91d95a73b24becf33c5a871" + integrity sha512-5DFxK31rYS8X8C6WXsFx8XxrxW3PGa6+9IrUcZdTLg1aEyXDGIeiBh4jbwvh655bg/9vTETbEj/njfZicHTZZw== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" @@ -6737,23 +6736,23 @@ jest-snapshot@^27.2.1: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.2.1" - "@jest/types" "^27.1.1" + "@jest/transform" "^27.2.4" + "@jest/types" "^27.2.4" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.2.1" + expect "^27.2.4" graceful-fs "^4.2.4" - jest-diff "^27.2.0" + jest-diff "^27.2.4" jest-get-type "^27.0.6" - jest-haste-map "^27.2.0" - jest-matcher-utils "^27.2.0" - jest-message-util "^27.2.0" - jest-resolve "^27.2.0" - jest-util "^27.2.0" + jest-haste-map "^27.2.4" + jest-matcher-utils "^27.2.4" + jest-message-util "^27.2.4" + jest-resolve "^27.2.4" + jest-util "^27.2.4" natural-compare "^1.4.0" - pretty-format "^27.2.0" + pretty-format "^27.2.4" semver "^7.3.2" jest-util@^27.0.0, jest-util@^27.0.1: @@ -6768,29 +6767,29 @@ jest-util@^27.0.0, jest-util@^27.0.1: is-ci "^3.0.0" picomatch "^2.2.3" -jest-util@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.2.0.tgz#bfccb85cfafae752257319e825a5b8d4ada470dc" - integrity sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A== +jest-util@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.2.4.tgz#3d7ce081b2e7f4cfe0156452ac01f3cb456cc656" + integrity sha512-mW++4u+fSvAt3YBWm5IpbmRAceUqa2B++JlUZTiuEt2AmNYn0Yw5oay4cP17TGsMINRNPSGiJ2zNnX60g+VbFg== dependencies: - "@jest/types" "^27.1.1" + "@jest/types" "^27.2.4" "@types/node" "*" chalk "^4.0.0" graceful-fs "^4.2.4" is-ci "^3.0.0" picomatch "^2.2.3" -jest-validate@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.2.0.tgz#b7535f12d95dd3b4382831f4047384ca098642ab" - integrity sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ== +jest-validate@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.2.4.tgz#b66d462b2fb93d7e16a47d1aa8763d5600bf2cfa" + integrity sha512-VMtbxbkd7LHnIH7PChdDtrluCFRJ4b1YV2YJzNwwsASMWftq/HgqiqjvptBOWyWOtevgO3f14wPxkPcLlVBRog== dependencies: - "@jest/types" "^27.1.1" + "@jest/types" "^27.2.4" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^27.0.6" leven "^3.1.0" - pretty-format "^27.2.0" + pretty-format "^27.2.4" jest-watch-typeahead@^0.6.1: version "0.6.4" @@ -6818,17 +6817,17 @@ jest-watcher@^27.0.0: jest-util "^27.0.1" string-length "^4.0.1" -jest-watcher@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.2.0.tgz#dc2eef4c13c6d41cebf3f1fc5f900a54b51c2ea0" - integrity sha512-SjRWhnr+qO8aBsrcnYIyF+qRxNZk6MZH8TIDgvi+VlsyrvOyqg0d+Rm/v9KHiTtC9mGGeFi9BFqgavyWib6xLg== +jest-watcher@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.2.4.tgz#b1d5c39ab94f59f4f35f66cc96f7761a10e0cfc4" + integrity sha512-LXC/0+dKxhK7cfF7reflRYlzDIaQE+fL4ynhKhzg8IMILNMuI4xcjXXfUJady7OR4/TZeMg7X8eHx8uan9vqaQ== dependencies: - "@jest/test-result" "^27.2.0" - "@jest/types" "^27.1.1" + "@jest/test-result" "^27.2.4" + "@jest/types" "^27.2.4" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.2.0" + jest-util "^27.2.4" string-length "^4.0.1" jest-worker@^27.0.2: @@ -6840,23 +6839,23 @@ jest-worker@^27.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.2.0.tgz#11eef39f1c88f41384ca235c2f48fe50bc229bc0" - integrity sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA== +jest-worker@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.2.4.tgz#881455df75e22e7726a53f43703ab74d6b36f82d" + integrity sha512-Zq9A2Pw59KkVjBBKD1i3iE2e22oSjXhUKKuAK1HGX8flGwkm6NMozyEYzKd41hXc64dbd/0eWFeEEuxqXyhM+g== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" jest@^27.0.3: - version "27.2.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.2.1.tgz#9263102056fe152fd2478d181cf9bbbd2a6a8da4" - integrity sha512-0MyvNS7J1HbkeotYaqKNGioN+p1/AAPtI1Z8iwMtCBE+PwBT+M4l25D9Pve8/KdhktYLgZaGyyj9CoDytD+R2Q== + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.2.4.tgz#70e27bef873138afc123aa4769f7124c50ad3efb" + integrity sha512-h4uqb1EQLfPulWyUFFWv9e9Nn8sCqsJ/j3wk/KCY0p4s4s0ICCfP3iMf6hRf5hEhsDyvyrCgKiZXma63gMz16A== dependencies: - "@jest/core" "^27.2.1" + "@jest/core" "^27.2.4" import-local "^3.0.2" - jest-cli "^27.2.1" + jest-cli "^27.2.4" js-tokens@^4.0.0: version "4.0.0" @@ -8856,13 +8855,13 @@ pretty-format@^27.0.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.2.0.tgz#ee37a94ce2a79765791a8649ae374d468c18ef19" - integrity sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA== +pretty-format@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.2.4.tgz#08ea39c5eab41b082852d7093059a091f6ddc748" + integrity sha512-NUjw22WJHldzxyps2YjLZkUj6q1HvjqFezkB9Y2cklN8NtVZN/kZEXGZdFw4uny3oENzV5EEMESrkI0YDUH8vg== dependencies: - "@jest/types" "^27.1.1" - ansi-regex "^5.0.0" + "@jest/types" "^27.2.4" + ansi-regex "^5.0.1" ansi-styles "^5.0.0" react-is "^17.0.1" @@ -10837,10 +10836,10 @@ v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz#4229f2a99e367f3f018fa1d5c2b8ec684667c69c" - integrity sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg== +v8-to-istanbul@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz#0aeb763894f1a0a1676adf8a8b7612a38902446c" + integrity sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" @@ -11366,7 +11365,7 @@ yargs@^15.0.2: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.0.3, yargs@^16.2.0: +yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== From 209c6a4c232c86e740a51d3ee60139d1ce431333 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Sep 2021 16:58:04 +0300 Subject: [PATCH 160/173] chore(deps-dev): bump webpack from 5.53.0 to 5.55.1 (#2977) --- yarn.lock | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/yarn.lock b/yarn.lock index f464fa526de..4785ef3a1b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4189,10 +4189,10 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.8.0: - version "5.8.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" - integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== +enhanced-resolve@^5.8.3: + version "5.8.3" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz#6d552d465cce0423f5b3d718511ea53826a7b2f0" + integrity sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -4267,10 +4267,10 @@ es-abstract@^1.18.0-next.2: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.0" -es-module-lexer@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.7.1.tgz#c2c8e0f46f2df06274cdaf0dd3f3b33e0a0b267d" - integrity sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw== +es-module-lexer@^0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.1.tgz#f203bf394a630a552d381acf01a17ef08843b140" + integrity sha512-17Ed9misDnpyNBJh63g1OhW3qUFecDgGOivI85JeZY/LGhDum8e+cltukbkSK8pcJnXXEkya56sp4vSS1nzoUw== es-to-primitive@^1.2.1: version "1.2.1" @@ -11037,9 +11037,9 @@ webpack-sources@^3.2.0: integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== webpack@^5.45.1: - version "5.53.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.53.0.tgz#f463cd9c6fc1356ae4b9b7ac911fd1f5b2df86af" - integrity sha512-RZ1Z3z3ni44snoWjfWeHFyzvd9HMVYDYC5VXmlYUT6NWgEOWdCNpad5Fve2CzzHoRED7WtsKe+FCyP5Vk4pWiQ== + version "5.55.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.55.1.tgz#426ebe54c15fa57f7b242590f65fd182382b5998" + integrity sha512-EYp9lwaOOAs+AA/KviNZ7bQiITHm4bXQvyTPewD2+f5YGjv6sfiClm40yeX5FgBMxh5bxcB6LryiFoP09B97Ug== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" @@ -11050,8 +11050,8 @@ webpack@^5.45.1: acorn-import-assertions "^1.7.6" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.8.0" - es-module-lexer "^0.7.1" + enhanced-resolve "^5.8.3" + es-module-lexer "^0.9.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" From d0bce0bf41713a3e0948f31b7eb4d0173da6bc91 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Fri, 1 Oct 2021 22:09:16 +0530 Subject: [PATCH 161/173] chore: migrate to `colorette` v2 (#2965) --- package.json | 2 +- packages/generators/src/addon-generator.ts | 16 +- packages/generators/src/init-generator.ts | 28 +- packages/generators/src/utils/helpers.ts | 8 +- packages/serve/src/index.ts | 6 +- packages/serve/src/types.ts | 3 +- packages/webpack-cli/lib/bootstrap.js | 9 +- packages/webpack-cli/lib/index.js | 4 +- .../lib/utils/capitalize-first-letter.js | 9 - .../lib/utils/get-available-installers.js | 25 -- .../lib/utils/get-package-manager.js | 65 ---- packages/webpack-cli/lib/utils/index.js | 53 --- packages/webpack-cli/lib/utils/logger.js | 11 - .../webpack-cli/lib/utils/package-exists.js | 24 -- .../lib/utils/prompt-installation.js | 58 ---- packages/webpack-cli/lib/utils/prompt.js | 25 -- packages/webpack-cli/lib/utils/run-command.js | 13 - .../webpack-cli/lib/utils/to-kebab-case.js | 5 - packages/webpack-cli/lib/webpack-cli.js | 327 +++++++++++++++--- packages/webpack-cli/package.json | 2 +- test/api/CLI.test.js | 1 + test/api/capitalizeFirstLetter.test.js | 10 +- test/api/do-install.test.js | 219 ++++++++++++ test/api/generators/helpers.test.js | 48 ++- test/api/get-default-package-manager.test.js | 120 +++++++ test/api/get-package-manager.test.js | 110 ------ test/api/prompt-installation.test.js | 121 ------- test/api/prompt.test.js | 66 ---- yarn.lock | 39 +-- 29 files changed, 695 insertions(+), 732 deletions(-) delete mode 100644 packages/webpack-cli/lib/utils/capitalize-first-letter.js delete mode 100644 packages/webpack-cli/lib/utils/get-available-installers.js delete mode 100644 packages/webpack-cli/lib/utils/get-package-manager.js delete mode 100644 packages/webpack-cli/lib/utils/index.js delete mode 100644 packages/webpack-cli/lib/utils/logger.js delete mode 100644 packages/webpack-cli/lib/utils/package-exists.js delete mode 100644 packages/webpack-cli/lib/utils/prompt-installation.js delete mode 100644 packages/webpack-cli/lib/utils/prompt.js delete mode 100644 packages/webpack-cli/lib/utils/run-command.js delete mode 100644 packages/webpack-cli/lib/utils/to-kebab-case.js create mode 100644 test/api/do-install.test.js create mode 100644 test/api/get-default-package-manager.test.js delete mode 100644 test/api/get-package-manager.test.js delete mode 100644 test/api/prompt-installation.test.js delete mode 100755 test/api/prompt.test.js diff --git a/package.json b/package.json index 315fa2963f9..e1121e02041 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@typescript-eslint/parser": "^4.14.1", "@webpack-cli/migrate": "^1.1.2", "coffeescript": "^2.5.1", - "colorette": "^1.2.1", + "colorette": "^2.0.11", "concat-stream": "^2.0.0", "cz-customizable": "^6.3.0", "del-cli": "^3.0.1", diff --git a/packages/generators/src/addon-generator.ts b/packages/generators/src/addon-generator.ts index 16934b8030a..273d4347be0 100644 --- a/packages/generators/src/addon-generator.ts +++ b/packages/generators/src/addon-generator.ts @@ -10,6 +10,7 @@ const getFiles = (dir) => { return fs.readdirSync(dir).reduce((list, file) => { const filePath = path.join(dir, file); const isDir = fs.statSync(filePath).isDirectory(); + return list.concat(isDir ? getFiles(filePath) : filePath); }, []); }; @@ -39,7 +40,7 @@ const addonGenerator = ( public supportedTemplates: string[]; public template: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any - public utils: any; + public cli: any; // eslint-disable-next-line @typescript-eslint/no-explicit-any public constructor(args: any, opts: any) { @@ -47,7 +48,7 @@ const addonGenerator = ( const { cli = {}, options } = opts || {}; - this.utils = cli && cli.utils; + this.cli = cli; this.template = options.template; this.supportedTemplates = fs.readdirSync(templateDir); } @@ -72,13 +73,16 @@ const addonGenerator = ( Your project must be inside a folder named ${this.props.name} I will create this folder for you. `); + const pathToProjectDir: string = this.destinationPath(this.props.name); + try { fs.mkdirSync(pathToProjectDir, { recursive: true }); } catch (error) { - this.utils.logger.error("Failed to create directory"); - this.utils.logger.error(error); + this.cli.logger.error("Failed to create directory"); + this.cli.logger.error(error); } + this.destinationRoot(pathToProjectDir); } } @@ -92,11 +96,13 @@ const addonGenerator = ( ); let files = []; + try { // An array of file paths (relative to `./templates`) of files to be copied to the generated project files = getFiles(this.resolvedTemplatePath); } catch (error) { - this.utils.logger.error(`Failed to generate starter template.\n ${error}`); + this.cli.logger.error(`Failed to generate starter template.\n ${error}`); + process.exit(2); } diff --git a/packages/generators/src/init-generator.ts b/packages/generators/src/init-generator.ts index 8a73876ce39..fbb6b337bb9 100644 --- a/packages/generators/src/init-generator.ts +++ b/packages/generators/src/init-generator.ts @@ -25,7 +25,7 @@ export default class InitGenerator extends CustomGenerator { public supportedTemplates: string[]; public template: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any - public utils: any; + public cli: any; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any public constructor(args: any, opts: any) { @@ -40,22 +40,21 @@ export default class InitGenerator extends CustomGenerator { this.dependencies = ["webpack", "webpack-cli"]; this.supportedTemplates = Object.keys(handlers); this.answers = {}; - const { cli } = opts; - this.utils = cli.utils; + this.cli = opts.cli; } // eslint-disable-next-line @typescript-eslint/no-explicit-any public async prompting(): Promise { if (!existsSync(this.resolvedGenerationPath)) { - this.utils.logger.log( - `${this.utils.colors.blue( + this.cli.logger.log( + `${this.cli.colors.blue( "ℹ INFO ", )} supplied generation path doesn't exist, required folders will be created.`, ); try { mkdirSync(this.resolvedGenerationPath, { recursive: true }); } catch (error) { - this.utils.logger.error(`Failed to create directory.\n ${error}`); + this.cli.logger.error(`Failed to create directory.\n ${error}`); process.exit(2); } } @@ -97,7 +96,8 @@ export default class InitGenerator extends CustomGenerator { } public writing(): void { - this.utils.logger.log(`${this.utils.colors.blue("ℹ INFO ")} Initialising project...`); + this.cli.logger.log(`${this.cli.colors.blue("ℹ INFO ")} Initialising project...`); + handlers[this.template].generate(this); } @@ -106,19 +106,17 @@ export default class InitGenerator extends CustomGenerator { try { // eslint-disable-next-line node/no-extraneous-require, @typescript-eslint/no-var-requires const prettier = require("prettier"); - const source = readFileSync(this.configurationPath, { - encoding: "utf8", - }); - const formattedSource = prettier.format(source, { - parser: "babel", - }); + const source = readFileSync(this.configurationPath, { encoding: "utf8" }); + const formattedSource = prettier.format(source, { parser: "babel" }); + writeFileSync(this.configurationPath, formattedSource); } catch (err) { - this.utils.logger.log( - `${this.utils.colors.yellow( + this.cli.logger.log( + `${this.cli.colors.yellow( `⚠ Generated configuration may not be properly formatted as prettier is not installed.`, )}`, ); + return; } } diff --git a/packages/generators/src/utils/helpers.ts b/packages/generators/src/utils/helpers.ts index 5f0aa6cd23a..d63b2187988 100644 --- a/packages/generators/src/utils/helpers.ts +++ b/packages/generators/src/utils/helpers.ts @@ -24,14 +24,14 @@ export function toUpperCamelCase(str: string): string { } export async function getInstaller(): Promise { - const installers = this.utils.getAvailableInstallers(); + const installers = this.cli.getAvailablePackageManagers(); if (installers.length === 1) { return installers[0]; } // Prompt for the package manager of choice - const defaultPackager = this.utils.getPackageManager(); + const defaultPackager = this.cli.getDefaultPackageManager(); const { packager } = await List( this, "packager", @@ -48,9 +48,7 @@ export async function getTemplate(): Promise { return this.template; } - this.utils.logger.warn( - `⚠ ${this.template} is not a valid template, please select one from below`, - ); + this.cli.logger.warn(`⚠ ${this.template} is not a valid template, please select one from below`); const { selectedTemplate } = await List( this, diff --git a/packages/serve/src/index.ts b/packages/serve/src/index.ts index e1aa7c4dec1..2895dbfd126 100644 --- a/packages/serve/src/index.ts +++ b/packages/serve/src/index.ts @@ -89,7 +89,7 @@ class ServeCommand { const processors: Array<(opts: Record) => void> = []; for (const optionName in options) { - const kebabedOption = cli.utils.toKebabCase(optionName); + const kebabedOption = cli.toKebabCase(optionName); // `webpack-dev-server` has own logic for the `--hot` option const isBuiltInOption = kebabedOption !== "hot" && @@ -194,7 +194,7 @@ class ServeCommand { return accumulator; }, {}); const values = Object.keys(devServerCLIOptions).reduce((accumulator, name) => { - const kebabName = cli.utils.toKebabCase(name); + const kebabName = cli.toKebabCase(name); if (args[kebabName]) { accumulator[kebabName] = options[name]; } @@ -222,7 +222,7 @@ class ServeCommand { const problems = problemsByPath[path]; problems.forEach((problem) => { cli.logger.error( - `${cli.utils.capitalizeFirstLetter(problem.type.replace(/-/g, " "))}${ + `${cli.capitalizeFirstLetter(problem.type.replace(/-/g, " "))}${ problem.value ? ` '${problem.value}'` : "" } for the '--${problem.argument}' option${ problem.index ? ` by index '${problem.index}'` : "" diff --git a/packages/serve/src/types.ts b/packages/serve/src/types.ts index a786425961c..de9011bcdee 100644 --- a/packages/serve/src/types.ts +++ b/packages/serve/src/types.ts @@ -9,9 +9,8 @@ export type devServerOptionsType = { // eslint-disable-next-line @typescript-eslint/no-explicit-any devMiddleware?: Record; firewall?: boolean | string[]; - // eslint-disable-next-line @typescript-eslint/no-explicit-any headers?: - | Record + | Record // eslint-disable-next-line @typescript-eslint/no-explicit-any | ((request: any, response: any, middlewareContext: any) => Record); historyApiFallback?: boolean | Record; host?: string | null | hostEnum; diff --git a/packages/webpack-cli/lib/bootstrap.js b/packages/webpack-cli/lib/bootstrap.js index 9f5b7908155..c43c8442e25 100644 --- a/packages/webpack-cli/lib/bootstrap.js +++ b/packages/webpack-cli/lib/bootstrap.js @@ -1,16 +1,15 @@ const WebpackCLI = require("./webpack-cli"); -const utils = require("./utils"); const runCLI = async (args, originalModuleCompile) => { - try { - // Create a new instance of the CLI object - const cli = new WebpackCLI(); + // Create a new instance of the CLI object + const cli = new WebpackCLI(); + try { cli._originalModuleCompile = originalModuleCompile; await cli.run(args); } catch (error) { - utils.logger.error(error); + cli.logger.error(error); process.exit(2); } }; diff --git a/packages/webpack-cli/lib/index.js b/packages/webpack-cli/lib/index.js index 76a626301f7..4dfb248b8fb 100644 --- a/packages/webpack-cli/lib/index.js +++ b/packages/webpack-cli/lib/index.js @@ -1,5 +1,5 @@ const CLI = require("./webpack-cli"); -const utils = require("./utils"); module.exports = CLI; -module.exports.utils = utils; +// TODO remove after drop `@webpack-cli/migrate` +module.exports.utils = { logger: console }; diff --git a/packages/webpack-cli/lib/utils/capitalize-first-letter.js b/packages/webpack-cli/lib/utils/capitalize-first-letter.js deleted file mode 100644 index 8b217ba2b7f..00000000000 --- a/packages/webpack-cli/lib/utils/capitalize-first-letter.js +++ /dev/null @@ -1,9 +0,0 @@ -const capitalizeFirstLetter = (string) => { - if (typeof string !== "string") { - return ""; - } - - return string.charAt(0).toUpperCase() + string.slice(1); -}; - -module.exports = capitalizeFirstLetter; diff --git a/packages/webpack-cli/lib/utils/get-available-installers.js b/packages/webpack-cli/lib/utils/get-available-installers.js deleted file mode 100644 index 3d2d3d331d8..00000000000 --- a/packages/webpack-cli/lib/utils/get-available-installers.js +++ /dev/null @@ -1,25 +0,0 @@ -const { sync } = require("execa"); - -const utils = require("./"); - -function hasPmInstalled(packageManager) { - try { - sync(packageManager, ["--version"]); - return packageManager; - } catch (err) { - return false; - } -} - -function getAvailableInstallers() { - const installers = ["npm", "yarn", "pnpm"]; - const availableInstallers = installers.filter((installer) => hasPmInstalled(installer)); - - if (!availableInstallers.length) { - utils.logger.error("No package manager found."); - process.exit(2); - } - return availableInstallers; -} - -module.exports = getAvailableInstallers; diff --git a/packages/webpack-cli/lib/utils/get-package-manager.js b/packages/webpack-cli/lib/utils/get-package-manager.js deleted file mode 100644 index e07482ad178..00000000000 --- a/packages/webpack-cli/lib/utils/get-package-manager.js +++ /dev/null @@ -1,65 +0,0 @@ -const fs = require("fs"); -const path = require("path"); -const { sync } = require("execa"); - -const utils = require("./index"); - -/** - * - * Returns the name of package manager to use, - * preference order - npm > yarn > pnpm - * - * @returns {String} - The package manager name - */ -function getPackageManager() { - const hasLocalNpm = fs.existsSync(path.resolve(process.cwd(), "package-lock.json")); - - if (hasLocalNpm) { - return "npm"; - } - - const hasLocalYarn = fs.existsSync(path.resolve(process.cwd(), "yarn.lock")); - - if (hasLocalYarn) { - return "yarn"; - } - - const hasLocalPnpm = fs.existsSync(path.resolve(process.cwd(), "pnpm-lock.yaml")); - - if (hasLocalPnpm) { - return "pnpm"; - } - - try { - // the sync function below will fail if npm is not installed, - // an error will be thrown - if (sync("npm", ["--version"])) { - return "npm"; - } - } catch (e) { - // Nothing - } - - try { - // the sync function below will fail if yarn is not installed, - // an error will be thrown - if (sync("yarn", ["--version"])) { - return "yarn"; - } - } catch (e) { - // Nothing - } - - try { - // the sync function below will fail if pnpm is not installed, - // an error will be thrown - if (sync("pnpm", ["--version"])) { - return "pnpm"; - } - } catch (e) { - utils.logger.error("No package manager found."); - process.exit(2); - } -} - -module.exports = getPackageManager; diff --git a/packages/webpack-cli/lib/utils/index.js b/packages/webpack-cli/lib/utils/index.js deleted file mode 100644 index 0326645fbea..00000000000 --- a/packages/webpack-cli/lib/utils/index.js +++ /dev/null @@ -1,53 +0,0 @@ -module.exports = { - get colors() { - return require("colorette"); - }, - - get levenshtein() { - return require("fastest-levenshtein"); - }, - - get interpret() { - return require("interpret"); - }, - - get rechoir() { - return require("rechoir"); - }, - - get capitalizeFirstLetter() { - return require("./capitalize-first-letter"); - }, - - get dynamicImportLoader() { - return require("./dynamic-import-loader"); - }, - - get getAvailableInstallers() { - return require("./get-available-installers"); - }, - - get getPackageManager() { - return require("./get-package-manager"); - }, - - get logger() { - return require("./logger"); - }, - - get packageExists() { - return require("./package-exists"); - }, - - get promptInstallation() { - return require("./prompt-installation"); - }, - - get runCommand() { - return require("./run-command"); - }, - - get toKebabCase() { - return require("./to-kebab-case"); - }, -}; diff --git a/packages/webpack-cli/lib/utils/logger.js b/packages/webpack-cli/lib/utils/logger.js deleted file mode 100644 index f0df986fca4..00000000000 --- a/packages/webpack-cli/lib/utils/logger.js +++ /dev/null @@ -1,11 +0,0 @@ -const utils = require("./index"); -const util = require("util"); - -module.exports = { - error: (val) => console.error(`[webpack-cli] ${utils.colors.red(util.format(val))}`), - warn: (val) => console.warn(`[webpack-cli] ${utils.colors.yellow(val)}`), - info: (val) => console.info(`[webpack-cli] ${utils.colors.cyan(val)}`), - success: (val) => console.log(`[webpack-cli] ${utils.colors.green(val)}`), - log: (val) => console.log(`[webpack-cli] ${val}`), - raw: (val) => console.log(val), -}; diff --git a/packages/webpack-cli/lib/utils/package-exists.js b/packages/webpack-cli/lib/utils/package-exists.js deleted file mode 100644 index ba1a683524d..00000000000 --- a/packages/webpack-cli/lib/utils/package-exists.js +++ /dev/null @@ -1,24 +0,0 @@ -const fs = require("fs"); -const path = require("path"); - -function packageExists(packageName) { - if (process.versions.pnp) { - return true; - } - - let dir = __dirname; - - do { - try { - if (fs.statSync(path.join(dir, "node_modules", packageName)).isDirectory()) { - return true; - } - } catch (_error) { - // Nothing - } - } while (dir !== (dir = path.dirname(dir))); - - return false; -} - -module.exports = packageExists; diff --git a/packages/webpack-cli/lib/utils/prompt-installation.js b/packages/webpack-cli/lib/utils/prompt-installation.js deleted file mode 100644 index d4d078d42a0..00000000000 --- a/packages/webpack-cli/lib/utils/prompt-installation.js +++ /dev/null @@ -1,58 +0,0 @@ -const utils = require("./index"); -const prompt = require("./prompt"); - -/** - * - * @param packageName - * @param preMessage Message to show before the question - */ -async function promptInstallation(packageName, preMessage) { - const packageManager = utils.getPackageManager(); - - if (!packageManager) { - utils.logger.error("Can't find package manager"); - process.exit(2); - } - - if (preMessage) { - preMessage(); - } - - // yarn uses 'add' command, rest npm and pnpm both use 'install' - const commandToBeRun = `${packageManager} ${[ - packageManager === "yarn" ? "add" : "install", - "-D", - packageName, - ].join(" ")}`; - const { colors } = utils; - - let installConfirm; - - try { - installConfirm = await prompt({ - message: `[webpack-cli] Would you like to install '${colors.green( - packageName, - )}' package? (That will run '${colors.green(commandToBeRun)}') (${colors.yellow("Y/n")})`, - defaultResponse: "Y", - stream: process.stderr, - }); - } catch (error) { - utils.logger.error(error); - process.exit(2); - } - - if (installConfirm) { - try { - await utils.runCommand(commandToBeRun); - } catch (error) { - utils.logger.error(error); - process.exit(2); - } - - return packageName; - } - - process.exit(2); -} - -module.exports = promptInstallation; diff --git a/packages/webpack-cli/lib/utils/prompt.js b/packages/webpack-cli/lib/utils/prompt.js deleted file mode 100644 index 777890fb418..00000000000 --- a/packages/webpack-cli/lib/utils/prompt.js +++ /dev/null @@ -1,25 +0,0 @@ -const prompt = ({ message, defaultResponse, stream }) => { - const readline = require("readline"); - const rl = readline.createInterface({ - input: process.stdin, - output: stream, - }); - - return new Promise((resolve) => { - rl.question(`${message} `, (answer) => { - // Close the stream - rl.close(); - - const response = (answer || defaultResponse).toLowerCase(); - - // Resolve with the input response - if (response === "y" || response === "yes") { - resolve(true); - } else { - resolve(false); - } - }); - }); -}; - -module.exports = prompt; diff --git a/packages/webpack-cli/lib/utils/run-command.js b/packages/webpack-cli/lib/utils/run-command.js deleted file mode 100644 index 97f8228d4dc..00000000000 --- a/packages/webpack-cli/lib/utils/run-command.js +++ /dev/null @@ -1,13 +0,0 @@ -const execa = require("execa"); -const utils = require("./index"); - -async function runCommand(command, args = []) { - try { - await execa(command, args, { stdio: "inherit", shell: true }); - } catch (error) { - utils.logger.error(error.message); - process.exit(2); - } -} - -module.exports = runCommand; diff --git a/packages/webpack-cli/lib/utils/to-kebab-case.js b/packages/webpack-cli/lib/utils/to-kebab-case.js deleted file mode 100644 index fda1de3b441..00000000000 --- a/packages/webpack-cli/lib/utils/to-kebab-case.js +++ /dev/null @@ -1,5 +0,0 @@ -const toKebabCase = (str) => { - return str.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(); -}; - -module.exports = toKebabCase; diff --git a/packages/webpack-cli/lib/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index 0548c9a2550..8b5b63862c4 100644 --- a/packages/webpack-cli/lib/webpack-cli.js +++ b/packages/webpack-cli/lib/webpack-cli.js @@ -2,17 +2,17 @@ const fs = require("fs"); const path = require("path"); const { pathToFileURL } = require("url"); const Module = require("module"); +const util = require("util"); const { program, Option } = require("commander"); -const utils = require("./utils"); const WEBPACK_PACKAGE = process.env.WEBPACK_PACKAGE || "webpack"; const WEBPACK_DEV_SERVER_PACKAGE = process.env.WEBPACK_DEV_SERVER_PACKAGE || "webpack-dev-server"; class WebpackCLI { constructor() { - this.logger = utils.logger; - this.utils = utils; + this.colors = this.createColors(); + this.logger = this.getLogger(); // Initialize program this.program = program; @@ -20,10 +20,231 @@ class WebpackCLI { this.program.configureOutput({ writeErr: this.logger.error, outputError: (str, write) => - write(`Error: ${this.utils.capitalizeFirstLetter(str.replace(/^error:/, "").trim())}`), + write(`Error: ${this.capitalizeFirstLetter(str.replace(/^error:/, "").trim())}`), }); } + capitalizeFirstLetter(str) { + if (typeof str !== "string") { + return ""; + } + + return str.charAt(0).toUpperCase() + str.slice(1); + } + + toKebabCase(str) { + return str.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(); + } + + createColors(useColor) { + const { createColors, isColorSupported } = require("colorette"); + + let shouldUseColor; + + if (useColor) { + shouldUseColor = useColor; + } else { + shouldUseColor = isColorSupported; + + // CLI may failed before parsing arguments, we should respect colors/no colors in logger + if (process.argv.includes("--no-color")) { + shouldUseColor = false; + } else if (process.argv.includes("--color")) { + shouldUseColor = true; + } + } + + return { ...createColors({ useColor: shouldUseColor }), isColorSupported: shouldUseColor }; + } + + getLogger() { + return { + error: (val) => console.error(`[webpack-cli] ${this.colors.red(util.format(val))}`), + warn: (val) => console.warn(`[webpack-cli] ${this.colors.yellow(val)}`), + info: (val) => console.info(`[webpack-cli] ${this.colors.cyan(val)}`), + success: (val) => console.log(`[webpack-cli] ${this.colors.green(val)}`), + log: (val) => console.log(`[webpack-cli] ${val}`), + raw: (val) => console.log(val), + }; + } + + checkPackageExists(packageName) { + if (process.versions.pnp) { + return true; + } + + let dir = __dirname; + + do { + try { + if (fs.statSync(path.join(dir, "node_modules", packageName)).isDirectory()) { + return true; + } + } catch (_error) { + // Nothing + } + } while (dir !== (dir = path.dirname(dir))); + + return false; + } + + getAvailablePackageManagers() { + const { sync } = require("execa"); + const installers = ["npm", "yarn", "pnpm"]; + const hasPackageManagerInstalled = (packageManager) => { + try { + sync(packageManager, ["--version"]); + + return packageManager; + } catch (err) { + return false; + } + }; + const availableInstallers = installers.filter((installer) => + hasPackageManagerInstalled(installer), + ); + + if (!availableInstallers.length) { + this.logger.error("No package manager found."); + + process.exit(2); + } + + return availableInstallers; + } + + getDefaultPackageManager() { + const { sync } = require("execa"); + const hasLocalNpm = fs.existsSync(path.resolve(process.cwd(), "package-lock.json")); + + if (hasLocalNpm) { + return "npm"; + } + + const hasLocalYarn = fs.existsSync(path.resolve(process.cwd(), "yarn.lock")); + + if (hasLocalYarn) { + return "yarn"; + } + + const hasLocalPnpm = fs.existsSync(path.resolve(process.cwd(), "pnpm-lock.yaml")); + + if (hasLocalPnpm) { + return "pnpm"; + } + + try { + // the sync function below will fail if npm is not installed, + // an error will be thrown + if (sync("npm", ["--version"])) { + return "npm"; + } + } catch (e) { + // Nothing + } + + try { + // the sync function below will fail if yarn is not installed, + // an error will be thrown + if (sync("yarn", ["--version"])) { + return "yarn"; + } + } catch (e) { + // Nothing + } + + try { + // the sync function below will fail if pnpm is not installed, + // an error will be thrown + if (sync("pnpm", ["--version"])) { + return "pnpm"; + } + } catch (e) { + this.logger.error("No package manager found."); + + process.exit(2); + } + } + + async doInstall(packageName, options = {}) { + const packageManager = this.getDefaultPackageManager(); + + if (!packageManager) { + this.logger.error("Can't find package manager"); + + process.exit(2); + } + + if (options.preMessage) { + options.preMessage(); + } + + // yarn uses 'add' command, rest npm and pnpm both use 'install' + const commandToBeRun = `${packageManager} ${[ + packageManager === "yarn" ? "add" : "install", + "-D", + packageName, + ].join(" ")}`; + + const prompt = ({ message, defaultResponse, stream }) => { + const readline = require("readline"); + const rl = readline.createInterface({ + input: process.stdin, + output: stream, + }); + + return new Promise((resolve) => { + rl.question(`${message} `, (answer) => { + // Close the stream + rl.close(); + + const response = (answer || defaultResponse).toLowerCase(); + + // Resolve with the input response + if (response === "y" || response === "yes") { + resolve(true); + } else { + resolve(false); + } + }); + }); + }; + + let needInstall; + + try { + needInstall = await prompt({ + message: `[webpack-cli] Would you like to install '${this.colors.green( + packageName, + )}' package? (That will run '${this.colors.green(commandToBeRun)}') (${this.colors.yellow( + "Y/n", + )})`, + defaultResponse: "Y", + stream: process.stderr, + }); + } catch (error) { + this.logger.error(error); + + process.exit(error); + } + + if (needInstall) { + const execa = require("execa"); + + try { + await execa(commandToBeRun, [], { stdio: "inherit", shell: true }); + } catch (error) { + this.logger.error(error); + + process.exit(2); + } + + return packageName; + } + + process.exit(2); + } + async tryRequireThenImport(module, handleError = true) { let result; @@ -39,7 +260,7 @@ class WebpackCLI { Module.prototype._compile = this._originalModuleCompile; } - const dynamicImportLoader = this.utils.dynamicImportLoader(); + const dynamicImportLoader = require("./utils/dynamic-import-loader")(); if (this._originalModuleCompile) { Module.prototype._compile = previousModuleCompile; @@ -138,8 +359,7 @@ class WebpackCLI { if (commandOptions.dependencies && commandOptions.dependencies.length > 0) { for (const dependency of commandOptions.dependencies) { - const { packageExists } = this.utils; - const isPkgExist = packageExists(dependency); + const isPkgExist = this.checkPackageExists(dependency); if (isPkgExist) { continue; @@ -164,12 +384,14 @@ class WebpackCLI { continue; } - await this.utils.promptInstallation(dependency, () => { - this.logger.error( - `For using '${this.utils.colors.green( - commandOptions.name.split(" ")[0], - )}' command you need to install: '${this.utils.colors.green(dependency)}' package.`, - ); + await this.doInstall(dependency, { + preMessage: () => { + this.logger.error( + `For using '${this.colors.green( + commandOptions.name.split(" ")[0], + )}' command you need to install: '${this.colors.green(dependency)}' package.`, + ); + }, }); } } @@ -887,17 +1109,17 @@ class WebpackCLI { pkg = commandName; } - if (pkg !== "webpack-cli" && !this.utils.packageExists(pkg)) { + if (pkg !== "webpack-cli" && !this.checkPackageExists(pkg)) { if (!allowToInstall) { return; } - const { promptInstallation, colors } = this.utils; - - pkg = await promptInstallation(pkg, () => { - this.logger.error( - `For using this command you need to install: '${colors.green(pkg)}' package.`, - ); + pkg = await this.doInstall(pkg, { + preMessage: () => { + this.logger.error( + `For using this command you need to install: '${this.colors.green(pkg)}' package.`, + ); + }, }); } @@ -906,6 +1128,7 @@ class WebpackCLI { try { loadedCommand = await this.tryRequireThenImport(pkg, false); } catch (error) { + console.log(error); // Ignore, command is not installed return; @@ -964,11 +1187,10 @@ class WebpackCLI { process.exit(2); } + const levenshtein = require("fastest-levenshtein"); + command.options.forEach((option) => { - if ( - !option.hidden && - this.utils.levenshtein.distance(name, option.long.slice(2)) < 3 - ) { + if (!option.hidden && levenshtein.distance(name, option.long.slice(2)) < 3) { this.logger.error(`Did you mean '--${option.name()}'?`); } }); @@ -992,15 +1214,15 @@ class WebpackCLI { this.program.on("option:color", function () { const { color } = this.opts(); - cli.utils.colors.options.changed = true; - cli.utils.colors.options.enabled = color; + cli.isColorSupportChanged = color; + cli.colors = cli.createColors(color); }); this.program.option("--no-color", "Disable colors on console."); this.program.on("option:no-color", function () { const { color } = this.opts(); - cli.utils.colors.options.changed = true; - cli.utils.colors.options.enabled = color; + cli.isColorSupportChanged = color; + cli.colors = cli.createColors(color); }); // Make `-v, --version` options @@ -1082,8 +1304,7 @@ class WebpackCLI { ); const outputHelp = async (options, isVerbose, isHelpCommandSyntax, program) => { - const { bold } = this.utils.colors; - + const { bold } = this.colors; const outputIncorrectUsageOfHelp = () => { this.logger.error("Incorrect use of help"); this.logger.error( @@ -1108,7 +1329,7 @@ class WebpackCLI { } if (isGlobalHelp) { - return `${parentCmdNames}${command.usage()}\n${this.utils.colors.bold( + return `${parentCmdNames}${command.usage()}\n${bold( "Alternative usage to run commands:", )} ${parentCmdNames}[command] [options]`; } @@ -1458,9 +1679,10 @@ class WebpackCLI { } else { this.logger.error(`Unknown command or entry '${operand}'`); + const levenshtein = require("fastest-levenshtein"); const found = knownCommands.find( (commandOptions) => - this.utils.levenshtein.distance(operand, getCommandName(commandOptions.name)) < 3, + levenshtein.distance(operand, getCommandName(commandOptions.name)) < 3, ); if (found) { @@ -1485,12 +1707,12 @@ class WebpackCLI { } async loadConfig(configPath, argv = {}) { - const { interpret } = this.utils; const ext = path.extname(configPath); + const interpret = require("interpret"); const interpreted = Object.keys(interpret.jsVariants).find((variant) => variant === ext); if (interpreted) { - const { rechoir } = this.utils; + const rechoir = require("rechoir"); try { rechoir.prepare(interpret.extensions, configPath); @@ -1498,7 +1720,6 @@ class WebpackCLI { if (error.failures) { this.logger.error(`Unable load '${configPath}'`); this.logger.error(error.message); - error.failures.forEach((failure) => { this.logger.error(failure.error.message); }); @@ -1605,7 +1826,7 @@ class WebpackCLI { config.options = config.options.length === 1 ? config.options[0] : config.options; } else { - const { interpret } = this.utils; + const interpret = require("interpret"); // Order defines the priority, in decreasing order const defaultConfigFiles = [ @@ -1720,17 +1941,17 @@ class WebpackCLI { // TODO refactor async applyOptions(config, options) { if (options.analyze) { - if (!this.utils.packageExists("webpack-bundle-analyzer")) { - const { promptInstallation, colors } = this.utils; - - await promptInstallation("webpack-bundle-analyzer", () => { - this.logger.error( - `It looks like ${colors.yellow("webpack-bundle-analyzer")} is not installed.`, - ); + if (!this.checkPackageExists("webpack-bundle-analyzer")) { + await this.doInstall("webpack-bundle-analyzer", { + preMessage: () => { + this.logger.error( + `It looks like ${this.colors.yellow("webpack-bundle-analyzer")} is not installed.`, + ); + }, }); this.logger.success( - `${colors.yellow("webpack-bundle-analyzer")} was installed successfully.`, + `${this.colors.yellow("webpack-bundle-analyzer")} was installed successfully.`, ); } } @@ -1787,7 +2008,7 @@ class WebpackCLI { return accumulator; } - const kebabName = this.utils.toKebabCase(name); + const kebabName = this.toKebabCase(name); if (args[kebabName]) { accumulator[kebabName] = options[name]; @@ -1813,7 +2034,7 @@ class WebpackCLI { problems.forEach((problem) => { this.logger.error( - `${this.utils.capitalizeFirstLetter(problem.type.replace(/-/g, " "))}${ + `${this.capitalizeFirstLetter(problem.type.replace(/-/g, " "))}${ problem.value ? ` '${problem.value}'` : "" } for the '--${problem.argument}' option${ problem.index ? ` by index '${problem.index}'` : "" @@ -1962,8 +2183,8 @@ class WebpackCLI { let colors; // From arguments - if (typeof this.utils.colors.options.changed !== "undefined") { - colors = Boolean(this.utils.colors.options.enabled); + if (typeof this.isColorSupportChanged !== "undefined") { + colors = Boolean(this.isColorSupportChanged); } // From stats else if (typeof configOptions.stats.colors !== "undefined") { @@ -1971,7 +2192,7 @@ class WebpackCLI { } // Default else { - colors = Boolean(this.utils.colors.options.enabled); + colors = Boolean(this.colors.isColorSupported); } configOptions.stats.colors = colors; @@ -2132,13 +2353,13 @@ class WebpackCLI { .pipe(fs.createWriteStream(options.json)) .on("error", handleWriteError) // Use stderr to logging - .on("close", () => + .on("close", () => { process.stderr.write( - `[webpack-cli] ${this.utils.colors.green( + `[webpack-cli] ${this.colors.green( `stats are successfully stored as json to ${options.json}`, )}\n`, - ), - ); + ); + }); } } else { const printedStats = stats.toString(statsOptions); diff --git a/packages/webpack-cli/package.json b/packages/webpack-cli/package.json index c49836bed2a..ac0b5d130f8 100644 --- a/packages/webpack-cli/package.json +++ b/packages/webpack-cli/package.json @@ -33,7 +33,7 @@ "@webpack-cli/configtest": "^1.0.4", "@webpack-cli/info": "^1.3.0", "@webpack-cli/serve": "^1.5.2", - "colorette": "^1.2.1", + "colorette": "^2.0.11", "commander": "^7.0.0", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", diff --git a/test/api/CLI.test.js b/test/api/CLI.test.js index 2fe1823c332..faf32be9355 100644 --- a/test/api/CLI.test.js +++ b/test/api/CLI.test.js @@ -1704,6 +1704,7 @@ describe("CLI API", () => { exitSpy = jest.spyOn(process, "exit").mockImplementation(() => {}); cli.program.option("--color [value]", "any color", "blue"); + await new Promise((resolve, reject) => { try { cli.run(["help", "--color"], { from: "user" }); diff --git a/test/api/capitalizeFirstLetter.test.js b/test/api/capitalizeFirstLetter.test.js index 060bf995c01..c00a6e45691 100755 --- a/test/api/capitalizeFirstLetter.test.js +++ b/test/api/capitalizeFirstLetter.test.js @@ -1,11 +1,15 @@ -const capitalizeFirstLetter = require("../../packages/webpack-cli/lib/utils/capitalize-first-letter"); +const CLI = require("../../packages/webpack-cli/lib/webpack-cli"); describe("capitalizeFirstLetter", () => { it("should capitalize first letter", () => { - expect(capitalizeFirstLetter("webpack")).toEqual("Webpack"); + const cli = new CLI(); + + expect(cli.capitalizeFirstLetter("webpack")).toEqual("Webpack"); }); it("should return an empty string on passing a non-string value", () => { - expect(capitalizeFirstLetter(true)).toEqual(""); + const cli = new CLI(); + + expect(cli.capitalizeFirstLetter(true)).toEqual(""); }); }); diff --git a/test/api/do-install.test.js b/test/api/do-install.test.js new file mode 100644 index 00000000000..5df7cfc0fc8 --- /dev/null +++ b/test/api/do-install.test.js @@ -0,0 +1,219 @@ +"use strict"; + +const CLI = require("../../packages/webpack-cli/lib/webpack-cli"); + +// eslint-disable-next-line node/no-unpublished-require +const stripAnsi = require("strip-ansi"); + +const readlineQuestionMock = jest.fn(); + +jest.mock("readline", () => { + return { + createInterface: jest.fn().mockReturnValue({ + question: readlineQuestionMock, + close: jest.fn().mockImplementation(() => undefined), + }), + }; +}); + +const execaMock = jest.fn(); + +jest.mock("execa", () => execaMock); + +describe("doInstall", () => { + let cli; + let getDefaultPackageManagerSpy; + + beforeEach(() => { + cli = new CLI(); + + getDefaultPackageManagerSpy = jest.spyOn(cli, "getDefaultPackageManager"); + }); + + afterEach(() => { + jest.clearAllMocks(); + + getDefaultPackageManagerSpy.mockRestore(); + }); + + it("should prompt to install using npm if npm is package manager", async () => { + readlineQuestionMock.mockImplementation((_questionTest, cb) => cb("y")); + getDefaultPackageManagerSpy.mockReturnValue("npm"); + + const installResult = await cli.doInstall("test-package"); + + expect(installResult).toBe("test-package"); + expect(readlineQuestionMock.mock.calls.length).toEqual(1); + expect(execaMock.mock.calls.length).toEqual(1); + expect(stripAnsi(readlineQuestionMock.mock.calls[0][0])).toContain( + "Would you like to install 'test-package' package? (That will run 'npm install -D test-package')", + ); + + // install the package using npm + expect(execaMock.mock.calls[0][0]).toEqual("npm install -D test-package"); + }); + + it("should prompt to install using yarn if yarn is package manager", async () => { + readlineQuestionMock.mockImplementation((_questionTest, cb) => cb("y")); + getDefaultPackageManagerSpy.mockReturnValue("yarn"); + + const installResult = await cli.doInstall("test-package"); + + expect(installResult).toBe("test-package"); + expect(readlineQuestionMock.mock.calls.length).toEqual(1); + expect(execaMock.mock.calls.length).toEqual(1); + expect(stripAnsi(readlineQuestionMock.mock.calls[0][0])).toContain( + "Would you like to install 'test-package' package? (That will run 'yarn add -D test-package')", + ); + + // install the package using yarn + expect(execaMock.mock.calls[0][0]).toEqual("yarn add -D test-package"); + }); + + it("should prompt to install using pnpm if pnpm is package manager", async () => { + readlineQuestionMock.mockImplementation((_questionTest, cb) => cb("y")); + getDefaultPackageManagerSpy.mockReturnValue("pnpm"); + + const installResult = await cli.doInstall("test-package"); + + expect(installResult).toBe("test-package"); + expect(readlineQuestionMock.mock.calls.length).toEqual(1); + expect(execaMock.mock.calls.length).toEqual(1); + expect(stripAnsi(readlineQuestionMock.mock.calls[0][0])).toContain( + "Would you like to install 'test-package' package? (That will run 'pnpm install -D test-package')", + ); + + // install the package using npm + expect(execaMock.mock.calls[0][0]).toEqual("pnpm install -D test-package"); + }); + + it("should support pre message", async () => { + readlineQuestionMock.mockImplementation((_questionTest, cb) => cb("y")); + getDefaultPackageManagerSpy.mockReturnValue("npm"); + + const preMessage = jest.fn(); + const installResult = await cli.doInstall("test-package", { preMessage }); + + expect(installResult).toBe("test-package"); + expect(preMessage.mock.calls.length).toEqual(1); + expect(readlineQuestionMock.mock.calls.length).toEqual(1); + expect(execaMock.mock.calls.length).toEqual(1); + expect(stripAnsi(readlineQuestionMock.mock.calls[0][0])).toContain( + "Would you like to install 'test-package' package? (That will run 'npm install -D test-package')", + ); + + // install the package using npm + expect(execaMock.mock.calls[0][0]).toEqual("npm install -D test-package"); + }); + + it("should prompt to install and install using 'y'", async () => { + readlineQuestionMock.mockImplementation((_questionTest, cb) => cb("y")); + getDefaultPackageManagerSpy.mockReturnValue("npm"); + + const installResult = await cli.doInstall("test-package"); + + expect(installResult).toBe("test-package"); + expect(readlineQuestionMock.mock.calls.length).toEqual(1); + expect(execaMock.mock.calls.length).toEqual(1); + expect(stripAnsi(readlineQuestionMock.mock.calls[0][0])).toContain( + "Would you like to install 'test-package' package? (That will run 'npm install -D test-package')", + ); + + // install the package using npm + expect(execaMock.mock.calls[0][0]).toEqual("npm install -D test-package"); + }); + + it("should prompt to install and install using 'yes'", async () => { + readlineQuestionMock.mockImplementation((_questionTest, cb) => cb("yes")); + getDefaultPackageManagerSpy.mockReturnValue("npm"); + + const installResult = await cli.doInstall("test-package"); + + expect(installResult).toBe("test-package"); + expect(readlineQuestionMock.mock.calls.length).toEqual(1); + expect(execaMock.mock.calls.length).toEqual(1); + expect(stripAnsi(readlineQuestionMock.mock.calls[0][0])).toContain( + "Would you like to install 'test-package' package? (That will run 'npm install -D test-package')", + ); + + // install the package using npm + expect(execaMock.mock.calls[0][0]).toEqual("npm install -D test-package"); + }); + + it("should prompt to install and install using 'yEs'", async () => { + readlineQuestionMock.mockImplementation((_questionTest, cb) => cb("yEs")); + getDefaultPackageManagerSpy.mockReturnValue("npm"); + + const installResult = await cli.doInstall("test-package"); + + expect(installResult).toBe("test-package"); + expect(readlineQuestionMock.mock.calls.length).toEqual(1); + expect(execaMock.mock.calls.length).toEqual(1); + expect(stripAnsi(readlineQuestionMock.mock.calls[0][0])).toContain( + "Would you like to install 'test-package' package? (That will run 'npm install -D test-package')", + ); + + // install the package using npm + expect(execaMock.mock.calls[0][0]).toEqual("npm install -D test-package"); + }); + + it("should not install if install is not confirmed", async () => { + readlineQuestionMock.mockImplementation((_questionTest, cb) => cb("n")); + + const mockExit = jest.spyOn(process, "exit").mockImplementation(() => {}); + const installResult = await cli.doInstall("test-package"); + + expect(installResult).toBeUndefined(); + expect(readlineQuestionMock.mock.calls.length).toEqual(1); + // runCommand should not be called, because the installation is not confirmed + expect(execaMock.mock.calls.length).toEqual(0); + expect(mockExit.mock.calls[0][0]).toEqual(2); + + mockExit.mockRestore(); + }); + + it("should not install if install is not confirmed using 'n'", async () => { + readlineQuestionMock.mockImplementation((_questionTest, cb) => cb("n")); + + const mockExit = jest.spyOn(process, "exit").mockImplementation(() => {}); + const installResult = await cli.doInstall("test-package"); + + expect(installResult).toBeUndefined(); + expect(readlineQuestionMock.mock.calls.length).toEqual(1); + // runCommand should not be called, because the installation is not confirmed + expect(execaMock.mock.calls.length).toEqual(0); + expect(mockExit.mock.calls[0][0]).toEqual(2); + + mockExit.mockRestore(); + }); + + it("should not install if install is not confirmed using 'no'", async () => { + readlineQuestionMock.mockImplementation((_questionTest, cb) => cb("no")); + + const mockExit = jest.spyOn(process, "exit").mockImplementation(() => {}); + const installResult = await cli.doInstall("test-package"); + + expect(installResult).toBeUndefined(); + expect(readlineQuestionMock.mock.calls.length).toEqual(1); + // runCommand should not be called, because the installation is not confirmed + expect(execaMock.mock.calls.length).toEqual(0); + expect(mockExit.mock.calls[0][0]).toEqual(2); + + mockExit.mockRestore(); + }); + + it("should not install if install is not confirmed using 'no'", async () => { + readlineQuestionMock.mockImplementation((_questionTest, cb) => cb("No")); + + const mockExit = jest.spyOn(process, "exit").mockImplementation(() => {}); + const installResult = await cli.doInstall("test-package"); + + expect(installResult).toBeUndefined(); + expect(readlineQuestionMock.mock.calls.length).toEqual(1); + // runCommand should not be called, because the installation is not confirmed + expect(execaMock.mock.calls.length).toEqual(0); + expect(mockExit.mock.calls[0][0]).toEqual(2); + + mockExit.mockRestore(); + }); +}); diff --git a/test/api/generators/helpers.test.js b/test/api/generators/helpers.test.js index bb61ca6f2cd..4dc1b8c87b8 100644 --- a/test/api/generators/helpers.test.js +++ b/test/api/generators/helpers.test.js @@ -1,45 +1,55 @@ const path = require("path"); +const CLI = require("../../../packages/webpack-cli/lib/webpack-cli"); const utilsDirectory = { cli: "../../../packages/webpack-cli/lib/utils", generators: "../../../packages/generators/src/utils", }; -jest.setMock(path.join(utilsDirectory.cli, "get-available-installers"), jest.fn()); jest.mock(path.join(utilsDirectory.generators, "scaffold-utils"), () => ({ List: jest.fn(), })); -const getAvailableInstallers = require(path.join(utilsDirectory.cli, "get-available-installers")); -const getPackageManager = require(path.join(utilsDirectory.cli, "get-package-manager")); -const logger = require(path.join(utilsDirectory.cli, "logger")); - const { getInstaller, getTemplate } = require(path.join(utilsDirectory.generators, "helpers")); const { List } = require(path.join(utilsDirectory.generators, "scaffold-utils")); -const context = { - prompt: () => {}, - supportedTemplates: ["default"], - utils: { - getAvailableInstallers, - getPackageManager, - logger, - }, -}; - describe("helpers", () => { + let cli; + let getDefaultPackageManagerSpy; + let context; + + beforeEach(() => { + cli = new CLI(); + context = { + prompt: () => {}, + supportedTemplates: ["default"], + cli: cli, + }; + getDefaultPackageManagerSpy = jest.spyOn(cli, "getDefaultPackageManager"); + }); + + afterEach(() => { + jest.clearAllMocks(); + + getDefaultPackageManagerSpy.mockRestore(); + }); + it("getInstaller() returns the available installer", async () => { // Multiple installers are not available - getAvailableInstallers.mockReturnValue(["npm"]); + getDefaultPackageManagerSpy.mockReturnValue(["npm"]); + + // User chose "pnpm" + List.mockReturnValue({ packager: "npm" }); // Invoke the helper function const installer = await getInstaller.call(context); + expect(installer).toBe("npm"); }); it("getInstaller() invokes a List prompt if multiple installers are available", async () => { // Multiple installers are available - getAvailableInstallers.mockReturnValue(["npm", "yarn", "pnpm"]); + getDefaultPackageManagerSpy.mockReturnValue(["npm", "yarn", "pnpm"]); // User chose "pnpm" List.mockReturnValue({ packager: "pnpm" }); @@ -54,6 +64,7 @@ describe("helpers", () => { // Invoke the helper function const template = await getTemplate.call(context); + expect(template).toBe("default"); }); @@ -63,10 +74,11 @@ describe("helpers", () => { // User chose "default" List.mockReturnValue({ selectedTemplate: "default" }); + const { logger } = cli; const loggerMock = jest.spyOn(logger, "warn").mockImplementation(() => {}); - // Invoke the helper function` const template = await getTemplate.call(context); + expect(template).toBe("default"); expect(loggerMock).toHaveBeenCalled(); }); diff --git a/test/api/get-default-package-manager.test.js b/test/api/get-default-package-manager.test.js new file mode 100644 index 00000000000..b1c55bd4a8a --- /dev/null +++ b/test/api/get-default-package-manager.test.js @@ -0,0 +1,120 @@ +const fs = require("fs"); +const path = require("path"); +const CLI = require("../../packages/webpack-cli/lib/webpack-cli"); + +const syncMock = jest.fn(() => { + return { + stdout: "1.0.0", + }; +}); +jest.setMock("execa", { + sync: syncMock, +}); + +const globalModulesNpmValue = "test-npm"; + +jest.setMock("global-modules", globalModulesNpmValue); + +describe("getPackageManager", () => { + let cli; + + const testYarnLockPath = path.resolve(__dirname, "test-yarn-lock"); + const testNpmLockPath = path.resolve(__dirname, "test-npm-lock"); + const testPnpmLockPath = path.resolve(__dirname, "test-pnpm-lock"); + const testNpmAndPnpmPath = path.resolve(__dirname, "test-npm-and-pnpm"); + const testNpmAndYarnPath = path.resolve(__dirname, "test-npm-and-yarn"); + const testYarnAndPnpmPath = path.resolve(__dirname, "test-yarn-and-pnpm"); + const testAllPath = path.resolve(__dirname, "test-all-lock"); + const noLockPath = path.resolve(__dirname, "no-lock-files"); + + const cwdSpy = jest.spyOn(process, "cwd"); + + beforeAll(() => { + // package-lock.json is ignored by .gitignore, so we simply + // write a lockfile here for testing + if (!fs.existsSync(testNpmLockPath)) { + fs.mkdirSync(testNpmLockPath); + } + + fs.writeFileSync(path.resolve(testNpmLockPath, "package-lock.json"), ""); + fs.writeFileSync(path.resolve(testNpmAndPnpmPath, "package-lock.json"), ""); + fs.writeFileSync(path.resolve(testNpmAndYarnPath, "package-lock.json"), ""); + fs.writeFileSync(path.resolve(testAllPath, "package-lock.json"), ""); + }); + + beforeEach(() => { + cli = new CLI(); + + syncMock.mockClear(); + }); + + it("should find yarn.lock", () => { + cwdSpy.mockReturnValue(testYarnLockPath); + + expect(cli.getDefaultPackageManager()).toEqual("yarn"); + expect(syncMock.mock.calls.length).toEqual(0); + }); + + it("should find package-lock.json", () => { + cwdSpy.mockReturnValue(testNpmLockPath); + + expect(cli.getDefaultPackageManager()).toEqual("npm"); + expect(syncMock.mock.calls.length).toEqual(0); + }); + + it("should find pnpm-lock.yaml", () => { + cwdSpy.mockReturnValue(testPnpmLockPath); + + expect(cli.getDefaultPackageManager()).toEqual("pnpm"); + expect(syncMock.mock.calls.length).toEqual(0); + }); + + it("should prioritize npm over pnpm", () => { + cwdSpy.mockReturnValue(testNpmAndPnpmPath); + + expect(cli.getDefaultPackageManager()).toEqual("npm"); + expect(syncMock.mock.calls.length).toEqual(0); + }); + + it("should prioritize npm over yarn", () => { + cwdSpy.mockReturnValue(testNpmAndYarnPath); + + expect(cli.getDefaultPackageManager()).toEqual("npm"); + expect(syncMock.mock.calls.length).toEqual(0); + }); + + it("should prioritize yarn over pnpm", () => { + cwdSpy.mockReturnValue(testYarnAndPnpmPath); + + expect(cli.getDefaultPackageManager()).toEqual("yarn"); + expect(syncMock.mock.calls.length).toEqual(0); + }); + + it("should prioritize npm with many lock files", () => { + cwdSpy.mockReturnValue(testAllPath); + + expect(cli.getDefaultPackageManager()).toEqual("npm"); + expect(syncMock.mock.calls.length).toEqual(0); + }); + + it("should prioritize global npm over other package managers", () => { + cwdSpy.mockReturnValue(noLockPath); + + expect(cli.getDefaultPackageManager()).toEqual("npm"); + expect(syncMock.mock.calls.length).toEqual(1); + }); + + it("should throw error if no package manager is found", () => { + syncMock.mockImplementation(() => { + throw new Error(); + }); + const mockExit = jest.spyOn(process, "exit").mockImplementation(() => {}); + // Do not print warning in CI + const consoleMock = jest.spyOn(console, "error").mockImplementation(() => {}); + + expect(cli.getDefaultPackageManager()).toBeFalsy(); + expect(mockExit).toBeCalledWith(2); + expect(consoleMock).toHaveBeenCalledTimes(1); + expect(syncMock.mock.calls.length).toEqual(3); // 3 calls for npm, yarn and pnpm + }); +}); diff --git a/test/api/get-package-manager.test.js b/test/api/get-package-manager.test.js deleted file mode 100644 index 9bcb25da85a..00000000000 --- a/test/api/get-package-manager.test.js +++ /dev/null @@ -1,110 +0,0 @@ -const fs = require("fs"); -const path = require("path"); - -const syncMock = jest.fn(() => { - return { - stdout: "1.0.0", - }; -}); -jest.setMock("execa", { - sync: syncMock, -}); -const utilsDirectory = path.resolve(__dirname, "../../packages/webpack-cli/lib/utils/"); -const getPackageManager = require(path.resolve(utilsDirectory, "./get-package-manager")); - -jest.mock(path.resolve(utilsDirectory, "./get-package-manager"), () => jest.fn()); -const globalModulesNpmValue = "test-npm"; -jest.setMock("global-modules", globalModulesNpmValue); -jest.setMock(path.resolve(utilsDirectory, "./prompt"), jest.fn()); - -describe("packageUtils", () => { - describe("getPackageManager", () => { - const testYarnLockPath = path.resolve(__dirname, "test-yarn-lock"); - const testNpmLockPath = path.resolve(__dirname, "test-npm-lock"); - const testPnpmLockPath = path.resolve(__dirname, "test-pnpm-lock"); - const testNpmAndPnpmPath = path.resolve(__dirname, "test-npm-and-pnpm"); - const testNpmAndYarnPath = path.resolve(__dirname, "test-npm-and-yarn"); - const testYarnAndPnpmPath = path.resolve(__dirname, "test-yarn-and-pnpm"); - const testAllPath = path.resolve(__dirname, "test-all-lock"); - const noLockPath = path.resolve(__dirname, "no-lock-files"); - - const cwdSpy = jest.spyOn(process, "cwd"); - - beforeAll(() => { - // package-lock.json is ignored by .gitignore, so we simply - // write a lockfile here for testing - if (!fs.existsSync(testNpmLockPath)) { - fs.mkdirSync(testNpmLockPath); - } - fs.writeFileSync(path.resolve(testNpmLockPath, "package-lock.json"), ""); - fs.writeFileSync(path.resolve(testNpmAndPnpmPath, "package-lock.json"), ""); - fs.writeFileSync(path.resolve(testNpmAndYarnPath, "package-lock.json"), ""); - fs.writeFileSync(path.resolve(testAllPath, "package-lock.json"), ""); - }); - - beforeEach(() => { - syncMock.mockClear(); - }); - - it("should find yarn.lock", () => { - cwdSpy.mockReturnValue(testYarnLockPath); - expect(getPackageManager()).toEqual("yarn"); - expect(syncMock.mock.calls.length).toEqual(0); - }); - - it("should find package-lock.json", () => { - cwdSpy.mockReturnValue(testNpmLockPath); - expect(getPackageManager()).toEqual("npm"); - expect(syncMock.mock.calls.length).toEqual(0); - }); - - it("should find pnpm-lock.yaml", () => { - cwdSpy.mockReturnValue(testPnpmLockPath); - expect(getPackageManager()).toEqual("pnpm"); - expect(syncMock.mock.calls.length).toEqual(0); - }); - - it("should prioritize npm over pnpm", () => { - cwdSpy.mockReturnValue(testNpmAndPnpmPath); - expect(getPackageManager()).toEqual("npm"); - expect(syncMock.mock.calls.length).toEqual(0); - }); - - it("should prioritize npm over yarn", () => { - cwdSpy.mockReturnValue(testNpmAndYarnPath); - expect(getPackageManager()).toEqual("npm"); - expect(syncMock.mock.calls.length).toEqual(0); - }); - - it("should prioritize yarn over pnpm", () => { - cwdSpy.mockReturnValue(testYarnAndPnpmPath); - expect(getPackageManager()).toEqual("yarn"); - expect(syncMock.mock.calls.length).toEqual(0); - }); - - it("should prioritize npm with many lock files", () => { - cwdSpy.mockReturnValue(testAllPath); - expect(getPackageManager()).toEqual("npm"); - expect(syncMock.mock.calls.length).toEqual(0); - }); - - it("should prioritize global npm over other package managers", () => { - cwdSpy.mockReturnValue(noLockPath); - expect(getPackageManager()).toEqual("npm"); - expect(syncMock.mock.calls.length).toEqual(1); - }); - - it("should throw error if no package manager is found", () => { - syncMock.mockImplementation(() => { - throw new Error(); - }); - const mockExit = jest.spyOn(process, "exit").mockImplementation(() => {}); - // Do not print warning in CI - const consoleMock = jest.spyOn(console, "error").mockImplementation(() => {}); - expect(getPackageManager()).toBeFalsy(); - expect(mockExit).toBeCalledWith(2); - expect(consoleMock).toHaveBeenCalledTimes(1); - expect(syncMock.mock.calls.length).toEqual(3); // 3 calls for npm, yarn and pnpm - }); - }); -}); diff --git a/test/api/prompt-installation.test.js b/test/api/prompt-installation.test.js deleted file mode 100644 index b3281c6f8fe..00000000000 --- a/test/api/prompt-installation.test.js +++ /dev/null @@ -1,121 +0,0 @@ -"use strict"; - -const path = require("path"); - -// eslint-disable-next-line node/no-unpublished-require -const stripAnsi = require("strip-ansi"); -const globalModulesNpmValue = "test-npm"; -const utilsDirectory = path.resolve(__dirname, "../../packages/webpack-cli/lib/utils/"); - -jest.setMock("global-modules", globalModulesNpmValue); -jest.setMock(path.resolve(utilsDirectory, "./prompt"), jest.fn()); -jest.setMock(path.resolve(utilsDirectory, "./run-command"), jest.fn()); -jest.setMock(path.resolve(utilsDirectory, "./package-exists"), jest.fn()); -jest.setMock(path.resolve(utilsDirectory, "./get-package-manager"), jest.fn()); - -const getPackageManager = require(path.resolve(utilsDirectory, "./get-package-manager")); -const packageExists = require(path.resolve(utilsDirectory, "./package-exists")); -const promptInstallation = require(path.resolve(utilsDirectory, "./prompt-installation")); -const runCommand = require(path.resolve(utilsDirectory, "./run-command")); -const prompt = require(path.resolve(utilsDirectory, "./prompt")); - -describe("promptInstallation", () => { - beforeAll(() => { - packageExists.mockReturnValue(true); - }); - beforeEach(() => { - runCommand.mockClear(); - prompt.mockClear(); - }); - - it("should prompt to install using npm if npm is package manager", async () => { - prompt.mockReturnValue(true); - - getPackageManager.mockReturnValue("npm"); - - const preMessage = jest.fn(); - const promptResult = await promptInstallation("test-package", preMessage); - - expect(promptResult).toBeTruthy(); - expect(preMessage.mock.calls.length).toEqual(1); - expect(prompt.mock.calls.length).toEqual(1); - expect(runCommand.mock.calls.length).toEqual(1); - expect(stripAnsi(prompt.mock.calls[0][0].message)).toContain( - "Would you like to install 'test-package' package? (That will run 'npm install -D test-package')", - ); - - // install the package using npm - expect(runCommand.mock.calls[0][0]).toEqual("npm install -D test-package"); - }); - - it("should prompt to install using yarn if yarn is package manager", async () => { - prompt.mockReturnValue({ installConfirm: true }); - - getPackageManager.mockReturnValue("yarn"); - - const promptResult = await promptInstallation("test-package"); - - expect(promptResult).toBeTruthy(); - expect(prompt.mock.calls.length).toEqual(1); - expect(runCommand.mock.calls.length).toEqual(1); - expect(stripAnsi(prompt.mock.calls[0][0].message)).toContain( - "Would you like to install 'test-package' package? (That will run 'yarn add -D test-package')", - ); - - // install the package using yarn - expect(runCommand.mock.calls[0][0]).toEqual("yarn add -D test-package"); - }); - - it("should prompt to install using pnpm if pnpm is package manager", async () => { - prompt.mockReturnValue({ installConfirm: true }); - - getPackageManager.mockReturnValue("pnpm"); - - const promptResult = await promptInstallation("test-package"); - - expect(promptResult).toBeTruthy(); - expect(prompt.mock.calls.length).toEqual(1); - expect(runCommand.mock.calls.length).toEqual(1); - expect(stripAnsi(prompt.mock.calls[0][0].message)).toContain( - "Would you like to install 'test-package' package? (That will run 'pnpm install -D test-package')", - ); - - // install the package using npm - expect(runCommand.mock.calls[0][0]).toEqual("pnpm install -D test-package"); - }); - - it("should support pre message", async () => { - prompt.mockReturnValue({ installConfirm: true }); - - getPackageManager.mockReturnValue("npm"); - - const preMessage = jest.fn(); - const promptResult = await promptInstallation("test-package", preMessage); - - expect(promptResult).toBeTruthy(); - expect(preMessage.mock.calls.length).toEqual(1); - expect(prompt.mock.calls.length).toEqual(1); - expect(runCommand.mock.calls.length).toEqual(1); - expect(stripAnsi(prompt.mock.calls[0][0].message)).toContain( - "Would you like to install 'test-package' package? (That will run 'npm install -D test-package')", - ); - - // install the package using npm - expect(runCommand.mock.calls[0][0]).toEqual("npm install -D test-package"); - }); - - it("should not install if install is not confirmed", async () => { - prompt.mockReturnValue(false); - - const mockExit = jest.spyOn(process, "exit").mockImplementation(() => {}); - const promptResult = await promptInstallation("test-package"); - - expect(promptResult).toBeUndefined(); - expect(prompt.mock.calls.length).toEqual(1); - // runCommand should not be called, because the installation is not confirmed - expect(runCommand.mock.calls.length).toEqual(0); - expect(mockExit.mock.calls[0][0]).toEqual(2); - - mockExit.mockRestore(); - }); -}); diff --git a/test/api/prompt.test.js b/test/api/prompt.test.js deleted file mode 100755 index 01805868a57..00000000000 --- a/test/api/prompt.test.js +++ /dev/null @@ -1,66 +0,0 @@ -const prompt = require("../../packages/webpack-cli/lib/utils/prompt"); -const { Writable } = require("stream"); - -describe("prompt", () => { - class MyWritable extends Writable { - constructor(answer) { - super(); - this.answer = answer; - } - _write(data, e, cb) { - process.stdin.push(this.answer); - cb(null, data); - } - } - - it("should work with default response", async () => { - const myWritable = new MyWritable("\r"); - - const resultSuccess = await prompt({ - message: "message", - defaultResponse: "yes", - stream: myWritable, - }); - - const resultFail = await prompt({ - message: "message", - defaultResponse: "no", - stream: myWritable, - }); - - expect(resultSuccess).toBe(true); - expect(resultFail).toBe(false); - }); - - it('should work with "yes" && "y" response', async () => { - const myWritable1 = new MyWritable("yes\r"); - const myWritable2 = new MyWritable("y\r"); - - const resultSuccess1 = await prompt({ - message: "message", - defaultResponse: "no", - stream: myWritable1, - }); - - const resultSuccess2 = await prompt({ - message: "message", - defaultResponse: "no", - stream: myWritable2, - }); - - expect(resultSuccess1).toBe(true); - expect(resultSuccess2).toBe(true); - }); - - it("should work with unknown response", async () => { - const myWritable = new MyWritable("unknown\r"); - - const result = await prompt({ - message: "message", - defaultResponse: "yes", - stream: myWritable, - }); - - expect(result).toBe(false); - }); -}); diff --git a/yarn.lock b/yarn.lock index 4785ef3a1b7..34cc6123223 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2085,14 +2085,6 @@ "@typescript-eslint/typescript-estree" "4.32.0" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.31.2": - version "4.31.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.2.tgz#1d528cb3ed3bcd88019c20a57c18b897b073923a" - integrity sha512-2JGwudpFoR/3Czq6mPpE8zBPYdHWFGL6lUNIGolbKQeSNv4EAiHaR5GVDQaLA0FwgcdcMtRk+SBJbFGL7+La5w== - dependencies: - "@typescript-eslint/types" "4.31.2" - "@typescript-eslint/visitor-keys" "4.31.2" - "@typescript-eslint/scope-manager@4.32.0": version "4.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.32.0.tgz#e03c8668f8b954072b3f944d5b799c0c9225a7d5" @@ -2101,29 +2093,11 @@ "@typescript-eslint/types" "4.32.0" "@typescript-eslint/visitor-keys" "4.32.0" -"@typescript-eslint/types@4.31.2": - version "4.31.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.2.tgz#2aea7177d6d744521a168ed4668eddbd912dfadf" - integrity sha512-kWiTTBCTKEdBGrZKwFvOlGNcAsKGJSBc8xLvSjSppFO88AqGxGNYtF36EuEYG6XZ9vT0xX8RNiHbQUKglbSi1w== - "@typescript-eslint/types@4.32.0": version "4.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.32.0.tgz#52c633c18da47aee09449144bf59565ab36df00d" integrity sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w== -"@typescript-eslint/typescript-estree@4.31.2": - version "4.31.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.2.tgz#abfd50594d8056b37e7428df3b2d185ef2d0060c" - integrity sha512-ieBq8U9at6PvaC7/Z6oe8D3czeW5d//Fo1xkF/s9394VR0bg/UaMYPdARiWyKX+lLEjY3w/FNZJxitMsiWv+wA== - dependencies: - "@typescript-eslint/types" "4.31.2" - "@typescript-eslint/visitor-keys" "4.31.2" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.32.0": version "4.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz#db00ccc41ccedc8d7367ea3f50c6994b8efa9f3b" @@ -2137,14 +2111,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.31.2": - version "4.31.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.2.tgz#7d5b4a4705db7fe59ecffb273c1d082760f635cc" - integrity sha512-PrBId7EQq2Nibns7dd/ch6S6/M4/iwLM9McbgeEbCXfxdwRUNxJ4UNreJ6Gh3fI2GNKNrWnQxKL7oCPmngKBug== - dependencies: - "@typescript-eslint/types" "4.31.2" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.32.0": version "4.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz#455ba8b51242f2722a497ffae29313f33b14cb7f" @@ -3395,6 +3361,11 @@ colorette@^1.2.1, colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== +colorette@^2.0.11: + version "2.0.11" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.11.tgz#3b4cf8407edb24dd54fdbfd350f5ed252abbc64a" + integrity sha512-ZqwF8QRKzkhpr6aOvqzsZgtdOh+ItZBrbHDJ3pEAOoLr79oVSRxviVKDHVvrBmUhK5NcGRT9RATQknOan52UXQ== + colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" From 2dc52b25deec9d5d20518998cd370b24600c2cfb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Oct 2021 19:44:05 +0300 Subject: [PATCH 162/173] chore(deps-dev): bump jest-watch-typeahead --- yarn.lock | 88 ++++--------------------------------------------------- 1 file changed, 6 insertions(+), 82 deletions(-) diff --git a/yarn.lock b/yarn.lock index 34cc6123223..9fc3a53067c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -637,18 +637,6 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.0.1": - version "27.0.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.0.1.tgz#c6acfec201f9b6823596eb6c4fcd77c89a8b27e9" - integrity sha512-50E6nN2F5cAXn1lDljn0gE9F0WFXHYz/u0EeR7sOt4nbRPNli34ckbl6CUDaDABJbHt62DYnyQAIB3KgdzwKDw== - dependencies: - "@jest/types" "^27.0.1" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^27.0.1" - jest-util "^27.0.1" - slash "^3.0.0" - "@jest/console@^27.2.4": version "27.2.4" resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.2.4.tgz#2f1a4bf82b9940065d4818fac271def99ec55e5e" @@ -765,16 +753,6 @@ graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^27.0.1": - version "27.0.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.1.tgz#8fb97214268ea21cf8cfb83edc0f17e558b3466d" - integrity sha512-5aa+ibX2dsGSDLKaQMZb453MqjJU/CRVumebXfaJmuzuGE4qf87yQ2QZ6PEpEtBwVUEgrJCzi3jLCRaUbksSuw== - dependencies: - "@jest/console" "^27.0.1" - "@jest/types" "^27.0.1" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - "@jest/test-result@^27.2.4": version "27.2.4" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.2.4.tgz#d1ca8298d168f1b0be834bfb543b1ac0294c05d7" @@ -827,17 +805,6 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jest/types@^27.0.1": - version "27.0.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.1.tgz#631738c942e70045ebbf42a3f9b433036d3845e4" - integrity sha512-8A25RRV4twZutsx2D+7WphnDsp7If9Yu6ko0Gxwrwv8BiWESFzka34+Aa2kC8w9xewt7SDuCUSZ6IiAFVj3PRg== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - "@jest/types@^27.0.6": version "27.0.6" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.6.tgz#9a992bc517e0c49f035938b8549719c2de40706b" @@ -6549,21 +6516,6 @@ jest-matcher-utils@^27.2.4: jest-get-type "^27.0.6" pretty-format "^27.2.4" -jest-message-util@^27.0.1: - version "27.0.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.1.tgz#382b7c55d8e0b1aba9eeb41d3cfdd34e451210ed" - integrity sha512-w8BfON2GwWORkos8BsxcwwQrLkV2s1ENxSRXK43+6yuquDE2hVxES/jrFqOArpP1ETVqqMmktU6iGkG8ncVzeA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.0.1" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.4" - pretty-format "^27.0.1" - slash "^3.0.0" - stack-utils "^2.0.3" - jest-message-util@^27.2.4: version "27.2.4" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.2.4.tgz#667e8c0f2b973156d1bac7398a7f677705cafaca" @@ -6592,12 +6544,7 @@ jest-pnp-resolver@^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@^27.0.0: - version "27.0.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.1.tgz#69d4b1bf5b690faa3490113c47486ed85dd45b68" - integrity sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ== - -jest-regex-util@^27.0.6: +jest-regex-util@^27.0.0, jest-regex-util@^27.0.6: version "27.0.6" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5" integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ== @@ -6726,7 +6673,7 @@ jest-snapshot@^27.2.4: pretty-format "^27.2.4" semver "^7.3.2" -jest-util@^27.0.0, jest-util@^27.0.1: +jest-util@^27.0.0: version "27.0.6" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.6.tgz#e8e04eec159de2f4d5f57f795df9cdc091e50297" integrity sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ== @@ -6763,9 +6710,9 @@ jest-validate@^27.2.4: pretty-format "^27.2.4" jest-watch-typeahead@^0.6.1: - version "0.6.4" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.4.tgz#ea70bf1bec34bd4f55b5b72d471b02d997899c3e" - integrity sha512-tGxriteVJqonyrDj/xZHa0E2glKMiglMLQqISLCjxLUfeueRBh9VoRF2FKQyYO2xOqrWDTg7781zUejx411ZXA== + version "0.6.5" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.5.tgz#b809f79eed106b6cf832e59a5fe54481f2d1918e" + integrity sha512-GIbV6h37/isatMDtqZlA8Q5vC6T3w+5qdvtF+3LIkPc58zEWzbKmTHvlUIp3wvBm400RzrQWcVPcsAJqKWu7XQ== dependencies: ansi-escapes "^4.3.1" chalk "^4.0.0" @@ -6775,20 +6722,7 @@ jest-watch-typeahead@^0.6.1: string-length "^4.0.1" strip-ansi "^6.0.0" -jest-watcher@^27.0.0: - version "27.0.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.1.tgz#61b9403d7b498161f6aa6124602363525ac3efc2" - integrity sha512-Chp9c02BN0IgEbtGreyAhGqIsOrn9a0XnzbuXOxdW1+cW0Tjh12hMzHDIdLFHpYP/TqaMTmPHaJ5KWvpCCrNFw== - dependencies: - "@jest/test-result" "^27.0.1" - "@jest/types" "^27.0.1" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^27.0.1" - string-length "^4.0.1" - -jest-watcher@^27.2.4: +jest-watcher@^27.0.0, jest-watcher@^27.2.4: version "27.2.4" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.2.4.tgz#b1d5c39ab94f59f4f35f66cc96f7761a10e0cfc4" integrity sha512-LXC/0+dKxhK7cfF7reflRYlzDIaQE+fL4ynhKhzg8IMILNMuI4xcjXXfUJady7OR4/TZeMg7X8eHx8uan9vqaQ== @@ -8816,16 +8750,6 @@ pretty-format@^26.0.0, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^27.0.1: - version "27.0.6" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.6.tgz#ab770c47b2c6f893a21aefc57b75da63ef49a11f" - integrity sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ== - dependencies: - "@jest/types" "^27.0.6" - ansi-regex "^5.0.0" - ansi-styles "^5.0.0" - react-is "^17.0.1" - pretty-format@^27.2.4: version "27.2.4" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.2.4.tgz#08ea39c5eab41b082852d7093059a091f6ddc748" From 1d38499b4d0cee5bfb0c02c92e691aa6702b91cc Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Sat, 2 Oct 2021 17:40:35 +0300 Subject: [PATCH 163/173] fix: npx init (#2980) --- packages/generators/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/generators/package.json b/packages/generators/package.json index fded97134f6..14d953bf273 100644 --- a/packages/generators/package.json +++ b/packages/generators/package.json @@ -23,11 +23,11 @@ ], "dependencies": { "yeoman-environment": "^2.10.3", - "yeoman-generator": "^4.12.0" + "yeoman-generator": "^4.12.0", + "webpack-cli": "4.x.x" }, "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" + "webpack": "4.x.x || 5.x.x" }, "peerDependenciesMeta": { "prettier": { From 65cc1fcdf99438a97d8124b18702208852fb6966 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Sat, 2 Oct 2021 19:23:33 +0300 Subject: [PATCH 164/173] refactor: code --- package.json | 2 +- packages/configtest/src/index.ts | 2 +- packages/webpack-cli/lib/webpack-cli.js | 388 +++++++++---------- test/api/resolveConfig/resolveConfig.test.js | 12 +- test/build/stats/config/stats.test.js | 2 +- yarn.lock | 127 +++--- 6 files changed, 256 insertions(+), 277 deletions(-) diff --git a/package.json b/package.json index e1121e02041..42107be1c86 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "ts-jest": "^27.0.2", "ts-node": "^9.1.1", "typescript": "^4.1.3", - "webpack": "^5.45.1", + "webpack": "^5.56.0", "webpack-bundle-analyzer": "^4.3.0", "webpack-dev-server": "^3.11.2" } diff --git a/packages/configtest/src/index.ts b/packages/configtest/src/index.ts index f71eec6db98..d53c6f0df4e 100644 --- a/packages/configtest/src/index.ts +++ b/packages/configtest/src/index.ts @@ -15,7 +15,7 @@ class ConfigTestCommand { async (configPath: string | undefined): Promise => { cli.webpack = await cli.loadWebpack(); - const config = await cli.resolveConfig(configPath ? { config: [configPath] } : {}); + const config = await cli.loadConfig(configPath ? { config: [configPath] } : {}); const configPaths = new Set(); if (Array.isArray(config.options)) { diff --git a/packages/webpack-cli/lib/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index 8b5b63862c4..74f6f5c6a45 100644 --- a/packages/webpack-cli/lib/webpack-cli.js +++ b/packages/webpack-cli/lib/webpack-cli.js @@ -312,10 +312,6 @@ class WebpackCLI { return result; } - async loadWebpack(handleError = true) { - return this.tryRequireThenImport(WEBPACK_PACKAGE, handleError); - } - async makeCommand(commandOptions, options, action) { const alreadyLoaded = this.program.commands.find( (command) => @@ -948,10 +944,8 @@ class WebpackCLI { return options; } - applyNodeEnv(options) { - if (typeof options.nodeEnv === "string") { - process.env.NODE_ENV = options.nodeEnv; - } + async loadWebpack(handleError = true) { + return this.tryRequireThenImport(WEBPACK_PACKAGE, handleError); } async run(args, parseOptions) { @@ -1128,7 +1122,6 @@ class WebpackCLI { try { loadedCommand = await this.tryRequireThenImport(pkg, false); } catch (error) { - console.log(error); // Ignore, command is not installed return; @@ -1706,91 +1699,93 @@ class WebpackCLI { await this.program.parseAsync(args, parseOptions); } - async loadConfig(configPath, argv = {}) { - const ext = path.extname(configPath); + async loadConfig(options) { const interpret = require("interpret"); - const interpreted = Object.keys(interpret.jsVariants).find((variant) => variant === ext); + const loadConfigByPath = async (configPath, argv = {}) => { + const ext = path.extname(configPath); + const interpreted = Object.keys(interpret.jsVariants).find((variant) => variant === ext); - if (interpreted) { - const rechoir = require("rechoir"); + if (interpreted) { + const rechoir = require("rechoir"); + + try { + rechoir.prepare(interpret.extensions, configPath); + } catch (error) { + if (error.failures) { + this.logger.error(`Unable load '${configPath}'`); + this.logger.error(error.message); + error.failures.forEach((failure) => { + this.logger.error(failure.error.message); + }); + this.logger.error("Please install one of them"); + process.exit(2); + } + + this.logger.error(error); + process.exit(2); + } + } + + let options; try { - rechoir.prepare(interpret.extensions, configPath); + options = await this.tryRequireThenImport(configPath, false); } catch (error) { - if (error.failures) { - this.logger.error(`Unable load '${configPath}'`); + this.logger.error(`Failed to load '${configPath}' config`); + + if (this.isValidationError(error)) { this.logger.error(error.message); - error.failures.forEach((failure) => { - this.logger.error(failure.error.message); - }); - this.logger.error("Please install one of them"); - process.exit(2); + } else { + this.logger.error(error); } - this.logger.error(error); process.exit(2); } - } - - let options; - try { - options = await this.tryRequireThenImport(configPath, false); - } catch (error) { - this.logger.error(`Failed to load '${configPath}' config`); + if (Array.isArray(options)) { + await Promise.all( + options.map(async (_, i) => { + if (typeof options[i].then === "function") { + options[i] = await options[i]; + } - if (this.isValidationError(error)) { - this.logger.error(error.message); + // `Promise` may return `Function` + if (typeof options[i] === "function") { + // when config is a function, pass the env from args to the config function + options[i] = await options[i](argv.env, argv); + } + }), + ); } else { - this.logger.error(error); - } - - process.exit(2); - } - - if (Array.isArray(options)) { - await Promise.all( - options.map(async (_, i) => { - if (typeof options[i].then === "function") { - options[i] = await options[i]; - } + if (typeof options.then === "function") { + options = await options; + } - // `Promise` may return `Function` - if (typeof options[i] === "function") { - // when config is a function, pass the env from args to the config function - options[i] = await options[i](argv.env, argv); - } - }), - ); - } else { - if (typeof options.then === "function") { - options = await options; + // `Promise` may return `Function` + if (typeof options === "function") { + // when config is a function, pass the env from args to the config function + options = await options(argv.env, argv); + } } - // `Promise` may return `Function` - if (typeof options === "function") { - // when config is a function, pass the env from args to the config function - options = await options(argv.env, argv); - } - } + const isObject = (value) => typeof value === "object" && value !== null; - const isObject = (value) => typeof value === "object" && value !== null; + if (!isObject(options) && !Array.isArray(options)) { + this.logger.error(`Invalid configuration in '${configPath}'`); - if (!isObject(options) && !Array.isArray(options)) { - this.logger.error(`Invalid configuration in '${configPath}'`); - - process.exit(2); - } + process.exit(2); + } - return { options, path: configPath }; - } + return { options, path: configPath }; + }; - async resolveConfig(options) { const config = { options: {}, path: new WeakMap() }; if (options.config && options.config.length > 0) { const loadedConfigs = await Promise.all( - options.config.map((configPath) => this.loadConfig(path.resolve(configPath), options.argv)), + options.config.map((configPath) => + loadConfigByPath(path.resolve(configPath), options.argv), + ), ); config.options = []; @@ -1826,8 +1821,6 @@ class WebpackCLI { config.options = config.options.length === 1 ? config.options[0] : config.options; } else { - const interpret = require("interpret"); - // Order defines the priority, in decreasing order const defaultConfigFiles = [ "webpack.config", @@ -1856,7 +1849,7 @@ class WebpackCLI { } if (foundDefaultConfigFile) { - const loadedConfig = await this.loadConfig(foundDefaultConfigFile.path, options.argv); + const loadedConfig = await loadConfigByPath(foundDefaultConfigFile.path, options.argv); config.options = loadedConfig.options; @@ -1926,20 +1919,19 @@ class WebpackCLI { return config; } - runFunctionOnOptions(options, fn) { - if (Array.isArray(options)) { - for (let item of options) { - item = fn(item); + async buildConfig(config, options) { + const runFunctionOnEachConfig = (options, fn) => { + if (Array.isArray(options)) { + for (let item of options) { + item = fn(item); + } + } else { + options = fn(options); } - } else { - options = fn(options); - } - return options; - } + return options; + }; - // TODO refactor - async applyOptions(config, options) { if (options.analyze) { if (!this.checkPackageExists("webpack-bundle-analyzer")) { await this.doInstall("webpack-bundle-analyzer", { @@ -1970,9 +1962,12 @@ class WebpackCLI { process.exit(2); } - const outputHints = (configOptions) => { + const CLIPlugin = await this.tryRequireThenImport("./plugins/CLIPlugin"); + + const internalBuildConfig = (item) => { + // Output warnings if ( - configOptions.watch && + item.watch && options.argv && options.argv.env && (options.argv.env["WEBPACK_WATCH"] || options.argv.env["WEBPACK_SERVE"]) @@ -1984,17 +1979,12 @@ class WebpackCLI { ); if (options.argv.env["WEBPACK_SERVE"]) { - configOptions.watch = false; + item.watch = false; } } - return configOptions; - }; - - this.runFunctionOnOptions(config.options, outputHints); - - if (this.webpack.cli) { - const processArguments = (configOptions) => { + // Apply options + if (this.webpack.cli) { const args = this.getBuiltInOptions() .filter((flag) => flag.group === "core") .reduce((accumulator, flag) => { @@ -2017,7 +2007,7 @@ class WebpackCLI { return accumulator; }, {}); - const problems = this.webpack.cli.processArguments(args, configOptions, values); + const problems = this.webpack.cli.processArguments(args, item, values); if (problems) { const groupBy = (xs, key) => { @@ -2050,133 +2040,109 @@ class WebpackCLI { process.exit(2); } - return configOptions; - }; - - this.runFunctionOnOptions(config.options, processArguments); - - const setupDefaultOptions = (configOptions) => { - // No need to run for webpack@4 - if (configOptions.cache && configOptions.cache.type === "filesystem") { - const configPath = config.path.get(configOptions); + // Setup default cache options + if (item.cache && item.cache.type === "filesystem") { + const configPath = config.path.get(item); if (configPath) { - if (!configOptions.cache.buildDependencies) { - configOptions.cache.buildDependencies = {}; + if (!item.cache.buildDependencies) { + item.cache.buildDependencies = {}; } - if (!configOptions.cache.buildDependencies.defaultConfig) { - configOptions.cache.buildDependencies.defaultConfig = []; + if (!item.cache.buildDependencies.defaultConfig) { + item.cache.buildDependencies.defaultConfig = []; } if (Array.isArray(configPath)) { - configPath.forEach((item) => { - configOptions.cache.buildDependencies.defaultConfig.push(item); + configPath.forEach((oneOfConfigPath) => { + item.cache.buildDependencies.defaultConfig.push(oneOfConfigPath); }); } else { - configOptions.cache.buildDependencies.defaultConfig.push(configPath); + item.cache.buildDependencies.defaultConfig.push(configPath); } } } + } - return configOptions; - }; - - this.runFunctionOnOptions(config.options, setupDefaultOptions); - } - - // Logic for webpack@4 - // TODO remove after drop webpack@4 - const processLegacyArguments = (configOptions) => { + // Setup legacy logic for webpack@4 + // TODO respect `--entry-reset` in th next major release + // TODO drop in the next major release if (options.entry) { - configOptions.entry = options.entry; + item.entry = options.entry; } if (options.outputPath) { - configOptions.output = { - ...configOptions.output, - ...{ path: path.resolve(options.outputPath) }, - }; + item.output = { ...item.output, ...{ path: path.resolve(options.outputPath) } }; } if (options.target) { - configOptions.target = options.target; + item.target = options.target; } if (typeof options.devtool !== "undefined") { - configOptions.devtool = options.devtool; - } - - if (options.mode) { - configOptions.mode = options.mode; - } else if ( - !configOptions.mode && - process.env && - process.env.NODE_ENV && - (process.env.NODE_ENV === "development" || - process.env.NODE_ENV === "production" || - process.env.NODE_ENV === "none") - ) { - configOptions.mode = process.env.NODE_ENV; + item.devtool = options.devtool; } if (options.name) { - configOptions.name = options.name; + item.name = options.name; } if (typeof options.stats !== "undefined") { - configOptions.stats = options.stats; + item.stats = options.stats; } if (typeof options.watch !== "undefined") { - configOptions.watch = options.watch; + item.watch = options.watch; } if (typeof options.watchOptionsStdin !== "undefined") { - configOptions.watchOptions = { - ...configOptions.watchOptions, - ...{ stdin: options.watchOptionsStdin }, - }; + item.watchOptions = { ...item.watchOptions, ...{ stdin: options.watchOptionsStdin } }; } - return configOptions; - }; + if (options.mode) { + item.mode = options.mode; + } - this.runFunctionOnOptions(config.options, processLegacyArguments); + // Respect `process.env.NODE_ENV` + if ( + !item.mode && + process.env && + process.env.NODE_ENV && + (process.env.NODE_ENV === "development" || + process.env.NODE_ENV === "production" || + process.env.NODE_ENV === "none") + ) { + item.mode = process.env.NODE_ENV; + } - // Apply `stats` and `stats.colors` options - const applyStatsOption = (configOptions) => { + // Setup stats // TODO remove after drop webpack@4 const statsForWebpack4 = this.webpack.Stats && this.webpack.Stats.presetToOptions; if (statsForWebpack4) { - if (typeof configOptions.stats === "undefined") { - configOptions.stats = {}; + if (typeof item.stats === "undefined") { + item.stats = {}; + } else if (typeof item.stats === "boolean") { + item.stats = this.webpack.Stats.presetToOptions(item.stats); } else if ( - typeof configOptions.stats === "boolean" || - typeof configOptions.stats === "string" + typeof item.stats === "string" && + (item.stats === "none" || + item.stats === "verbose" || + item.stats === "detailed" || + item.stats === "normal" || + item.stats === "minimal" || + item.stats === "errors-only" || + item.stats === "errors-warnings") ) { - if ( - typeof configOptions.stats === "string" && - configOptions.stats !== "none" && - configOptions.stats !== "verbose" && - configOptions.stats !== "detailed" && - configOptions.stats !== "minimal" && - configOptions.stats !== "errors-only" && - configOptions.stats !== "errors-warnings" - ) { - return configOptions; - } - - configOptions.stats = this.webpack.Stats.presetToOptions(configOptions.stats); + item.stats = this.webpack.Stats.presetToOptions(item.stats); } } else { - if (typeof configOptions.stats === "undefined") { - configOptions.stats = { preset: "normal" }; - } else if (typeof configOptions.stats === "boolean") { - configOptions.stats = configOptions.stats ? { preset: "normal" } : { preset: "none" }; - } else if (typeof configOptions.stats === "string") { - configOptions.stats = { preset: configOptions.stats }; + if (typeof item.stats === "undefined") { + item.stats = { preset: "normal" }; + } else if (typeof item.stats === "boolean") { + item.stats = item.stats ? { preset: "normal" } : { preset: "none" }; + } else if (typeof item.stats === "string") { + item.stats = { preset: item.stats }; } } @@ -2187,61 +2153,43 @@ class WebpackCLI { colors = Boolean(this.isColorSupportChanged); } // From stats - else if (typeof configOptions.stats.colors !== "undefined") { - colors = configOptions.stats.colors; + else if (typeof item.stats.colors !== "undefined") { + colors = item.stats.colors; } // Default else { colors = Boolean(this.colors.isColorSupported); } - configOptions.stats.colors = colors; - - return configOptions; - }; - - this.runFunctionOnOptions(config.options, applyStatsOption); - - return config; - } - - async applyCLIPlugin(config, cliOptions) { - const CLIPlugin = await this.tryRequireThenImport("./plugins/CLIPlugin"); + // TODO remove after drop webpack v4 + if (typeof item.stats === "object" && item.stats !== null) { + item.stats.colors = colors; + } - const addCLIPlugin = (options) => { - if (!options.plugins) { - options.plugins = []; + // Apply CLI plugin + if (!item.plugins) { + item.plugins = []; } - options.plugins.unshift( + item.plugins.unshift( new CLIPlugin({ - configPath: config.path.get(options), - helpfulOutput: !cliOptions.json, - hot: cliOptions.hot, - progress: cliOptions.progress, - prefetch: cliOptions.prefetch, - analyze: cliOptions.analyze, + configPath: config.path.get(item), + helpfulOutput: !options.json, + hot: options.hot, + progress: options.progress, + prefetch: options.prefetch, + analyze: options.analyze, }), ); return options; }; - this.runFunctionOnOptions(config.options, addCLIPlugin); + runFunctionOnEachConfig(config.options, internalBuildConfig); return config; } - needWatchStdin(compiler) { - if (compiler.compilers) { - return compiler.compilers.some( - (compiler) => compiler.options.watchOptions && compiler.options.watchOptions.stdin, - ); - } - - return compiler.options.watchOptions && compiler.options.watchOptions.stdin; - } - isValidationError(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 @@ -2252,12 +2200,12 @@ class WebpackCLI { } async createCompiler(options, callback) { - this.applyNodeEnv(options); - - let config = await this.resolveConfig(options); + if (typeof options.nodeEnv === "string") { + process.env.NODE_ENV = options.nodeEnv; + } - config = await this.applyOptions(config, options); - config = await this.applyCLIPlugin(config, options); + let config = await this.loadConfig(options); + config = await this.buildConfig(config, options); let compiler; @@ -2293,6 +2241,16 @@ class WebpackCLI { return compiler; } + needWatchStdin(compiler) { + if (compiler.compilers) { + return compiler.compilers.some( + (compiler) => compiler.options.watchOptions && compiler.options.watchOptions.stdin, + ); + } + + return compiler.options.watchOptions && compiler.options.watchOptions.stdin; + } + async runWebpack(options, isWatchCommand) { // eslint-disable-next-line prefer-const let compiler; diff --git a/test/api/resolveConfig/resolveConfig.test.js b/test/api/resolveConfig/resolveConfig.test.js index 2d9ef6ef905..60ca2cdf574 100644 --- a/test/api/resolveConfig/resolveConfig.test.js +++ b/test/api/resolveConfig/resolveConfig.test.js @@ -9,7 +9,7 @@ const cli = new WebpackCLI(); describe("resolveConfig", function () { it("should handle merge properly", async () => { - const result = await cli.resolveConfig({ + const result = await cli.loadConfig({ merge: true, config: [resolve(__dirname, "./webpack.config.cjs")], }); @@ -30,7 +30,7 @@ describe("resolveConfig", function () { }); it("should return array for multiple config", async () => { - const result = await cli.resolveConfig({ + const result = await cli.loadConfig({ config: [ resolve(__dirname, "./webpack.config1.cjs"), resolve(__dirname, "./webpack.config2.cjs"), @@ -42,7 +42,7 @@ describe("resolveConfig", function () { }); it("should return config object for single config", async () => { - const result = await cli.resolveConfig({ + const result = await cli.loadConfig({ config: [resolve(__dirname, "./webpack.config1.cjs")], }); @@ -50,7 +50,7 @@ describe("resolveConfig", function () { }); it("should return resolved config object for promise config", async () => { - const result = await cli.resolveConfig({ + const result = await cli.loadConfig({ config: [resolve(__dirname, "./webpack.promise.config.cjs")], }); const expectedOptions = await promiseConfig(); @@ -59,7 +59,7 @@ describe("resolveConfig", function () { }); it("should handle configs returning different types", async () => { - const result = await cli.resolveConfig({ + const result = await cli.loadConfig({ config: [ resolve(__dirname, "./webpack.promise.config.cjs"), resolve(__dirname, "./webpack.config.cjs"), @@ -72,7 +72,7 @@ describe("resolveConfig", function () { }); it("should handle different env formats", async () => { - const result = await cli.resolveConfig({ + const result = await cli.loadConfig({ argv: { env: { test: true, name: "Hisoka" } }, config: [resolve(__dirname, "./env.webpack.config.cjs")], }); diff --git a/test/build/stats/config/stats.test.js b/test/build/stats/config/stats.test.js index 1781ef7c9ae..ed1bb5ef46d 100644 --- a/test/build/stats/config/stats.test.js +++ b/test/build/stats/config/stats.test.js @@ -19,7 +19,7 @@ describe("stats flag with config", () => { if (isWebpack5) { expect(stdout).toContain("preset: 'normal'"); } else { - expect(stdout).toContain("stats: 'normal'"); + expect(stdout).toContain("stats: { colors: false }"); } }); diff --git a/yarn.lock b/yarn.lock index 9fc3a53067c..3db44d835a4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1798,17 +1798,17 @@ integrity sha512-fj1hi+ZSW0xPLrJJD+YNwIh9GZbyaIepG26E/gXvp8nCa2pYokxUYO1sK9qjGxp2g8ryZYuon7wmjpwE2cyASQ== "@types/eslint-scope@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" - integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== + version "3.7.1" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.1.tgz#8dc390a7b4f9dd9f1284629efce982e41612116e" + integrity sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g== dependencies: "@types/eslint" "*" "@types/estree" "*" "@types/eslint@*": - version "7.2.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.10.tgz#4b7a9368d46c0f8cd5408c23288a59aa2394d917" - integrity sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ== + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.0.tgz#7e41f2481d301c68e14f483fe10b017753ce8d5a" + integrity sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -1883,6 +1883,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/json-schema@^7.0.8": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + "@types/keyv@*": version "3.1.1" resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" @@ -2305,11 +2310,16 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1: +acorn@^8.0.4, acorn@^8.2.4: version "8.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== +acorn@^8.4.1: + version "8.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== + add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" @@ -4206,9 +4216,9 @@ es-abstract@^1.18.0-next.2: unbox-primitive "^1.0.0" es-module-lexer@^0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.1.tgz#f203bf394a630a552d381acf01a17ef08843b140" - integrity sha512-17Ed9misDnpyNBJh63g1OhW3qUFecDgGOivI85JeZY/LGhDum8e+cltukbkSK8pcJnXXEkya56sp4vSS1nzoUw== + version "0.9.2" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.2.tgz#d0a8c72c5d904014111fac7fab4c92b9ac545564" + integrity sha512-YkAGWqxZq2B4FxQ5y687UwywDwvLQhIMCZ+SDU7ZW729SDHOEI6wVFXwTRecz+yiwJzCsVwC6V7bxyNbZSB1rg== es-to-primitive@^1.2.1: version "1.2.1" @@ -6735,16 +6745,7 @@ jest-watcher@^27.0.0, jest-watcher@^27.2.4: jest-util "^27.2.4" string-length "^4.0.1" -jest-worker@^27.0.2: - version "27.0.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05" - integrity sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^27.2.4: +jest-worker@^27.0.6, jest-worker@^27.2.4: version "27.2.4" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.2.4.tgz#881455df75e22e7726a53f43703ab74d6b36f82d" integrity sha512-Zq9A2Pw59KkVjBBKD1i3iE2e22oSjXhUKKuAK1HGX8flGwkm6NMozyEYzKd41hXc64dbd/0eWFeEEuxqXyhM+g== @@ -7533,13 +7534,25 @@ mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: +mime-db@1.50.0: + version "1.50.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f" + integrity sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.30" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== dependencies: mime-db "1.47.0" +mime-types@^2.1.27: + version "2.1.33" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb" + integrity sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g== + dependencies: + mime-db "1.50.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -9413,12 +9426,12 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^3.0.0, schema-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.0.tgz#95986eb604f66daadeed56e379bfe7a7f963cdb9" - integrity sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w== +schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== dependencies: - "@types/json-schema" "^7.0.7" + "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" @@ -9480,10 +9493,10 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: randombytes "^2.1.0" @@ -9751,7 +9764,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.19: +source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.6: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -9759,6 +9772,14 @@ source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5. buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.20: + version "0.5.20" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" + integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" @@ -10172,9 +10193,9 @@ table@^6.0.9: strip-ansi "^6.0.0" tapable@^2.1.1, tapable@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" - integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== tar@^4.4.12: version "4.4.19" @@ -10241,25 +10262,25 @@ terminal-link@^2.0.0: supports-hyperlinks "^2.0.0" terser-webpack-plugin@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz#30033e955ca28b55664f1e4b30a1347e61aa23af" - integrity sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A== + version "5.2.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz#ad1be7639b1cbe3ea49fab995cbe7224b31747a1" + integrity sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA== dependencies: - jest-worker "^27.0.2" + jest-worker "^27.0.6" p-limit "^3.1.0" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" source-map "^0.6.1" - terser "^5.7.0" + terser "^5.7.2" -terser@^5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" - integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== +terser@^5.7.2: + version "5.9.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.9.0.tgz#47d6e629a522963240f2b55fcaa3c99083d2c351" + integrity sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ== dependencies: commander "^2.20.0" source-map "~0.7.2" - source-map-support "~0.5.19" + source-map-support "~0.5.20" test-exclude@^6.0.0: version "6.0.0" @@ -10927,14 +10948,14 @@ webpack-merge@^5.7.3: wildcard "^2.0.0" webpack-sources@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.0.tgz#b16973bcf844ebcdb3afde32eda1c04d0b90f89d" - integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== + version "3.2.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.1.tgz#251a7d9720d75ada1469ca07dbb62f3641a05b6d" + integrity sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA== -webpack@^5.45.1: - version "5.55.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.55.1.tgz#426ebe54c15fa57f7b242590f65fd182382b5998" - integrity sha512-EYp9lwaOOAs+AA/KviNZ7bQiITHm4bXQvyTPewD2+f5YGjv6sfiClm40yeX5FgBMxh5bxcB6LryiFoP09B97Ug== +webpack@^5.56.0: + version "5.56.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.56.0.tgz#91a04de09c85765002818678538c319b6e461324" + integrity sha512-pJ7esw2AGkpZL0jqsEAKnDEfRZdrc9NVjAWA+d1mFkwj68ng9VQ6+Wnrl+kS5dlDHvrat5ASK5vd7wp6I7f53Q== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" From d496dddd73df649ac2b65afddb7143c2e22b83ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Oct 2021 12:16:24 +0300 Subject: [PATCH 165/173] chore(deps): bump colorette from 2.0.11 to 2.0.14 (#2982) Bumps [colorette](https://github.com/jorgebucaran/colorette) from 2.0.11 to 2.0.14. - [Release notes](https://github.com/jorgebucaran/colorette/releases) - [Commits](https://github.com/jorgebucaran/colorette/compare/2.0.11...2.0.14) --- updated-dependencies: - dependency-name: colorette dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3db44d835a4..fc1ea3c3d6f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3339,9 +3339,9 @@ colorette@^1.2.1, colorette@^1.2.2: integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== colorette@^2.0.11: - version "2.0.11" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.11.tgz#3b4cf8407edb24dd54fdbfd350f5ed252abbc64a" - integrity sha512-ZqwF8QRKzkhpr6aOvqzsZgtdOh+ItZBrbHDJ3pEAOoLr79oVSRxviVKDHVvrBmUhK5NcGRT9RATQknOan52UXQ== + version "2.0.14" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.14.tgz#1629bb27a13cd719ff37d66bc341234af564122e" + integrity sha512-TLcu0rCLNjDIdKGLGqMtPEAOAZmavC1QCX4mEs3P0mrA/DDoU/tA+Y4UQK/862FkX2TTlbyVIkREZNbf7Y9YwA== colors@1.0.3: version "1.0.3" From 3df437e885881d64acbaa24545f394a238a5c47f Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Mon, 4 Oct 2021 23:29:39 +0530 Subject: [PATCH 166/173] chore: update colorette (#2983) --- package.json | 2 +- packages/webpack-cli/lib/webpack-cli.js | 7 ------- packages/webpack-cli/package.json | 2 +- yarn.lock | 2 +- 4 files changed, 3 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 42107be1c86..61b96ebed49 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@typescript-eslint/parser": "^4.14.1", "@webpack-cli/migrate": "^1.1.2", "coffeescript": "^2.5.1", - "colorette": "^2.0.11", + "colorette": "^2.0.14", "concat-stream": "^2.0.0", "cz-customizable": "^6.3.0", "del-cli": "^3.0.1", diff --git a/packages/webpack-cli/lib/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index 74f6f5c6a45..0e47fcac530 100644 --- a/packages/webpack-cli/lib/webpack-cli.js +++ b/packages/webpack-cli/lib/webpack-cli.js @@ -45,13 +45,6 @@ class WebpackCLI { shouldUseColor = useColor; } else { shouldUseColor = isColorSupported; - - // CLI may failed before parsing arguments, we should respect colors/no colors in logger - if (process.argv.includes("--no-color")) { - shouldUseColor = false; - } else if (process.argv.includes("--color")) { - shouldUseColor = true; - } } return { ...createColors({ useColor: shouldUseColor }), isColorSupported: shouldUseColor }; diff --git a/packages/webpack-cli/package.json b/packages/webpack-cli/package.json index ac0b5d130f8..89276013922 100644 --- a/packages/webpack-cli/package.json +++ b/packages/webpack-cli/package.json @@ -33,7 +33,7 @@ "@webpack-cli/configtest": "^1.0.4", "@webpack-cli/info": "^1.3.0", "@webpack-cli/serve": "^1.5.2", - "colorette": "^2.0.11", + "colorette": "^2.0.14", "commander": "^7.0.0", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", diff --git a/yarn.lock b/yarn.lock index fc1ea3c3d6f..cd6abf55adf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3338,7 +3338,7 @@ colorette@^1.2.1, colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== -colorette@^2.0.11: +colorette@^2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.14.tgz#1629bb27a13cd719ff37d66bc341234af564122e" integrity sha512-TLcu0rCLNjDIdKGLGqMtPEAOAZmavC1QCX4mEs3P0mrA/DDoU/tA+Y4UQK/862FkX2TTlbyVIkREZNbf7Y9YwA== From df99efe45e598f87b3cc94fa7c0d41ecf13ba975 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Oct 2021 12:14:07 +0300 Subject: [PATCH 167/173] chore(deps-dev): bump @typescript-eslint/parser --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index cd6abf55adf..40aa9648dc3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2048,13 +2048,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^4.14.1": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.32.0.tgz#751ecca0e2fecd3d44484a9b3049ffc1871616e5" - integrity sha512-lhtYqQ2iEPV5JqV7K+uOVlPePjClj4dOw7K4/Z1F2yvjIUvyr13yJnDzkK6uon4BjHYuHy3EG0c2Z9jEhFk56w== + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" + integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== dependencies: - "@typescript-eslint/scope-manager" "4.32.0" - "@typescript-eslint/types" "4.32.0" - "@typescript-eslint/typescript-estree" "4.32.0" + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" debug "^4.3.1" "@typescript-eslint/scope-manager@4.32.0": @@ -2065,11 +2065,24 @@ "@typescript-eslint/types" "4.32.0" "@typescript-eslint/visitor-keys" "4.32.0" +"@typescript-eslint/scope-manager@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" + integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== + dependencies: + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" + "@typescript-eslint/types@4.32.0": version "4.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.32.0.tgz#52c633c18da47aee09449144bf59565ab36df00d" integrity sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w== +"@typescript-eslint/types@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" + integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== + "@typescript-eslint/typescript-estree@4.32.0": version "4.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz#db00ccc41ccedc8d7367ea3f50c6994b8efa9f3b" @@ -2083,6 +2096,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" + integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== + dependencies: + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.32.0": version "4.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz#455ba8b51242f2722a497ffae29313f33b14cb7f" @@ -2091,6 +2117,14 @@ "@typescript-eslint/types" "4.32.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" + integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== + dependencies: + "@typescript-eslint/types" "4.33.0" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From cf6b20d8b2ffe72c4b720ed04e324a5c753965a2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Oct 2021 12:14:19 +0300 Subject: [PATCH 168/173] chore(deps): bump import-local from 3.0.2 to 3.0.3 (#2984) Bumps [import-local](https://github.com/sindresorhus/import-local) from 3.0.2 to 3.0.3. - [Release notes](https://github.com/sindresorhus/import-local/releases) - [Commits](https://github.com/sindresorhus/import-local/compare/v3.0.2...v3.0.3) --- updated-dependencies: - dependency-name: import-local dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 40aa9648dc3..3854b392951 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5703,9 +5703,9 @@ import-local@^2.0.0: resolve-cwd "^2.0.0" import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + version "3.0.3" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0" + integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" From f73eb76523e1ae81a8a05681522cbbbf80973891 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Oct 2021 12:14:31 +0300 Subject: [PATCH 169/173] chore(deps-dev): bump webpack --- yarn.lock | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3854b392951..672b8a0e324 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2344,12 +2344,7 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.2.4: - version "8.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" - integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== - -acorn@^8.4.1: +acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1: version "8.5.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== @@ -7563,24 +7558,17 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" -mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": - version "1.47.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" - integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== - mime-db@1.50.0: version "1.50.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f" integrity sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A== -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.30" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" - integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== - dependencies: - mime-db "1.47.0" +"mime-db@>= 1.43.0 < 2": + version "1.47.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" + integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== -mime-types@^2.1.27: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.33" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb" integrity sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g== @@ -10987,9 +10975,9 @@ webpack-sources@^3.2.0: integrity sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA== webpack@^5.56.0: - version "5.56.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.56.0.tgz#91a04de09c85765002818678538c319b6e461324" - integrity sha512-pJ7esw2AGkpZL0jqsEAKnDEfRZdrc9NVjAWA+d1mFkwj68ng9VQ6+Wnrl+kS5dlDHvrat5ASK5vd7wp6I7f53Q== + version "5.56.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.56.1.tgz#e39d1d1f1acdb6f07e346f74b7dcfe323da4ded9" + integrity sha512-MRbTPooHJuSAfbx7Lh/qEMRUe/d0p4cRj2GPo/fq+4JUeR/+Q1EfLvS1lexslbMcJZyPXxxz/k/NzVepkA5upA== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" From 2c40d064a206c646af13f935c3381d6ccbed0b14 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Oct 2021 12:14:44 +0300 Subject: [PATCH 170/173] chore(deps-dev): bump @typescript-eslint/eslint-plugin (#2986) --- yarn.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index 672b8a0e324..3b6336fd8bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2022,12 +2022,12 @@ rxjs "^6.4.0" "@typescript-eslint/eslint-plugin@^4.14.1": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.32.0.tgz#46d2370ae9311092f2a6f7246d28357daf2d4e89" - integrity sha512-+OWTuWRSbWI1KDK8iEyG/6uK2rTm3kpS38wuVifGUTDB6kjEuNrzBI1MUtxnkneuWG/23QehABe2zHHrj+4yuA== + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" + integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== dependencies: - "@typescript-eslint/experimental-utils" "4.32.0" - "@typescript-eslint/scope-manager" "4.32.0" + "@typescript-eslint/experimental-utils" "4.33.0" + "@typescript-eslint/scope-manager" "4.33.0" debug "^4.3.1" functional-red-black-tree "^1.0.1" ignore "^5.1.8" @@ -2035,15 +2035,15 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.32.0": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.32.0.tgz#53a8267d16ca5a79134739129871966c56a59dc4" - integrity sha512-WLoXcc+cQufxRYjTWr4kFt0DyEv6hDgSaFqYhIzQZ05cF+kXfqXdUh+//kgquPJVUBbL3oQGKQxwPbLxHRqm6A== +"@typescript-eslint/experimental-utils@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" + integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== dependencies: "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.32.0" - "@typescript-eslint/types" "4.32.0" - "@typescript-eslint/typescript-estree" "4.32.0" + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" From 6c7eef8877c369eaa01d153006ddad4b5ca8524b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Oct 2021 12:19:42 +0300 Subject: [PATCH 171/173] chore(deps-dev): bump webpack from 5.56.1 to 5.57.1 (#2989) Bumps [webpack](https://github.com/webpack/webpack) from 5.56.1 to 5.57.1. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.56.1...v5.57.1) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 40 +++------------------------------------- 1 file changed, 3 insertions(+), 37 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3b6336fd8bb..cce7a226b7d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2057,14 +2057,6 @@ "@typescript-eslint/typescript-estree" "4.33.0" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.32.0": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.32.0.tgz#e03c8668f8b954072b3f944d5b799c0c9225a7d5" - integrity sha512-DK+fMSHdM216C0OM/KR1lHXjP1CNtVIhJ54kQxfOE6x8UGFAjha8cXgDMBEIYS2XCYjjCtvTkjQYwL3uvGOo0w== - dependencies: - "@typescript-eslint/types" "4.32.0" - "@typescript-eslint/visitor-keys" "4.32.0" - "@typescript-eslint/scope-manager@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" @@ -2073,29 +2065,11 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" -"@typescript-eslint/types@4.32.0": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.32.0.tgz#52c633c18da47aee09449144bf59565ab36df00d" - integrity sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w== - "@typescript-eslint/types@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== -"@typescript-eslint/typescript-estree@4.32.0": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz#db00ccc41ccedc8d7367ea3f50c6994b8efa9f3b" - integrity sha512-tRYCgJ3g1UjMw1cGG8Yn1KzOzNlQ6u1h9AmEtPhb5V5a1TmiHWcRyF/Ic+91M4f43QeChyYlVTcf3DvDTZR9vw== - dependencies: - "@typescript-eslint/types" "4.32.0" - "@typescript-eslint/visitor-keys" "4.32.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" @@ -2109,14 +2083,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.32.0": - version "4.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz#455ba8b51242f2722a497ffae29313f33b14cb7f" - integrity sha512-e7NE0qz8W+atzv3Cy9qaQ7BTLwWsm084Z0c4nIO2l3Bp6u9WIgdqCgyPyV5oSPDMIW3b20H59OOCmVk3jw3Ptw== - dependencies: - "@typescript-eslint/types" "4.32.0" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" @@ -10975,9 +10941,9 @@ webpack-sources@^3.2.0: integrity sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA== webpack@^5.56.0: - version "5.56.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.56.1.tgz#e39d1d1f1acdb6f07e346f74b7dcfe323da4ded9" - integrity sha512-MRbTPooHJuSAfbx7Lh/qEMRUe/d0p4cRj2GPo/fq+4JUeR/+Q1EfLvS1lexslbMcJZyPXxxz/k/NzVepkA5upA== + version "5.57.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.57.1.tgz#ead5ace2c17ecef2ae8126f143bfeaa7f55eab44" + integrity sha512-kHszukYjTPVfCOEyrUthA3jqJwduY/P3eO8I0gMNOZGIQWKAwZftxmp5hq6paophvwo9NoUrcZOecs9ulOyyTg== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" From 570a6e25ad6de112f804a503d2370b9951fed68f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Oct 2021 12:21:14 +0300 Subject: [PATCH 172/173] chore(deps-dev): bump coffeescript from 2.6.0 to 2.6.1 (#2988) Bumps [coffeescript](https://github.com/jashkenas/coffeescript) from 2.6.0 to 2.6.1. - [Release notes](https://github.com/jashkenas/coffeescript/releases) - [Commits](https://github.com/jashkenas/coffeescript/compare/2.6.0...2.6.1) --- updated-dependencies: - dependency-name: coffeescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index cce7a226b7d..3649f7d8bba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3287,9 +3287,9 @@ code-point-at@^1.0.0: integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= coffeescript@^2.5.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.6.0.tgz#927d52aa03df17d445c93c1afb66b081d26e1fa0" - integrity sha512-gCGXhR72sTAdEr+oZh3FcOj04DrcMc9lZYSJUBNudkQ4tQXuPKE3cvcYVbK/HiVW+zFzLmnZdHexuJ33ufLZOg== + version "2.6.1" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.6.1.tgz#f9e5d4930e1b8a1c5cfba7f95eebd18694ce58fd" + integrity sha512-GG5nkF93qII8HmHqnnibkgpp/SV7PSnSPiWsbinwya7nNOe95aE/x2xrKZJFks8Qpko3TNrC+/LahaKgrz5YCg== collect-v8-coverage@^1.0.0: version "1.0.1" From 77433bf7bca13a2fa228b0958a6928e9a0a85fe7 Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Wed, 6 Oct 2021 23:36:57 +0300 Subject: [PATCH 173/173] chore(release): publish new version - @webpack-cli/configtest@1.1.0 - @webpack-cli/generators@2.4.0 - @webpack-cli/info@1.4.0 - @webpack-cli/serve@1.6.0 - webpack-cli@4.9.0 --- packages/configtest/CHANGELOG.md | 6 ++++++ packages/configtest/package.json | 2 +- packages/generators/CHANGELOG.md | 10 ++++++++++ packages/generators/package.json | 6 +++--- packages/info/CHANGELOG.md | 7 +++++++ packages/info/package.json | 2 +- packages/serve/CHANGELOG.md | 10 ++++++++++ packages/serve/package.json | 2 +- packages/webpack-cli/CHANGELOG.md | 10 ++++++++++ packages/webpack-cli/package.json | 8 ++++---- 10 files changed, 53 insertions(+), 10 deletions(-) diff --git a/packages/configtest/CHANGELOG.md b/packages/configtest/CHANGELOG.md index cc120c7d464..f20313bb50b 100644 --- a/packages/configtest/CHANGELOG.md +++ b/packages/configtest/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/configtest@1.0.4...@webpack-cli/configtest@1.1.0) (2021-10-06) + +### Features + +- allow to run commands without webpack installation where it is unnecessary ([#2907](https://github.com/webpack/webpack-cli/issues/2907)) ([603041d](https://github.com/webpack/webpack-cli/commit/603041d7e6a9b764bd79d1a8effd22a3e0f019cb)) + ## [1.0.4](https://github.com/webpack/webpack-cli/compare/@webpack-cli/configtest@1.0.3...@webpack-cli/configtest@1.0.4) (2021-06-07) ### Bug Fixes diff --git a/packages/configtest/package.json b/packages/configtest/package.json index 7b4d4079963..c81f5f85893 100644 --- a/packages/configtest/package.json +++ b/packages/configtest/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/configtest", - "version": "1.0.4", + "version": "1.1.0", "description": "Validate a webpack configuration.", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/generators/CHANGELOG.md b/packages/generators/CHANGELOG.md index 5bdb5c87a5b..0a596dcd6b2 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. +# [2.4.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@2.3.0...@webpack-cli/generators@2.4.0) (2021-10-06) + +### Bug Fixes + +- npx init ([#2980](https://github.com/webpack/webpack-cli/issues/2980)) ([1d38499](https://github.com/webpack/webpack-cli/commit/1d38499b4d0cee5bfb0c02c92e691aa6702b91cc)) + +### Features + +- allow to run commands without webpack installation where it is unnecessary ([#2907](https://github.com/webpack/webpack-cli/issues/2907)) ([603041d](https://github.com/webpack/webpack-cli/commit/603041d7e6a9b764bd79d1a8effd22a3e0f019cb)) + # [2.3.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@2.2.0...@webpack-cli/generators@2.3.0) (2021-08-15) ### Features diff --git a/packages/generators/package.json b/packages/generators/package.json index 14d953bf273..e9f2653a0a0 100644 --- a/packages/generators/package.json +++ b/packages/generators/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/generators", - "version": "2.3.0", + "version": "2.4.0", "description": "Webpack-CLI generators", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -22,9 +22,9 @@ "plugin-template" ], "dependencies": { + "webpack-cli": "^4.9.0", "yeoman-environment": "^2.10.3", - "yeoman-generator": "^4.12.0", - "webpack-cli": "4.x.x" + "yeoman-generator": "^4.12.0" }, "peerDependencies": { "webpack": "4.x.x || 5.x.x" diff --git a/packages/info/CHANGELOG.md b/packages/info/CHANGELOG.md index f35f2557df3..61c80cb669a 100644 --- a/packages/info/CHANGELOG.md +++ b/packages/info/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.4.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/info@1.3.0...@webpack-cli/info@1.4.0) (2021-10-06) + +### Features + +- **info:** added the `--additional-package` option ([06cd267](https://github.com/webpack/webpack-cli/commit/06cd267663955f64b70685c604105d051ffd6beb)) +- allow to run commands without webpack installation where it is unnecessary ([#2907](https://github.com/webpack/webpack-cli/issues/2907)) ([603041d](https://github.com/webpack/webpack-cli/commit/603041d7e6a9b764bd79d1a8effd22a3e0f019cb)) + # [1.3.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/info@1.2.4...@webpack-cli/info@1.3.0) (2021-06-07) ### Bug Fixes diff --git a/packages/info/package.json b/packages/info/package.json index 1492a0d9c37..e0dabfa3c83 100644 --- a/packages/info/package.json +++ b/packages/info/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/info", - "version": "1.3.0", + "version": "1.4.0", "description": "Outputs info about system and webpack config", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/serve/CHANGELOG.md b/packages/serve/CHANGELOG.md index e24429f2fc7..c073f6cf519 100644 --- a/packages/serve/CHANGELOG.md +++ b/packages/serve/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.6.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.5.2...@webpack-cli/serve@1.6.0) (2021-10-06) + +### Bug Fixes + +- allow falsy values for `port` option ([#2962](https://github.com/webpack/webpack-cli/issues/2962)) ([da135dd](https://github.com/webpack/webpack-cli/commit/da135dd717e88b6aa9a0559c1e4e8acb4ee8f3c1)) + +### Features + +- allow to run commands without webpack installation where it is unnecessary ([#2907](https://github.com/webpack/webpack-cli/issues/2907)) ([603041d](https://github.com/webpack/webpack-cli/commit/603041d7e6a9b764bd79d1a8effd22a3e0f019cb)) + ## [1.5.2](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.5.1...@webpack-cli/serve@1.5.2) (2021-08-15) ### Bug Fixes diff --git a/packages/serve/package.json b/packages/serve/package.json index db9e4b4e33a..017d279f0ee 100644 --- a/packages/serve/package.json +++ b/packages/serve/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/serve", - "version": "1.5.2", + "version": "1.6.0", "description": "", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/webpack-cli/CHANGELOG.md b/packages/webpack-cli/CHANGELOG.md index ddf6f612f3c..bb2a708a6d0 100644 --- a/packages/webpack-cli/CHANGELOG.md +++ b/packages/webpack-cli/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. +# [4.9.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.8.0...webpack-cli@4.9.0) (2021-10-06) + +### Bug Fixes + +- handle `undefined` and empty configuration export ([#2930](https://github.com/webpack/webpack-cli/issues/2930)) ([9b9040e](https://github.com/webpack/webpack-cli/commit/9b9040e97c1d7a68d0757c05a67fb0fc8184b827)) + +### Features + +- allow to run commands without webpack installation where it is unnecessary ([#2907](https://github.com/webpack/webpack-cli/issues/2907)) ([603041d](https://github.com/webpack/webpack-cli/commit/603041d7e6a9b764bd79d1a8effd22a3e0f019cb)) + # [4.8.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.7.2...webpack-cli@4.8.0) (2021-08-15) ### Bug Fixes diff --git a/packages/webpack-cli/package.json b/packages/webpack-cli/package.json index 89276013922..2e61eac986d 100644 --- a/packages/webpack-cli/package.json +++ b/packages/webpack-cli/package.json @@ -1,6 +1,6 @@ { "name": "webpack-cli", - "version": "4.8.0", + "version": "4.9.0", "description": "CLI for webpack & friends", "license": "MIT", "repository": { @@ -30,9 +30,9 @@ ], "dependencies": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.4", - "@webpack-cli/info": "^1.3.0", - "@webpack-cli/serve": "^1.5.2", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", "colorette": "^2.0.14", "commander": "^7.0.0", "execa": "^5.0.0",