diff --git a/.github/workflows/contributor-issue-comment.yml b/.github/workflows/contributor-issue-comment.yml index ab085e1..aae277c 100644 --- a/.github/workflows/contributor-issue-comment.yml +++ b/.github/workflows/contributor-issue-comment.yml @@ -48,7 +48,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '22' - name: Install dependencies run: yarn install --frozen-lockfile - name: Run script diff --git a/.github/workflows/contributor-pr-reply.yml b/.github/workflows/contributor-pr-reply.yml index 31283e8..ed7e387 100644 --- a/.github/workflows/contributor-pr-reply.yml +++ b/.github/workflows/contributor-pr-reply.yml @@ -45,7 +45,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '22' - name: Install dependencies run: yarn install --frozen-lockfile - name: Run script diff --git a/.github/workflows/good-first-issue-comment.yml b/.github/workflows/good-first-issue-comment.yml index cf2b61d..2534ff6 100644 --- a/.github/workflows/good-first-issue-comment.yml +++ b/.github/workflows/good-first-issue-comment.yml @@ -27,7 +27,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: 20 + node-version: 22 cache: 'yarn' - name: Install dependencies run: yarn install --frozen-lockfile diff --git a/.github/workflows/holiday-message.yml b/.github/workflows/holiday-message.yml index 698a58d..cbf245f 100644 --- a/.github/workflows/holiday-message.yml +++ b/.github/workflows/holiday-message.yml @@ -45,7 +45,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '22' - name: Install dependencies run: yarn install --frozen-lockfile - name: Run script diff --git a/.github/workflows/is-contributor.yml b/.github/workflows/is-contributor.yml index 31400fc..d6f5e76 100644 --- a/.github/workflows/is-contributor.yml +++ b/.github/workflows/is-contributor.yml @@ -41,7 +41,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '22' - name: Install dependencies run: yarn install --frozen-lockfile - name: Run script diff --git a/.github/workflows/manage-issue-header.yml b/.github/workflows/manage-issue-header.yml index b2e561b..71faae9 100644 --- a/.github/workflows/manage-issue-header.yml +++ b/.github/workflows/manage-issue-header.yml @@ -27,7 +27,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: 20 + node-version: 22 cache: 'yarn' - name: Install dependencies run: yarn install --frozen-lockfile diff --git a/.github/workflows/pr-statistics.yml b/.github/workflows/pr-statistics.yml index 3a18245..d17ddce 100644 --- a/.github/workflows/pr-statistics.yml +++ b/.github/workflows/pr-statistics.yml @@ -27,7 +27,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '22' - name: Install dependencies run: npm install - name: Generate PR statistics diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 35cfad3..88338f9 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -17,7 +17,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '22' cache: yarn - name: Install dependencies run: yarn install --frozen-lockfile diff --git a/.github/workflows/pull-request-label.yml b/.github/workflows/pull-request-label.yml index 22405af..f273437 100644 --- a/.github/workflows/pull-request-label.yml +++ b/.github/workflows/pull-request-label.yml @@ -41,7 +41,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '22' - name: Install dependencies run: yarn install --frozen-lockfile - name: Run script diff --git a/.github/workflows/pull-request-template.yml b/.github/workflows/pull-request-template.yml index 9714f96..5575b6c 100644 --- a/.github/workflows/pull-request-template.yml +++ b/.github/workflows/pull-request-template.yml @@ -28,7 +28,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '22' - name: Install dependencies run: yarn install --frozen-lockfile - name: Run script diff --git a/.github/workflows/review-requested.yml b/.github/workflows/review-requested.yml index 1b140a7..b835727 100644 --- a/.github/workflows/review-requested.yml +++ b/.github/workflows/review-requested.yml @@ -41,7 +41,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '22' - name: Install dependencies run: yarn install --frozen-lockfile - name: Run script diff --git a/.github/workflows/sync-automation-template.yml b/.github/workflows/sync-automation-template.yml index eacf79b..54a0199 100644 --- a/.github/workflows/sync-automation-template.yml +++ b/.github/workflows/sync-automation-template.yml @@ -43,7 +43,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '22' cache: 'yarn' - name: Install dependencies run: yarn install --frozen-lockfile diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9b54bc8..364525d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '22' - name: Install dependencies run: npm install - name: Run tests diff --git a/.github/workflows/unassign-inactive-issues.yaml b/.github/workflows/unassign-inactive-issues.yaml index f354f91..8952c14 100644 --- a/.github/workflows/unassign-inactive-issues.yaml +++ b/.github/workflows/unassign-inactive-issues.yaml @@ -33,7 +33,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '22' - name: Debug directory run: | echo "Current directory:" diff --git a/.github/workflows/update-pr-spreadsheet.yml b/.github/workflows/update-pr-spreadsheet.yml index 13de4dd..6d07563 100644 --- a/.github/workflows/update-pr-spreadsheet.yml +++ b/.github/workflows/update-pr-spreadsheet.yml @@ -31,7 +31,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v7 with: - node-version: '20' + node-version: '22' - name: Install dependencies run: yarn install --frozen-lockfile - name: Run script diff --git a/docs/development.md b/docs/development.md index 94c59a8..569173b 100644 --- a/docs/development.md +++ b/docs/development.md @@ -1,6 +1,6 @@ # Setting up a development environment -Install [uv](https://docs.astral.sh/uv/getting-started/installation/), Node.js 20 and +Install [uv](https://docs.astral.sh/uv/getting-started/installation/), Node.js 22 and [Yarn 1](https://classic.yarnpkg.com/en/docs/install). The `actionlint` hook also needs [shellcheck](https://github.com/koalaman/shellcheck#installing) on your `PATH`. diff --git a/package.json b/package.json index a20a9a5..1b938de 100644 --- a/package.json +++ b/package.json @@ -2,11 +2,11 @@ "scripts": { "lint": "eslint .", "format": "prettier --write .", - "test": "node --test scripts/" + "test": "node --test 'scripts/**/*.test.js'" }, "dependencies": { "dotenv": "^17.4.2", - "googleapis": "^142.0.0", + "googleapis": "^186.0.0", "node-fetch-native": "^1.6.7", "path": "^0.12.7" }, diff --git a/yarn.lock b/yarn.lock index 40e8b37..92fa18c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -204,6 +204,11 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + debug@4, debug@^4.3.1, debug@^4.3.2: version "4.4.1" resolved "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz" @@ -388,6 +393,14 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -417,6 +430,13 @@ flatted@^3.2.9: resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -427,24 +447,22 @@ function-bind@^1.1.2: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -gaxios@^6.0.0, gaxios@^6.0.3, gaxios@^6.1.1: - version "6.7.1" - resolved "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz" - integrity sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ== +gaxios@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-8.3.2.tgz#1c133b7d9ff0d19c0782262cbc16db1eed388a54" + integrity sha512-7VsaTExxjbDv2ZK1YuC4jbgfN33NI/6/7zdYWUHB6mcg51v4tCBZe+xzjqPzOpVzI+C5k1Kk9OQ80WVrXAHOqw== dependencies: extend "^3.0.2" https-proxy-agent "^7.0.1" - is-stream "^2.0.0" - node-fetch "^2.6.9" - uuid "^9.0.1" + node-fetch "^3.3.2" -gcp-metadata@^6.1.0: - version "6.1.1" - resolved "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz" - integrity sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A== +gcp-metadata@^9.0.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-9.2.2.tgz#48593ab35553b92689f19693f4c0c41b1ed0c3de" + integrity sha512-hlaHpCBoNCzoUjMnBZq0LbUiYqPAhXFaAgyNwQqwWU44TZIYJK3RD3o2wkNdvPs8nnUXqJjTudnodLJkLMBjow== dependencies: - gaxios "^6.1.1" - google-logging-utils "^0.0.2" + gaxios "^8.3.0" + google-logging-utils "^2.0.0" json-bigint "^1.0.0" get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: @@ -497,42 +515,42 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -google-auth-library@^9.0.0, google-auth-library@^9.7.0: - version "9.15.1" - resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz" - integrity sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng== +google-auth-library@^11.0.0: + version "11.3.1" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-11.3.1.tgz#89820f220d11df0b3a9de1c3b02be15ca63fd565" + integrity sha512-mQS0R2Ev/DKkzuWSYtDeq15uhDeaWuT2qzLYqJ41LmooxVKHmn5ut3pc6dlHY6wfHW/D7FBmOYjAtkjaD1A7qA== dependencies: base64-js "^1.3.0" ecdsa-sig-formatter "^1.0.11" - gaxios "^6.1.1" - gcp-metadata "^6.1.0" - gtoken "^7.0.0" + gaxios "^8.3.0" + gcp-metadata "^9.0.0" + google-logging-utils "^2.0.0" jws "^4.0.0" -google-logging-utils@^0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz" - integrity sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ== +google-logging-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/google-logging-utils/-/google-logging-utils-2.1.0.tgz#d6b84feb2ca5a20c4cfcbc9c83ed8038971f1759" + integrity sha512-1R6uiq6XhXW2ZrcGtZpGgVDsYGzSmveVOn8Pp37qe1fbThHZ34e3t3eXj5mVu6PFSVx9fvB1KNVnYgVtq/BRcA== -googleapis-common@^7.0.0: - version "7.2.0" - resolved "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.2.0.tgz" - integrity sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA== +googleapis-common@^9.0.0: + version "9.3.1" + resolved "https://registry.yarnpkg.com/googleapis-common/-/googleapis-common-9.3.1.tgz#63741f13c153372d5018406880a243f01e51c96e" + integrity sha512-wtv/e7JYgmtpIPcSez2EFD/Wx49DPsRX2rj15D7hTwc7tDsP82dcwoX/I4+zE38mu6S9PcghizzzADLf+ZMunA== dependencies: extend "^3.0.2" - gaxios "^6.0.3" - google-auth-library "^9.7.0" + gaxios "^8.3.0" + google-auth-library "^11.0.0" + google-logging-utils "^2.0.0" qs "^6.7.0" url-template "^2.0.8" - uuid "^9.0.0" -googleapis@^142.0.0: - version "142.0.0" - resolved "https://registry.npmjs.org/googleapis/-/googleapis-142.0.0.tgz" - integrity sha512-LsU1ynez4/KNPwnFMSDI93pBEsETNdQPCrT3kz2qgiNg5H2pW4dKW+1VmENMkZ4u9lMxA89nnXD3nqWBJ0rruQ== +googleapis@^186.0.0: + version "186.0.0" + resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-186.0.0.tgz#e171ec1805587651b9c4def8733a6b1e2afb4ea0" + integrity sha512-ljnYwbM1IX6xM0q5tQHqAtnFdHBC9rPa5jidpoQB7wRiqBYOs5hOQPUPidF454tNLO5LCwB06EvkPg/93E1OJw== dependencies: - google-auth-library "^9.0.0" - googleapis-common "^7.0.0" + google-auth-library "^11.0.0" + googleapis-common "^9.0.0" gopd@^1.2.0: version "1.2.0" @@ -544,14 +562,6 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -gtoken@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz" - integrity sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw== - dependencies: - gaxios "^6.0.0" - jws "^4.0.0" - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" @@ -630,11 +640,6 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" @@ -735,17 +740,24 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + node-fetch-native@^1.6.7: version "1.6.7" resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.7.tgz#9d09ca63066cc48423211ed4caf5d70075d76a71" integrity sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q== -node-fetch@^2.6.9: - version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== +node-fetch@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== dependencies: - whatwg-url "^5.0.0" + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" object-inspect@^1.13.3: version "1.13.4" @@ -952,11 +964,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" @@ -988,23 +995,10 @@ util@^0.10.3: dependencies: inherits "2.0.3" -uuid@^9.0.0, uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== which@^2.0.1: version "2.0.2"