From 916693c066f0d215342d174eea870cd3fb887654 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Wed, 21 Apr 2021 22:15:12 +0800 Subject: [PATCH] Update release script (#9418) * Update release dependencies * Remove `version` field * Run install before any require * Update scripts/release/utils.js Co-authored-by: Sosuke Suzuki * Fix update schedule * Update deps * Fix Co-authored-by: Sosuke Suzuki --- .github/dependabot.yml | 7 + scripts/release/package.json | 12 +- scripts/release/release.js | 15 +- scripts/release/steps/bump-prettier.js | 27 +- scripts/release/steps/check-git-status.js | 4 +- scripts/release/steps/install-dependencies.js | 6 +- scripts/release/steps/post-publish-steps.js | 13 +- scripts/release/steps/push-to-git.js | 11 +- .../release/steps/update-dependents-count.js | 31 +- scripts/release/steps/update-version.js | 11 +- scripts/release/utils.js | 52 ++- scripts/release/yarn.lock | 320 ++++++++++-------- 12 files changed, 291 insertions(+), 218 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 0a2a8c897..07b4c921c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -15,6 +15,13 @@ updates: day: sunday time: "01:00" + - package-ecosystem: "npm" + directory: "/scripts/release" + schedule: + interval: weekly + day: sunday + time: "01:00" + - package-ecosystem: "github-actions" directory: "/" schedule: diff --git a/scripts/release/package.json b/scripts/release/package.json index a623ab4d1..fdde6e830 100644 --- a/scripts/release/package.json +++ b/scripts/release/package.json @@ -1,12 +1,12 @@ { "private": true, "dependencies": { - "chalk": "2.4.1", - "execa": "0.10.0", - "minimist": "1.2.3", + "chalk": "4.1.0", + "execa": "5.0.0", + "minimist": "1.2.5", "node-fetch": "2.6.1", - "outdent": "0.7.1", - "semver": "5.5.0", - "string-width": "2.1.1" + "outdent": "0.8.0", + "semver": "7.3.4", + "string-width": "4.2.0" } } diff --git a/scripts/release/release.js b/scripts/release/release.js index f063191be..093ea240c 100644 --- a/scripts/release/release.js +++ b/scripts/release/release.js @@ -2,15 +2,14 @@ "use strict"; -const { exec, execSync } = require("child_process"); +const { exec } = require("child_process"); async function run() { const chalk = require("chalk"); - const { string: outdentString } = require("outdent"); const minimist = require("minimist"); const semver = require("semver"); - - const { readJson } = require("./utils"); + const { string: outdentString } = require("outdent"); + const { runGit, readJson } = require("./utils"); const params = minimist(process.argv.slice(2), { string: ["version"], @@ -18,9 +17,11 @@ async function run() { alias: { v: "version" }, }); - const previousVersion = execSync("git describe --tags --abbrev=0") - .toString() - .trim(); + const { stdout: previousVersion } = await runGit([ + "describe", + "--tags", + "--abbrev=0", + ]); if (semver.parse(previousVersion) === null) { throw new Error(`Unexpected previousVersion: ${previousVersion}`); diff --git a/scripts/release/steps/bump-prettier.js b/scripts/release/steps/bump-prettier.js index 05e1f54ee..d27703a2a 100644 --- a/scripts/release/steps/bump-prettier.js +++ b/scripts/release/steps/bump-prettier.js @@ -1,32 +1,33 @@ "use strict"; const fs = require("fs"); -const execa = require("execa"); const semver = require("semver"); -const { logPromise, readJson, writeJson } = require("../utils"); +const { + runYarn, + runGit, + logPromise, + readJson, + writeJson, +} = require("../utils"); async function format() { - await execa("yarn", ["lint:eslint", "--fix"]); - await execa("yarn", ["lint:prettier", "--write"]); + await runYarn(["lint:eslint", "--fix"]); + await runYarn(["lint:prettier", "--write"]); } async function commit(version) { - await execa("git", [ - "commit", - "-am", - `Bump Prettier dependency to ${version}`, - ]); + await runGit(["commit", "-am", `Bump Prettier dependency to ${version}`]); // Add rev to `.git-blame-ignore-revs` file const file = ".git-blame-ignore-revs"; const mark = "# Prettier bump after release"; - const rev = await execa.stdout("git", ["rev-parse", "HEAD"]); + const { stdout: rev } = await runGit("git", ["rev-parse", "HEAD"]); let text = fs.readFileSync(file, "utf8"); text = text.replace(mark, `${mark}\n# ${version}\n${rev}`); fs.writeFileSync(file, text); - await execa("git", ["commit", "-am", `Git blame ignore ${version}`]); + await runGit(["commit", "-am", `Git blame ignore ${version}`]); - await execa("git", ["push"]); + await runGit(["push"]); } async function bump({ @@ -52,7 +53,7 @@ module.exports = async function (params) { await logPromise( "Installing Prettier", - execa("yarn", ["add", "--dev", `prettier@${version}`]) + runYarn(["add", "--dev", `prettier@${version}`]) ); await logPromise("Updating files", format()); diff --git a/scripts/release/steps/check-git-status.js b/scripts/release/steps/check-git-status.js index 7607a931e..9c2106772 100644 --- a/scripts/release/steps/check-git-status.js +++ b/scripts/release/steps/check-git-status.js @@ -1,9 +1,9 @@ "use strict"; -const execa = require("execa"); +const { runGit } = require("../utils"); module.exports = async function () { - const status = await execa.stdout("git", ["status", "--porcelain"]); + const { stdout: status } = await runGit(["status", "--porcelain"]); if (status) { throw new Error( diff --git a/scripts/release/steps/install-dependencies.js b/scripts/release/steps/install-dependencies.js index 375b91bb6..a304bcf79 100644 --- a/scripts/release/steps/install-dependencies.js +++ b/scripts/release/steps/install-dependencies.js @@ -1,13 +1,13 @@ "use strict"; const execa = require("execa"); -const { logPromise } = require("../utils"); +const { runYarn, runGit, logPromise } = require("../utils"); async function install() { await execa("rm", ["-rf", "node_modules"]); - await execa("yarn", ["install"]); + await runYarn(["install"]); - const status = await execa.stdout("git", ["ls-files", "-m"]); + const { stdout: status } = await runGit(["ls-files", "-m"]); if (status) { throw new Error( "The lockfile needs to be updated, commit it before making the release." diff --git a/scripts/release/steps/post-publish-steps.js b/scripts/release/steps/post-publish-steps.js index c625a74c8..ff42b563b 100644 --- a/scripts/release/steps/post-publish-steps.js +++ b/scripts/release/steps/post-publish-steps.js @@ -2,9 +2,8 @@ const chalk = require("chalk"); const { string: outdentString } = require("outdent"); -const fetch = require("node-fetch"); const execa = require("execa"); -const { logPromise } = require("../utils"); +const { fetchText, logPromise } = require("../utils"); const SCHEMA_REPO = "SchemaStore/schemastore"; const SCHEMA_PATH = "src/schemas/json/prettierrc.json"; @@ -14,15 +13,15 @@ const EDIT_URL = `https://github.com/${SCHEMA_REPO}/edit/master/${SCHEMA_PATH}`; // Any optional or manual step can be warned in this script. async function checkSchema() { - const schema = await execa.stdout("node", ["scripts/generate-schema.js"]); + const { stdout: schema } = await execa("node", [ + "scripts/generate-schema.js", + ]); const remoteSchema = await logPromise( "Checking current schema in SchemaStore", - fetch(RAW_URL) - .then((r) => r.text()) - .then((t) => t.trim()) + fetchText(RAW_URL) ); - if (schema === remoteSchema) { + if (schema === remoteSchema.trim()) { return; } diff --git a/scripts/release/steps/push-to-git.js b/scripts/release/steps/push-to-git.js index 659951715..e85f0612c 100644 --- a/scripts/release/steps/push-to-git.js +++ b/scripts/release/steps/push-to-git.js @@ -1,13 +1,12 @@ "use strict"; -const execa = require("execa"); -const { logPromise } = require("../utils"); +const { runGit, logPromise } = require("../utils"); async function pushGit({ version }) { - await execa("git", ["commit", "-am", `Release ${version}`]); - await execa("git", ["tag", "-a", version, "-m", `Release ${version}`]); - await execa("git", ["push"]); - await execa("git", ["push", "--tags"]); + await runGit(["commit", "-am", `Release ${version}`]); + await runGit(["tag", "-a", version, "-m", `Release ${version}`]); + await runGit(["push"]); + await runGit(["push", "--tags"]); } module.exports = function (params) { diff --git a/scripts/release/steps/update-dependents-count.js b/scripts/release/steps/update-dependents-count.js index 1fb641bb6..5ce556837 100644 --- a/scripts/release/steps/update-dependents-count.js +++ b/scripts/release/steps/update-dependents-count.js @@ -1,16 +1,12 @@ "use strict"; const chalk = require("chalk"); -const fetch = require("node-fetch"); -const execa = require("execa"); -const { logPromise, processFile } = require("../utils"); +const { runGit, fetchText, logPromise, processFile } = require("../utils"); async function update() { const npmPage = await logPromise( "Fetching npm dependents count", - fetch("https://www.npmjs.com/package/prettier").then((response) => - response.text() - ) + fetchText("https://www.npmjs.com/package/prettier") ); const dependentsCountNpm = Number( npmPage.match(/"dependentsCount":(\d+),/)[1] @@ -23,9 +19,7 @@ async function update() { const githubPage = await logPromise( "Fetching github dependents count", - fetch( - "https://github.com/prettier/prettier/network/dependents" - ).then((response) => response.text()) + fetchText("https://github.com/prettier/prettier/network/dependents") ); const dependentsCountGithub = Number( githubPage @@ -55,20 +49,17 @@ async function update() { const isUpdated = await logPromise( "Checking if dependents count has been updated", - execa("git", ["diff", "--name-only"]).then( - ({ stdout }) => stdout === "website/pages/en/index.js" - ) + async () => + (await runGit(["diff", "--name-only"])).stdout === + "website/pages/en/index.js" ); if (isUpdated) { - logPromise( - "Committing and pushing to remote", - (async () => { - await execa("git", ["add", "."]); - await execa("git", ["commit", "-m", "Update dependents count"]); - await execa("git", ["push"]); - })() - ); + logPromise("Committing and pushing to remote", async () => { + await runGit(["add", "."]); + await runGit(["commit", "-m", "Update dependents count"]); + await runGit(["push"]); + }); } } diff --git a/scripts/release/steps/update-version.js b/scripts/release/steps/update-version.js index 081820765..1df08da79 100644 --- a/scripts/release/steps/update-version.js +++ b/scripts/release/steps/update-version.js @@ -1,7 +1,12 @@ "use strict"; -const execa = require("execa"); -const { logPromise, readJson, writeJson, processFile } = require("../utils"); +const { + runYarn, + logPromise, + readJson, + writeJson, + processFile, +} = require("../utils"); async function bump({ version }) { const pkg = await readJson("package.json"); @@ -24,7 +29,7 @@ async function bump({ version }) { content.replace(/(\/\/unpkg\.com\/prettier@).*?\//g, `$1${version}/`) ); - await execa("yarn", ["update-stable-docs"], { + await runYarn(["update-stable-docs"], { cwd: "./website", }); } diff --git a/scripts/release/utils.js b/scripts/release/utils.js index f19ff466c..7f52e4d0a 100644 --- a/scripts/release/utils.js +++ b/scripts/release/utils.js @@ -6,6 +6,7 @@ const fs = require("fs"); const chalk = require("chalk"); const execa = require("execa"); const stringWidth = require("string-width"); +const fetch = require("node-fetch"); const OK = chalk.bgGreen.black(" DONE "); const FAIL = chalk.bgRed.black(" FAIL "); @@ -19,27 +20,37 @@ function fitTerminal(input) { return input; } -function logPromise(name, promise) { +async function logPromise(name, promiseOrAsyncFunction) { + const promise = + typeof promiseOrAsyncFunction === "function" + ? promiseOrAsyncFunction() + : promiseOrAsyncFunction; + process.stdout.write(fitTerminal(name)); - return promise - .then((result) => { - process.stdout.write(`${OK}\n`); - return result; - }) - .catch((err) => { - process.stdout.write(`${FAIL}\n`); - throw err; - }); + try { + const result = await promise; + process.stdout.write(`${OK}\n`); + return result; + } catch (error) { + process.stdout.write(`${FAIL}\n`); + throw error; + } } -function runYarn(script) { - return execa("yarn", [ - "--silent", - ...(Array.isArray(script) ? script : [script]), - ]).catch((error) => { - throw new Error(`\`yarn ${script}\` failed\n${error.stdout}`); - }); +async function runYarn(args, options) { + args = Array.isArray(args) ? args : [args]; + + try { + return await execa("yarn", ["--silent", ...args], options); + } catch (error) { + throw new Error(`\`yarn ${args.join(" ")}\` failed\n${error.stdout}`); + } +} + +function runGit(args, options) { + args = Array.isArray(args) ? args : [args]; + return execa("git", args, options); } function waitForEnter() { @@ -75,8 +86,15 @@ function processFile(filename, fn) { fs.writeFileSync(filename, fn(content)); } +async function fetchText(url) { + const response = await fetch(url); + return response.text(); +} + module.exports = { runYarn, + runGit, + fetchText, logPromise, processFile, readJson, diff --git a/scripts/release/yarn.lock b/scripts/release/yarn.lock index 200f02976..b9a8a1d70 100644 --- a/scripts/release/yarn.lock +++ b/scripts/release/yarn.lock @@ -2,155 +2,207 @@ # yarn lockfile v1 -ansi-regex@^3.0.0: +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-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +execa@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +get-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - dependencies: - color-convert "^1.9.0" - -chalk@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" - dependencies: - color-name "^1.1.1" - -color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -execa@0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" - dependencies: - cross-spawn "^6.0.0" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - -is-fullwidth-code-point@^2.0.0: +is-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" -minimist@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.3.tgz#3db5c0765545ab8637be71f333a104a965a9ca3f" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" -nice-try@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimist@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== node-fetch@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -npm-run-path@^2.0.0: +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +outdent@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" + integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +semver@7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +string-width@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.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== + dependencies: + ansi-regex "^5.0.0" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -outdent@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.7.1.tgz#e9b400443622a97760b0bc74fa3223252ccd02a2" - integrity sha512-VjIzdUHunL74DdhcwMDt5FhNDQ8NYmTkuW0B+usIV2afS9aWT/1c9z1TsnFW349TP3nxmYeUl7Z++XpJRByvgg== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - -semver@5.5.0, semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -string-width@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -supports-color@^5.3.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" - dependencies: - has-flag "^3.0.0" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==