From 3b8c6b32d80dd22fda0bc64e2a3a391c263362d7 Mon Sep 17 00:00:00 2001 From: Nolan Lawson Date: Fri, 19 Apr 2024 15:16:40 -0700 Subject: [PATCH] fix: make lwc a peerDependency --- README.md | 49 +++++++----------- package.json | 24 +++++---- scripts/upgrade-lwc.sh | 20 -------- src/config.js | 4 +- src/options/options.js | 7 --- src/utils/__mocks__/project.js | 4 +- src/utils/project.js | 1 - src/utils/test-runner.js | 20 ++------ tests/__snapshots__/help.test.js.snap | 27 ++++------ yarn.lock | 71 +++------------------------ 10 files changed, 52 insertions(+), 175 deletions(-) delete mode 100755 scripts/upgrade-lwc.sh diff --git a/README.md b/README.md index d9ac0b4..3578523 100644 --- a/README.md +++ b/README.md @@ -2,40 +2,34 @@ Run Jest against Lightning web components in a Salesforce DX workspace environment. -## Versions - -To test against the latest Salesforce production instances, use the npm tag appropriate for the current release, e.g.: +## Install +```shell +# npm +npm install --save-dev @salesforce-sfdx-lwc-jest lwc ``` -yarn add -D @salesforce/sfdx-lwc-jest@winter22 -yarn add -D @salesforce/sfdx-lwc-jest@spring22 -``` - -The npm `latest` tag corresponds to the latest version of this repo, not necessarily Salesforce production versions. - -To see a full list of available versions, and the tag that maps to the corresponding Salesforce release, see [the list of `npm` package versions](https://www.npmjs.com/package/@salesforce/sfdx-lwc-jest?activeTab=versions). - -## Invalid sourceApiVersion found in sfdx-project.json - -If you see this error while running tests in your Salesforce DX project, it most likely means you are using the incorrect version of this project. -For example, the error message `Invalid sourceApiVersion found in sfdx-project.json. Expected 45.0, found 46.0` means this project is targeted to API version 45.0, which maps to Spring '19, but the Salesforce DX project the tests are run in is using API version 46.0, which maps to Summer '19. The version check is done against the projects `sourceApiVersion` field in the `sfdx-project.json` file at the top level of the project. +```shell +# yarn +npm install --save-dev @salesforce-sfdx-lwc-jest lwc +``` -To fix this issue, make sure the most recent version of this project is being used, or switch to the `prerelease` version, depending on what release your target org is on. +As of version 6.0.0 of `@salesforce/sfdx-lwc-jest`, you must install `lwc` alongside the package. -## Disabling the sourceApiVersion check +## Versions -The `sourceApiVersion` field check is not a perfect check. Projects may be targeting orgs that are on the current release, but still have an older `sourceApiVersion` value set in their `sfdx-project.json` file. To disable this check, run tests with the `--skipApiVersionCheck` flag set. +To test against the latest Salesforce production instances, ensure that your `lwc` dependency corresponds to the Salesforce release you want to test against. For example: -**Note that by doing this, you risk running with an old version of the test runner and your tests may be using an out of date version of the LWC framework. To ensure tests are always run with the proper framework version and configuration, make sure to be on the most recent `latest` or `prerelease` tagged version of this package.** +```shell +npm install --save-dev lwc@winter22 +npm install --save-dev lwc@spring22 +``` -## Installation +The npm `latest` tag corresponds to the latest version of the [LWC open-source framework](https://github.com/salesforce/lwc), not necessarily Salesforce production versions. -Add this project as a devDependency: +To see a full list of available versions, and the tag that maps to the corresponding Salesforce release, see [the list of `npm` package versions](https://www.npmjs.com/package/lwc?activeTab=versions). -```bash -yarn add -D @salesforce/sfdx-lwc-jest -``` +## Running tests Update your project's unit testing script in `package.json` to execute `sfdx-lwc-jest`: @@ -72,13 +66,6 @@ Options: --debug Run tests in debug mode (https://jestjs.io/docs/en/troubleshooting) [boolean] [default: false] - --skipApiVersionCheck Disable the "sourceApiVersion" field check before - running tests. **Warning** By disabling this check - you risk running tests against stale versions of - the framework. See details here: - https://github.com/salesforce/sfdx-lwc-jest#disabli - ng-the-sourceApiVersion-check - [boolean] [default: false] --help Show help [boolean] Examples: diff --git a/package.json b/package.json index b28c214..10815d9 100644 --- a/package.json +++ b/package.json @@ -33,20 +33,15 @@ "test": "jest" }, "dependencies": { - "@lwc/engine-dom": "6.5.1", - "@lwc/engine-server": "6.5.1", - "@lwc/jest-preset": "16.0.0", - "@lwc/jest-resolver": "16.0.0", - "@lwc/jest-serializer": "16.0.0", - "@lwc/jest-transformer": "16.0.0", - "@lwc/module-resolver": "6.5.1", - "@lwc/synthetic-shadow": "6.5.1", - "@lwc/wire-service": "6.5.1", - "@salesforce/wire-service-jest-util": "4.1.4", + "@lwc/jest-preset": "^16.0.0", + "@lwc/jest-resolver": "^16.0.0", + "@lwc/jest-serializer": "^16.0.0", + "@lwc/jest-transformer": "^16.0.0", + "@salesforce/wire-service-jest-util": "^4.1.4", "fast-glob": "^3.3.2", - "jest": "29.7.0", - "jest-environment-jsdom": "29.7.0", - "yargs": "~17.7.2" + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "yargs": "^17.7.2" }, "devDependencies": { "@babel/core": "^7.24.4", @@ -58,6 +53,9 @@ "lint-staged": "^15.2.2", "prettier": "^3.2.5" }, + "peerDependencies": { + "lwc": ">=6" + }, "volta": { "node": "20.12.1", "yarn": "1.22.22" diff --git a/scripts/upgrade-lwc.sh b/scripts/upgrade-lwc.sh deleted file mode 100755 index 75d9e11..0000000 --- a/scripts/upgrade-lwc.sh +++ /dev/null @@ -1,20 +0,0 @@ -#/bin/bash -e - -# Copyright (c) 2018, salesforce.com, inc. -# All rights reserved. -# SPDX-License-Identifier: MIT -# For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - -LWC_VERSION=$1 -LWC_TEST_VERSION=$2 - -yarn upgrade @lwc/compiler@$LWC_VERSION -yarn upgrade @lwc/engine-dom@$LWC_VERSION -yarn upgrade @lwc/module-resolver@$LWC_VERSION -yarn upgrade @lwc/wire-service@$LWC_VERSION -yarn upgrade @lwc/synthetic-shadow@$LWC_VERSION - -yarn upgrade @lwc/jest-resolver@$LWC_TEST_VERSION -yarn upgrade @lwc/jest-serializer@$LWC_TEST_VERSION -yarn upgrade @lwc/jest-transformer@$LWC_TEST_VERSION -yarn upgrade @lwc/jest-preset@$LWC_TEST_VERSION diff --git a/src/config.js b/src/config.js index b815e20..f072759 100644 --- a/src/config.js +++ b/src/config.js @@ -44,6 +44,4 @@ const jestConfig = { snapshotSerializers: [require.resolve('@lwc/jest-serializer')], }; -const expectedApiVersion = '61.0'; - -module.exports = { jestConfig, expectedApiVersion }; +module.exports = { jestConfig }; diff --git a/src/options/options.js b/src/options/options.js index f61e43d..dd75ec8 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -37,13 +37,6 @@ const testOptions = { type: 'boolean', default: false, }, - - skipApiVersionCheck: { - description: - 'Disable the "sourceApiVersion" field check before running tests. **Warning** By disabling this check you risk running tests against stale versions of the framework. See details here: https://github.com/salesforce/sfdx-lwc-jest#disabling-the-sourceApiVersion-check', - type: 'boolean', - default: false, - }, }; module.exports = testOptions; diff --git a/src/utils/__mocks__/project.js b/src/utils/__mocks__/project.js index b6e5955..0b2d18e 100644 --- a/src/utils/__mocks__/project.js +++ b/src/utils/__mocks__/project.js @@ -6,12 +6,10 @@ */ 'use strict'; -const { expectedApiVersion } = require('../../config'); - module.exports = { PROJECT_ROOT: 'projectRoot', getSfdxProjectJson: () => { - return { mock: true, sourceApiVersion: expectedApiVersion }; + return { mock: true }; }, getModulePaths: () => ['force-app/main/unix/lwc', 'force-app\\main\\windows\\lwc'], }; diff --git a/src/utils/project.js b/src/utils/project.js index 5adf11a..7d5310d 100644 --- a/src/utils/project.js +++ b/src/utils/project.js @@ -38,6 +38,5 @@ function getModulePaths() { module.exports = { PROJECT_ROOT, - getSfdxProjectJson, getModulePaths, }; diff --git a/src/utils/test-runner.js b/src/utils/test-runner.js index 35b7ec0..03241da 100644 --- a/src/utils/test-runner.js +++ b/src/utils/test-runner.js @@ -10,24 +10,14 @@ const fs = require('fs'); const path = require('path'); const { spawn } = require('child_process'); -const { PROJECT_ROOT, getSfdxProjectJson } = require('./project'); +const { PROJECT_ROOT } = require('./project'); -const { error, info } = require('../log'); -const { jestConfig, expectedApiVersion } = require('../config'); +const { info } = require('../log'); +const { jestConfig } = require('../config'); // List of CLI options that should be passthrough to jest. const JEST_PASSTHROUGH_OPTIONS = new Set(['coverage', 'updateSnapshot', 'verbose', 'watch']); -function validSourceApiVersion() { - const sfdxProjectJson = getSfdxProjectJson(); - const apiVersion = sfdxProjectJson.sourceApiVersion; - if (apiVersion !== expectedApiVersion) { - error( - `Invalid sourceApiVersion found in sfdx-project.json. Expected ${expectedApiVersion}, found ${apiVersion}`, - ); - } -} - function getJestPath() { const packageJsonPath = require.resolve('jest/package.json'); @@ -71,10 +61,6 @@ function getJestArgs(argv) { } async function testRunner(argv) { - if (!argv.skipApiVersionCheck) { - validSourceApiVersion(); - } - const spawnCommand = 'node'; const spawnArgs = [getJestPath(), ...getJestArgs(argv)]; diff --git a/tests/__snapshots__/help.test.js.snap b/tests/__snapshots__/help.test.js.snap index 0e78078..dc75941 100644 --- a/tests/__snapshots__/help.test.js.snap +++ b/tests/__snapshots__/help.test.js.snap @@ -4,26 +4,19 @@ exports[`--help attribute shows help 1`] = ` "\`sfdx-lwc-jest [options]\` runs Jest unit tests in SFDX workspace Options: - --version Show version number [boolean] - --coverage Collect coverage and display in output + --version Show version number [boolean] + --coverage Collect coverage and display in output [boolean] [default: false] - -u, --updateSnapshot Re-record every snapshot that fails during a test - run [boolean] [default: false] - --verbose Display individual test results with the test suite - hierarchy [boolean] [default: false] - --watch Watch files for changes and rerun tests related to - changed files [boolean] [default: false] - --debug Run tests in debug mode - (https://jestjs.io/docs/en/troubleshooting) + -u, --updateSnapshot Re-record every snapshot that fails during a test run [boolean] [default: false] - --skipApiVersionCheck Disable the "sourceApiVersion" field check before - running tests. **Warning** By disabling this check - you risk running tests against stale versions of - the framework. See details here: - https://github.com/salesforce/sfdx-lwc-jest#disabli - ng-the-sourceApiVersion-check + --verbose Display individual test results with the test suite + hierarchy [boolean] [default: false] + --watch Watch files for changes and rerun tests related to + changed files [boolean] [default: false] + --debug Run tests in debug mode + (https://jestjs.io/docs/en/troubleshooting) [boolean] [default: false] - --help Show help [boolean] + --help Show help [boolean] Examples: sfdx-lwc-jest --coverage Collect coverage and display in output diff --git a/yarn.lock b/yarn.lock index a6d29cf..cf16af2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1172,17 +1172,7 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@lwc/engine-dom@6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@lwc/engine-dom/-/engine-dom-6.5.1.tgz#3c392f51a8317a779f7300648a52b33a4cb1447b" - integrity sha512-3dS+lG7uJ4OB97SiBPEaGVPGepvygfybWl8rOSK/USm7zf/Zc9kjLK8QeLRcw3KgG3HdEkKRKxhaObCcia/x5g== - -"@lwc/engine-server@6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@lwc/engine-server/-/engine-server-6.5.1.tgz#7c757f046800ed56e58bf4f39120d67b6e353877" - integrity sha512-K8E8xDo7OMLrUSgDy7CQd8bdiebieSY4nhLXea/V+0SLuPvsXvHKm00c78mZ1fTSTf4lsWqtTr/9jKEpn4ndww== - -"@lwc/jest-preset@16.0.0": +"@lwc/jest-preset@^16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@lwc/jest-preset/-/jest-preset-16.0.0.tgz#e4755e904a5acd0be3762a95af5048839f122781" integrity sha512-3mBI3HzU+0KvDSTWAhcSpX139gkyzmCIpsJb67x/Jwm2en4+3q8i5/aCc7I2QJwIw/25T2LJUcDbz4Z5zD3VDw== @@ -1191,14 +1181,14 @@ "@lwc/jest-serializer" "16.0.0" "@lwc/jest-transformer" "16.0.0" -"@lwc/jest-resolver@16.0.0": +"@lwc/jest-resolver@16.0.0", "@lwc/jest-resolver@^16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@lwc/jest-resolver/-/jest-resolver-16.0.0.tgz#79a0f3626fc5ffc78adc0c24c989fdc3d677a8f7" integrity sha512-REEN9cBHdppEcC0yYmCS9AmFiBPOFiH6VAfR5IbggfL4ykF2D90oE6p35oFSWZV7fqFBeWuc2jxAmE/bv/Dl1A== dependencies: "@lwc/jest-shared" "16.0.0" -"@lwc/jest-serializer@16.0.0": +"@lwc/jest-serializer@16.0.0", "@lwc/jest-serializer@^16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@lwc/jest-serializer/-/jest-serializer-16.0.0.tgz#780a460f3b182bc5e410a675a7d144a6b3c9ae08" integrity sha512-VDVnsxBpS+WwviNieH4bZzq+N0EMdAM3RCbc4L9d4HbSOF8slD/kdsTXkhcaDW6hCXP8TKztMPNTvOzY+qH9+A== @@ -1211,7 +1201,7 @@ resolved "https://registry.yarnpkg.com/@lwc/jest-shared/-/jest-shared-16.0.0.tgz#94cc36f5d4a42fe0e0645f6c5bba0a0e5dbabd7a" integrity sha512-S1LiCi2ToC20va1KBcuWqH3Bm9t96k2inVCeGN96+Q4sZSrebBHwfyBEBKq75uwph7FbhHmYv7chLPDZUQIoVg== -"@lwc/jest-transformer@16.0.0": +"@lwc/jest-transformer@16.0.0", "@lwc/jest-transformer@^16.0.0": version "16.0.0" resolved "https://registry.yarnpkg.com/@lwc/jest-transformer/-/jest-transformer-16.0.0.tgz#b04ce2fd01886053b05a348b2f16c6412e06bee5" integrity sha512-//iiLVPdaOnzg/HN8mox+xeSKmebzVervoaJWhvmICIDagtZz9S88dSVsnFKsnY03yOLA7XM8Wz/11ZaZ8bhUg== @@ -1227,23 +1217,6 @@ magic-string "^0.30.8" semver "^7.6.0" -"@lwc/module-resolver@6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@lwc/module-resolver/-/module-resolver-6.5.1.tgz#23e65a5143dda23d1e697327ef25ffccd1dca248" - integrity sha512-GkeMAi1yOwlj6SMizqGstgPaR9C7WhAAUVfkOOXNImJNUoXgZZGqwlNuUtW0KZAZ2gpkPSeOrMEySZaCkNqMmQ== - dependencies: - resolve "~1.22.6" - -"@lwc/synthetic-shadow@6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@lwc/synthetic-shadow/-/synthetic-shadow-6.5.1.tgz#b9832cf955fcf4684c5ed8a526d1a1381b3b6561" - integrity sha512-7siMSHEqp4d7cf4Ywn45OfmePENqXIkFkGhcjPjbRfOVzPOyczN0Cod55cOKsscVorTulBo1juFmTxWZwuLkLw== - -"@lwc/wire-service@6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@lwc/wire-service/-/wire-service-6.5.1.tgz#762992f0db349d2001015b8f125db54fb41a5dd8" - integrity sha512-fyNFKD9N7BxN37DnagDJtIpotQrW4+4Xi4Zng9yo1G89P9qdJe2IaLnqCBvRwwZb+ye3aQvaOwgCbzZLP4ybhg== - "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" @@ -1272,7 +1245,7 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@salesforce/wire-service-jest-util@4.1.4": +"@salesforce/wire-service-jest-util@^4.1.4": version "4.1.4" resolved "https://registry.yarnpkg.com/@salesforce/wire-service-jest-util/-/wire-service-jest-util-4.1.4.tgz#cbfaace19eac9040b24f35e8afa36f4865d4c010" integrity sha512-jVDvR+vazxSfN7qYCubUSg43DRCgLrOjMtQvJhXrVo25mKzLv9MfONWUej5xzq1fB4i5dSdSmcJwMG260QUgdw== @@ -2363,11 +2336,6 @@ fsevents@^2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -2473,13 +2441,6 @@ has@^1.0.3: resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - html-encoding-sniffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" @@ -2580,13 +2541,6 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - is-core-module@^2.8.1: version "2.9.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" @@ -2824,7 +2778,7 @@ jest-each@^29.7.0: jest-util "^29.7.0" pretty-format "^29.7.0" -jest-environment-jsdom@29.7.0: +jest-environment-jsdom@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz#d206fa3551933c3fd519e5dfdb58a0f5139a837f" integrity sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA== @@ -3078,7 +3032,7 @@ jest-worker@^29.7.0: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@29.7.0: +jest@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== @@ -3632,15 +3586,6 @@ resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@~1.22.6: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - restore-cursor@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" @@ -4112,7 +4057,7 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.3.1, yargs@~17.7.2: +yargs@^17.3.1, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==