diff --git a/.github/workflows/deploy-storybook.yaml b/.github/workflows/deploy-storybook.yaml new file mode 100644 index 00000000..81608c78 --- /dev/null +++ b/.github/workflows/deploy-storybook.yaml @@ -0,0 +1,71 @@ +name: 'Deploy Storybook' + +on: + push: + branches: + - main + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + cache-dependencies: + runs-on: ubuntu-latest + steps: + - name: Checkout Commit + uses: actions/checkout@v2 + - name: Cache yarn dependencies and cypress + uses: actions/cache@v2 + id: yarn-cache + with: + path: | + ~/.cache/Cypress + node_modules + key: ${{ runner.os }}-yarn-v3-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn-v3 + - name: Install dependencies if cache invalid + if: steps.yarn-cache.outputs.cache-hit != 'true' + run: yarn + + build-and-deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: cache-dependencies + steps: + - uses: actions/setup-node@v2 + with: + node-version: '18.x' + - name: Setup Pages + uses: actions/configure-pages@v3 + - name: Restore yarn dependencies + uses: actions/cache@v2 + id: yarn-cache + with: + path: | + ~/.cache/Cypress + node_modules + key: ${{ runner.os }}-yarn-v3-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn-v3 + - name: Install Playwright + run: npx playwright install --with-deps + - name: Build Storybook + run: yarn build-storybook --quiet + - name: Upload artifact + uses: actions/upload-pages-artifact@v2 + with: + path: './storybook-static' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 + - uses: actions/checkout@v2 diff --git a/.github/workflows/ui-tests.yaml b/.github/workflows/ui-tests.yaml index 0a7be752..b2557b70 100644 --- a/.github/workflows/ui-tests.yaml +++ b/.github/workflows/ui-tests.yaml @@ -65,7 +65,7 @@ jobs: run: npx playwright install --with-deps - name: Build Storybook run: yarn build-storybook --quiet - - name: Serve Storybook and run tests + - name: Run Storybook tests run: | npx concurrently -k -s first -n "SB,TEST" -c "magenta,blue" \ "npx http-server storybook-static --port 6006 --silent" \ diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/.storybook/main.ts b/.storybook/main.ts index 7e29894c..774a0610 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -16,6 +16,14 @@ const config: StorybookConfig = { docs: { autodocs: 'tag', }, + + async viteFinal(config, { configType }) { + if (configType === 'PRODUCTION') { + config.base = './' + } + + return config + }, } export default config diff --git a/package.json b/package.json index 6cd4f00f..3859637a 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "nimbus-gui", "private": true, "version": "0.0.0", + "homepage": "https://nimbus-gui.github.io/nimbus-gui", "scripts": { "dev": "NODE_ENV=development vite", "build": "tsc -p . && vite build", @@ -9,7 +10,8 @@ "preview": "vite preview", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build", - "test-storybook": "test-storybook" + "test-storybook": "test-storybook", + "deploy-storybook": "gh-pages -d storybook-static -t true" }, "resolutions": { "@tamagui/web": "1.36.4", @@ -47,6 +49,7 @@ "@storybook/cli": "^7.2.0", "@storybook/react": "^7.2.0", "@storybook/react-vite": "^7.2.0", + "@storybook/storybook-deployer": "^2.8.16", "@storybook/test-runner": "^0.12.0", "@storybook/testing-library": "^0.2.0", "@types/react-color": "^3.0.6", @@ -58,6 +61,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", "eslint-plugin-storybook": "^0.6.13", + "gh-pages": "^6.0.0", "prettier": "^3.0.1", "storybook": "^7.2.0", "storybook-addon-react-router-v6": "^2.0.5", diff --git a/yarn.lock b/yarn.lock index 7d92fd5a..b29cbbe7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5182,6 +5182,22 @@ __metadata: languageName: node linkType: hard +"@storybook/storybook-deployer@npm:^2.8.16": + version: 2.8.16 + resolution: "@storybook/storybook-deployer@npm:2.8.16" + dependencies: + git-url-parse: ^12.0.0 + glob: ^7.1.3 + parse-repo: ^1.0.4 + shelljs: ^0.8.1 + yargs: ^15.0.0 + bin: + storybook-to-aws-s3: bin/storybook_to_aws_s3 + storybook-to-ghpages: bin/storybook_to_ghpages + checksum: 06d02d9da9e6242de89436973e0a0d8126bcac5a89e7356815b095073d7c3b8c5ec7e9216183b18a9ec9c120455634a08388ddf67b1192cda748577768f07bd2 + languageName: node + linkType: hard + "@storybook/telemetry@npm:7.2.1, @storybook/telemetry@npm:^7.1.0-alpha.32": version: 7.2.1 resolution: "@storybook/telemetry@npm:7.2.1" @@ -7799,6 +7815,15 @@ __metadata: languageName: node linkType: hard +"array-union@npm:^1.0.1": + version: 1.0.2 + resolution: "array-union@npm:1.0.2" + dependencies: + array-uniq: ^1.0.1 + checksum: 82cec6421b6e6766556c484835a6d476a873f1b71cace5ab2b4f1b15b1e3162dc4da0d16f7a2b04d4aec18146c6638fe8f661340b31ba8e469fd811a1b45dc8d + languageName: node + linkType: hard + "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -7806,6 +7831,13 @@ __metadata: languageName: node linkType: hard +"array-uniq@npm:^1.0.1": + version: 1.0.3 + resolution: "array-uniq@npm:1.0.3" + checksum: 1625f06b093d8bf279b81adfec6e72951c0857d65b5e3f65f053fffe9f9dd61c2fc52cff57e38a4700817e7e3f01a4faa433d505ea9e33cdae4514c334e0bf9e + languageName: node + linkType: hard + "asap@npm:~2.0.3, asap@npm:~2.0.6": version: 2.0.6 resolution: "asap@npm:2.0.6" @@ -7866,7 +7898,7 @@ __metadata: languageName: node linkType: hard -"async@npm:^3.2.2, async@npm:^3.2.3": +"async@npm:^3.2.2, async@npm:^3.2.3, async@npm:^3.2.4": version: 3.2.4 resolution: "async@npm:3.2.4" checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 @@ -8673,6 +8705,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^11.0.0": + version: 11.0.0 + resolution: "commander@npm:11.0.0" + checksum: 6621954e1e1d078b4991c1f5bbd9439ad37aa7768d6ab4842de1dbd4d222c8a27e1b8e62108b3a92988614af45031d5bb2a2aaa92951f4d0c934d1a1ac564bb4 + languageName: node + linkType: hard + "commander@npm:^2.19.0, commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" @@ -9523,6 +9562,13 @@ __metadata: languageName: node linkType: hard +"email-addresses@npm:^5.0.0": + version: 5.0.0 + resolution: "email-addresses@npm:5.0.0" + checksum: e58a510e9caf105313025e1c81488d5391c6404f0bbd7874e8e36a4c14d1ced02ff271748146c13edfa3bd9ce9b25f1194f5369971d77087325f37ab193129bb + languageName: node + linkType: hard + "emittery@npm:^0.10.2": version: 0.10.2 resolution: "emittery@npm:0.10.2" @@ -9872,7 +9918,7 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^1.0.5": +"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 @@ -10400,6 +10446,24 @@ __metadata: languageName: node linkType: hard +"filename-reserved-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "filename-reserved-regex@npm:2.0.0" + checksum: 323a0020fd7f243238ffccab9d728cbc5f3a13c84b2c10e01efb09b8324561d7a51776be76f36603c734d4f69145c39a5d12492bf6142a28b50d7f90bd6190bc + languageName: node + linkType: hard + +"filenamify@npm:^4.3.0": + version: 4.3.0 + resolution: "filenamify@npm:4.3.0" + dependencies: + filename-reserved-regex: ^2.0.0 + strip-outer: ^1.0.1 + trim-repeated: ^1.0.0 + checksum: 5b71a7ff8e958c8621957e6fbf7872024126d3b5da50f59b1634af3343ba1a69d4cc15cfe4ca4bbfa7c959ad4d98614ee51e6f1d9fa7326eef8ceda2da8cd74e + languageName: node + linkType: hard + "fill-range@npm:^7.0.1": version: 7.0.1 resolution: "fill-range@npm:7.0.1" @@ -10450,7 +10514,7 @@ __metadata: languageName: node linkType: hard -"find-cache-dir@npm:^3.0.0, find-cache-dir@npm:^3.2.0, find-cache-dir@npm:^3.3.2": +"find-cache-dir@npm:^3.0.0, find-cache-dir@npm:^3.2.0, find-cache-dir@npm:^3.3.1, find-cache-dir@npm:^3.3.2": version: 3.3.2 resolution: "find-cache-dir@npm:3.3.2" dependencies: @@ -10666,7 +10730,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:11.1.1, fs-extra@npm:^11.1.0": +"fs-extra@npm:11.1.1, fs-extra@npm:^11.1.0, fs-extra@npm:^11.1.1": version: 11.1.1 resolution: "fs-extra@npm:11.1.1" dependencies: @@ -10832,6 +10896,24 @@ __metadata: languageName: node linkType: hard +"gh-pages@npm:^6.0.0": + version: 6.0.0 + resolution: "gh-pages@npm:6.0.0" + dependencies: + async: ^3.2.4 + commander: ^11.0.0 + email-addresses: ^5.0.0 + filenamify: ^4.3.0 + find-cache-dir: ^3.3.1 + fs-extra: ^11.1.1 + globby: ^6.1.0 + bin: + gh-pages: bin/gh-pages.js + gh-pages-clean: bin/gh-pages-clean.js + checksum: 031f9070cdcd4fb71a2a8eabec049c885faa17e489a6e37e8f7dfa9bd649607560b0778b8e19a1d9295ebd614668e3854d860d48313cb7b23ee9f3884adef517 + languageName: node + linkType: hard + "giget@npm:^1.0.0": version: 1.1.2 resolution: "giget@npm:1.1.2" @@ -10849,6 +10931,25 @@ __metadata: languageName: node linkType: hard +"git-up@npm:^6.0.0": + version: 6.0.0 + resolution: "git-up@npm:6.0.0" + dependencies: + is-ssh: ^1.4.0 + parse-url: ^7.0.2 + checksum: 145a1f546d7a078cdfc2616556e518e634d134e34a31c6bf2ed89e44158659cb525dbd451c338121f7107f55cef066d0b37a7bbf178555befc9304b3940b435e + languageName: node + linkType: hard + +"git-url-parse@npm:^12.0.0": + version: 12.0.0 + resolution: "git-url-parse@npm:12.0.0" + dependencies: + git-up: ^6.0.0 + checksum: b4c8530b816202ecf9d4dabf755f785a314a096b56145018385b3d7171e862f9d0d9b38cce620c0af354b269750fe7b2d9aa95815c7150922090a11dac4ab1e6 + languageName: node + linkType: hard + "github-slugger@npm:^1.0.0": version: 1.5.0 resolution: "github-slugger@npm:1.5.0" @@ -10907,7 +11008,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0": +"glob@npm:^7.0.0, glob@npm:^7.0.3, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -10986,6 +11087,19 @@ __metadata: languageName: node linkType: hard +"globby@npm:^6.1.0": + version: 6.1.0 + resolution: "globby@npm:6.1.0" + dependencies: + array-union: ^1.0.1 + glob: ^7.0.3 + object-assign: ^4.0.1 + pify: ^2.0.0 + pinkie-promise: ^2.0.0 + checksum: 18109d6b9d55643d2b98b59c3cfae7073ccfe39829632f353d516cc124d836c2ddebe48a23f04af63d66a621b6d86dd4cbd7e6af906f2458a7fe510ffc4bd424 + languageName: node + linkType: hard + "gopd@npm:^1.0.1": version: 1.0.1 resolution: "gopd@npm:1.0.1" @@ -11422,6 +11536,13 @@ __metadata: languageName: node linkType: hard +"interpret@npm:^1.0.0": + version: 1.4.0 + resolution: "interpret@npm:1.4.0" + checksum: 2e5f51268b5941e4a17e4ef0575bc91ed0ab5f8515e3cf77486f7c14d13f3010df9c0959f37063dcc96e78d12dc6b0bb1b9e111cdfe69771f4656d2993d36155 + languageName: node + linkType: hard + "invariant@npm:*, invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" @@ -11744,6 +11865,15 @@ __metadata: languageName: node linkType: hard +"is-ssh@npm:^1.4.0": + version: 1.4.0 + resolution: "is-ssh@npm:1.4.0" + dependencies: + protocols: ^2.0.1 + checksum: 75eaa17b538bee24b661fbeb0f140226ac77e904a6039f787bea418431e2162f1f9c4c4ccad3bd169e036cd701cc631406e8c505d9fa7e20164e74b47f86f40f + languageName: node + linkType: hard + "is-stream@npm:^2.0.0": version: 2.0.1 resolution: "is-stream@npm:2.0.1" @@ -13830,6 +13960,7 @@ __metadata: "@storybook/cli": ^7.2.0 "@storybook/react": ^7.2.0 "@storybook/react-vite": ^7.2.0 + "@storybook/storybook-deployer": ^2.8.16 "@storybook/test-runner": ^0.12.0 "@storybook/testing-library": ^0.2.0 "@tamagui/config": 1.36.4 @@ -13847,6 +13978,7 @@ __metadata: eslint-plugin-react-refresh: ^0.4.3 eslint-plugin-storybook: ^0.6.13 expo-modules-core: ^1.5.9 + gh-pages: ^6.0.0 prettier: ^3.0.1 react: 18 react-color: ^2.19.3 @@ -13995,6 +14127,13 @@ __metadata: languageName: node linkType: hard +"normalize-url@npm:^6.1.0": + version: 6.1.0 + resolution: "normalize-url@npm:6.1.0" + checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50 + languageName: node + linkType: hard + "npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" @@ -14076,7 +14215,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -14354,6 +14493,34 @@ __metadata: languageName: node linkType: hard +"parse-path@npm:^5.0.0": + version: 5.0.0 + resolution: "parse-path@npm:5.0.0" + dependencies: + protocols: ^2.0.0 + checksum: e9f670559cd8e535f39f548bf5d41ad96a220190ea98df33d0babd9dfaa7c3c70ee2e55394078517d5e7e93c6a39c8eac1261ed3f9e68033656614fc954262e8 + languageName: node + linkType: hard + +"parse-repo@npm:^1.0.4": + version: 1.0.4 + resolution: "parse-repo@npm:1.0.4" + checksum: b0d32a182cdb2287adfb1d9141f7f694890e0ad659e80f75ec2e266339c5a728328f08cb72caf85cb7524b5dbbc4122b17efdd48e0d17d96ed9863ec512e0141 + languageName: node + linkType: hard + +"parse-url@npm:^7.0.2": + version: 7.0.2 + resolution: "parse-url@npm:7.0.2" + dependencies: + is-ssh: ^1.4.0 + normalize-url: ^6.1.0 + parse-path: ^5.0.0 + protocols: ^2.0.1 + checksum: 3e26852706bebe9fac409909316716dee52883d2fb5c82d65577effba1507abb7bc42bb59ce0ba6c8659168fb99acf89000bd8fe096ed3ad7124fa85227436d7 + languageName: node + linkType: hard + "parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" @@ -14466,6 +14633,13 @@ __metadata: languageName: node linkType: hard +"pify@npm:^2.0.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba + languageName: node + linkType: hard + "pify@npm:^4.0.1": version: 4.0.1 resolution: "pify@npm:4.0.1" @@ -14473,6 +14647,22 @@ __metadata: languageName: node linkType: hard +"pinkie-promise@npm:^2.0.0": + version: 2.0.1 + resolution: "pinkie-promise@npm:2.0.1" + dependencies: + pinkie: ^2.0.0 + checksum: b53a4a2e73bf56b6f421eef711e7bdcb693d6abb474d57c5c413b809f654ba5ee750c6a96dd7225052d4b96c4d053cdcb34b708a86fceed4663303abee52fcca + languageName: node + linkType: hard + +"pinkie@npm:^2.0.0": + version: 2.0.4 + resolution: "pinkie@npm:2.0.4" + checksum: b12b10afea1177595aab036fc220785488f67b4b0fc49e7a27979472592e971614fa1c728e63ad3e7eb748b4ec3c3dbd780819331dad6f7d635c77c10537b9db + languageName: node + linkType: hard + "pirates@npm:^3.0.2": version: 3.0.2 resolution: "pirates@npm:3.0.2" @@ -14720,6 +14910,13 @@ __metadata: languageName: node linkType: hard +"protocols@npm:^2.0.0, protocols@npm:^2.0.1": + version: 2.0.1 + resolution: "protocols@npm:2.0.1" + checksum: 4a9bef6aa0449a0245ded319ac3cbfd032c3e76ebb562777037a3a832c99253d0e8bc2847f7be350236df620a11f7d4fe683ea7f59a2cc14c69f746b6259eda4 + languageName: node + linkType: hard + "proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" @@ -15381,6 +15578,15 @@ __metadata: languageName: node linkType: hard +"rechoir@npm:^0.6.2": + version: 0.6.2 + resolution: "rechoir@npm:0.6.2" + dependencies: + resolve: ^1.1.6 + checksum: fe76bf9c21875ac16e235defedd7cbd34f333c02a92546142b7911a0f7c7059d2e16f441fe6fb9ae203f459c05a31b2bcf26202896d89e390eda7514d5d2702b + languageName: node + linkType: hard + "redux-thunk@npm:^2.4.2": version: 2.4.2 resolution: "redux-thunk@npm:2.4.2" @@ -15601,7 +15807,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1": +"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1": version: 1.22.4 resolution: "resolve@npm:1.22.4" dependencies: @@ -15614,7 +15820,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin": +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin": version: 1.22.4 resolution: "resolve@patch:resolve@npm%3A1.22.4#~builtin::version=1.22.4&hash=c3c19d" dependencies: @@ -15906,6 +16112,19 @@ __metadata: languageName: node linkType: hard +"shelljs@npm:^0.8.1": + version: 0.8.5 + resolution: "shelljs@npm:0.8.5" + dependencies: + glob: ^7.0.0 + interpret: ^1.0.0 + rechoir: ^0.6.2 + bin: + shjs: bin/shjs + checksum: 7babc46f732a98f4c054ec1f048b55b9149b98aa2da32f6cf9844c434b43c6251efebd6eec120937bd0999e13811ebd45efe17410edb3ca938f82f9381302748 + languageName: node + linkType: hard + "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4" @@ -16349,6 +16568,15 @@ __metadata: languageName: node linkType: hard +"strip-outer@npm:^1.0.1": + version: 1.0.1 + resolution: "strip-outer@npm:1.0.1" + dependencies: + escape-string-regexp: ^1.0.2 + checksum: f8d65d33ca2b49aabc66bb41d689dda7b8b9959d320e3a40a2ef4d7079ff2f67ffb72db43f179f48dbf9495c2e33742863feab7a584d180fa62505439162c191 + languageName: node + linkType: hard + "strnum@npm:^1.0.5": version: 1.0.5 resolution: "strnum@npm:1.0.5" @@ -16692,6 +16920,15 @@ __metadata: languageName: node linkType: hard +"trim-repeated@npm:^1.0.0": + version: 1.0.0 + resolution: "trim-repeated@npm:1.0.0" + dependencies: + escape-string-regexp: ^1.0.2 + checksum: e25c235305b82c43f1d64a67a71226c406b00281755e4c2c4f3b1d0b09c687a535dd3c4483327f949f28bb89dc400a0bc5e5b749054f4b99f49ebfe48ba36496 + languageName: node + linkType: hard + "ts-api-utils@npm:^1.0.1": version: 1.0.1 resolution: "ts-api-utils@npm:1.0.1" @@ -17576,7 +17813,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^15.0.2, yargs@npm:^15.1.0": +"yargs@npm:^15.0.0, yargs@npm:^15.0.2, yargs@npm:^15.1.0": version: 15.4.1 resolution: "yargs@npm:15.4.1" dependencies: