diff --git a/package.json b/package.json index 2a3c967050d..1bf9be46f88 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,6 @@ "extract-errors": "yarn build --type=dev --extract-errors", "postinstall": "node node_modules/fbjs-scripts/node/check-dev-engines.js package.json && node ./scripts/flow/createFlowConfigs.js && node ./scripts/yarn/downloadReactIsForPrettyFormat.js", "debug-test": "yarn test --deprecated 'yarn test --debug'", - "generate-devtools-changelog": "node packages/react-devtools/get-commit-list.js", "test": "node ./scripts/jest/jest-cli.js", "test-stable": "node ./scripts/jest/jest-cli.js --release-channel=stable", "test-www": "node ./scripts/jest/jest-cli.js --release-channel=www-modern", diff --git a/packages/react-devtools-extensions/chrome/manifest.json b/packages/react-devtools-extensions/chrome/manifest.json index 36119681dc3..4a857a28981 100644 --- a/packages/react-devtools-extensions/chrome/manifest.json +++ b/packages/react-devtools-extensions/chrome/manifest.json @@ -4,16 +4,13 @@ "description": "Adds React debugging tools to the Chrome Developer Tools.", "version": "4.16.0", "version_name": "4.16.0", - "minimum_chrome_version": "60", - "icons": { "16": "icons/16-production.png", "32": "icons/32-production.png", "48": "icons/48-production.png", "128": "icons/128-production.png" }, - "browser_action": { "default_icon": { "16": "icons/16-disabled.png", @@ -21,12 +18,9 @@ "48": "icons/48-disabled.png", "128": "icons/128-disabled.png" }, - "default_popup": "popups/disabled.html" }, - "devtools_page": "main.html", - "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", "web_accessible_resources": [ "main.html", @@ -34,18 +28,25 @@ "build/react_devtools_backend.js", "build/renderer.js" ], - "background": { - "scripts": ["build/background.js"], + "scripts": [ + "build/background.js" + ], "persistent": false }, - - "permissions": ["file:///*", "http://*/*", "https://*/*"], - + "permissions": [ + "file:///*", + "http://*/*", + "https://*/*" + ], "content_scripts": [ { - "matches": [""], - "js": ["build/injectGlobalHook.js"], + "matches": [ + "" + ], + "js": [ + "build/injectGlobalHook.js" + ], "run_at": "document_start" } ] diff --git a/packages/react-devtools-extensions/edge/manifest.json b/packages/react-devtools-extensions/edge/manifest.json index 65ab76b74d1..a2bc5047e6c 100644 --- a/packages/react-devtools-extensions/edge/manifest.json +++ b/packages/react-devtools-extensions/edge/manifest.json @@ -4,16 +4,13 @@ "description": "Adds React debugging tools to the Microsoft Edge Developer Tools.", "version": "4.16.0", "version_name": "4.16.0", - "minimum_chrome_version": "60", - "icons": { "16": "icons/16-production.png", "32": "icons/32-production.png", "48": "icons/48-production.png", "128": "icons/128-production.png" }, - "browser_action": { "default_icon": { "16": "icons/16-disabled.png", @@ -21,12 +18,9 @@ "48": "icons/48-disabled.png", "128": "icons/128-disabled.png" }, - "default_popup": "popups/disabled.html" }, - "devtools_page": "main.html", - "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", "web_accessible_resources": [ "main.html", @@ -34,18 +28,25 @@ "build/react_devtools_backend.js", "build/renderer.js" ], - "background": { - "scripts": ["build/background.js"], + "scripts": [ + "build/background.js" + ], "persistent": false }, - - "permissions": ["file:///*", "http://*/*", "https://*/*"], - + "permissions": [ + "file:///*", + "http://*/*", + "https://*/*" + ], "content_scripts": [ { - "matches": [""], - "js": ["build/injectGlobalHook.js"], + "matches": [ + "" + ], + "js": [ + "build/injectGlobalHook.js" + ], "run_at": "document_start" } ] diff --git a/packages/react-devtools-extensions/firefox/manifest.json b/packages/react-devtools-extensions/firefox/manifest.json index dbabb5978cb..2649deb0f58 100644 --- a/packages/react-devtools-extensions/firefox/manifest.json +++ b/packages/react-devtools-extensions/firefox/manifest.json @@ -3,21 +3,18 @@ "name": "React Developer Tools", "description": "Adds React debugging tools to the Firefox Developer Tools.", "version": "4.16.0", - "applications": { "gecko": { "id": "@react-devtools", "strict_min_version": "55.0" } }, - "icons": { "16": "icons/16-production.png", "32": "icons/32-production.png", "48": "icons/48-production.png", "128": "icons/128-production.png" }, - "browser_action": { "default_icon": { "16": "icons/16-disabled.png", @@ -25,13 +22,10 @@ "48": "icons/48-disabled.png", "128": "icons/128-disabled.png" }, - "default_popup": "popups/disabled.html", "browser_style": true }, - "devtools_page": "main.html", - "content_security_policy": "script-src 'self' 'unsafe-eval' blob:; object-src 'self'", "web_accessible_resources": [ "main.html", @@ -39,17 +33,25 @@ "build/react_devtools_backend.js", "build/renderer.js" ], - "background": { - "scripts": ["build/background.js"] + "scripts": [ + "build/background.js" + ] }, - - "permissions": ["file:///*", "http://*/*", "https://*/*", "clipboardWrite"], - + "permissions": [ + "file:///*", + "http://*/*", + "https://*/*", + "clipboardWrite" + ], "content_scripts": [ { - "matches": [""], - "js": ["build/injectGlobalHook.js"], + "matches": [ + "" + ], + "js": [ + "build/injectGlobalHook.js" + ], "run_at": "document_start" } ] diff --git a/packages/react-devtools/CHANGELOG.md b/packages/react-devtools/CHANGELOG.md index dd5d09b5e63..bcf5ccb87c5 100644 --- a/packages/react-devtools/CHANGELOG.md +++ b/packages/react-devtools/CHANGELOG.md @@ -1,13 +1,6 @@ # React DevTools changelog -
- - Changes that have landed in main but are not yet released. - Click to see more. - - - -
+ ## 4.16.0 (August 16, 2021) #### Features diff --git a/packages/react-devtools/get-commit-list.js b/packages/react-devtools/get-commit-list.js deleted file mode 100644 index d621ed916c5..00000000000 --- a/packages/react-devtools/get-commit-list.js +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -const {execSync} = require('child_process'); -const readline = require('readline'); - -const PULL_REQUEST_BASE_URL = 'https://github.com/facebook/react/pull/'; - -const hashes = []; -const lines = execSync(` - git log --max-count=5 --topo-order --pretty=format:'%H:::%s:::%as' HEAD -- packages/react-devtools-core/package.json -`) - .toString() - .trim() - .split('\n'); -lines.forEach((line, index) => { - const [hash, message, date] = line.split(':::'); - hashes.push(hash); - console.log( - `\x1b[1m(${index + 1})\x1b[0m ${message} \x1b[2m(${date})\x1b[0m`, - ); -}); - -const prompt = readline.createInterface({ - input: process.stdin, - output: process.stdout, -}); -prompt.question( - '\n' + - '\x1b[1m' + - 'Which of the commits above marks the last DevTools release?' + - '\x1b[0m ', - numberString => { - const hashIndex = parseInt(numberString, 10) - 1; - const hash = hashes[hashIndex]; - - let formattedLog = ''; - - const rawLog = execSync(` - git log --topo-order --pretty=format:'%s' ${hash}...HEAD -- packages/react-devtools* - `) - .toString() - .trim(); - rawLog.split('\n').forEach(line => { - line = line.replace('[DevTools] ', ''); - - const match = line.match(/(.+) \(#([0-9]+)\)/); - if (match !== null) { - const title = match[1]; - const pr = match[2]; - - formattedLog += `\n* ${title} \x1b[31m([USERNAME](https://github.com/USERNAME)\x1b[0m in [#${pr}](\x1b[4m\x1b[34m${PULL_REQUEST_BASE_URL}${pr}\x1b[0m))`; - } else { - formattedLog += `\n* ${line}`; - } - }); - - console.log(formattedLog); - - prompt.close(); - }, -); diff --git a/scripts/devtools/.gitignore b/scripts/devtools/.gitignore new file mode 100644 index 00000000000..c8d23da2ed4 --- /dev/null +++ b/scripts/devtools/.gitignore @@ -0,0 +1 @@ +.progress-estimator \ No newline at end of file diff --git a/scripts/devtools/README.md b/scripts/devtools/README.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/scripts/devtools/package.json b/scripts/devtools/package.json new file mode 100644 index 00000000000..2188210b239 --- /dev/null +++ b/scripts/devtools/package.json @@ -0,0 +1,16 @@ +{ + "name": "react-devtools-release-script", + "version": "0.0.0", + "private": true, + "scripts": {}, + "license": "MIT", + "dependencies": { + "chalk": "^2.1.0", + "child-process-promise": "^2.2.1", + "fs-extra": "^4.0.2", + "inquirer": "^8.1.2", + "progress-estimator": "^0.2.1", + "prompt-promise": "^1.0.3", + "semver": "^5.4.1" + } +} diff --git a/scripts/devtools/release.js b/scripts/devtools/release.js new file mode 100755 index 00000000000..d403c0cd024 --- /dev/null +++ b/scripts/devtools/release.js @@ -0,0 +1,553 @@ +#!/usr/bin/env node + +'use strict'; + +const chalk = require('chalk'); +const {exec} = require('child-process-promise'); +const {readFileSync, writeFileSync} = require('fs'); +const {readJsonSync, writeJsonSync} = require('fs-extra'); +const inquirer = require('inquirer'); +const {homedir} = require('os'); +const createLogger = require('progress-estimator'); +const {join} = require('path'); +const semver = require('semver'); + +const PACKAGE_PATHS = [ + 'packages/react-devtools/package.json', + 'packages/react-devtools-core/package.json', + 'packages/react-devtools-inline/package.json', + 'packages/react-devtools-scheduling-profiler/package.json', +]; + +const MANIFEST_PATHS = [ + 'packages/react-devtools-extensions/chrome/manifest.json', + 'packages/react-devtools-extensions/edge/manifest.json', + 'packages/react-devtools-extensions/firefox/manifest.json', +]; + +const NPM_PACKAGES = [ + 'react-devtools', + 'react-devtools-core', + 'react-devtools-inline', +]; + +const CHANGELOG_PATH = 'packages/react-devtools/CHANGELOG.md'; + +const PULL_REQUEST_BASE_URL = 'https://github.com/facebook/react/pull/'; + +const RELEASE_SCRIPT_TOKEN = ''; + +const ROOT_PATH = join(__dirname, '..', '..'); + +const DRY_RUN = process.argv.includes('--dry'); + +const logger = createLogger({ + storagePath: join(__dirname, '.progress-estimator'), +}); + +// This is the primary control function for this script. +async function main() { + await checkNPMPermissions(); + + const releaseType = await getReleaseType(); + + const path = join(ROOT_PATH, PACKAGE_PATHS[0]); + const previousVersion = readJsonSync(path).version; + const {major, minor, patch} = semver(previousVersion); + const nextVersion = + releaseType === 'minor' + ? `${major}.${minor + 1}.${patch}` + : `${major}.${minor}.${patch + 1}`; + + updatePackageVersions(previousVersion, nextVersion); + updateManifestVersions(previousVersion, nextVersion); + + console.log(''); + console.log( + `Packages and manifests have been updated from version ${chalk.bold( + previousVersion + )} to ${chalk.bold(nextVersion)}` + ); + console.log(''); + + const sha = await getPreviousCommitSha(); + const commitLog = await getCommitLog(sha); + + updateChangelog(nextVersion, commitLog); + + await reviewChangelogPrompt(); + + await commitPendingChanges(previousVersion, nextVersion); + + const archivePath = await archiveGitRevision(); + const buildID = await downloadLatestReactBuild(); + + await buildAndTestInlinePackage(); + await buildAndTestStandalonePackage(); + await buildAndTestExtensions(); + + await publishToNPM(); + + await printFinalInstructions(buildID, archivePath); +} + +async function archiveGitRevision() { + const desktopPath = join(homedir(), 'Desktop'); + const archivePath = join(desktopPath, 'DevTools.tgz'); + + console.log(`Creating git archive at ${chalk.dim(archivePath)}`); + console.log(''); + + if (!DRY_RUN) { + await exec(`git archive main | gzip > ${archivePath}`, {cwd: ROOT_PATH}); + } + + return archivePath; +} + +async function buildAndTestExtensions() { + const extensionsPackagePath = join( + ROOT_PATH, + 'packages', + 'react-devtools-extensions' + ); + const buildExtensionsPromise = exec('yarn build', { + cwd: extensionsPackagePath, + }); + + await logger( + buildExtensionsPromise, + `Building browser extensions ${chalk.dim('(this may take a minute)')}`, + { + estimate: 60000, + } + ); + + console.log(''); + console.log(`Extensions have been build for Chrome, Edge, and Firefox.`); + console.log(''); + console.log('Smoke test each extension before continuing:'); + console.log(` ${chalk.bold.green('cd ' + extensionsPackagePath)}`); + console.log(''); + console.log(` ${chalk.dim('# Test Chrome extension')}`); + console.log(` ${chalk.bold.green('yarn test:chrome')}`); + console.log(''); + console.log(` ${chalk.dim('# Test Edge extension')}`); + console.log(` ${chalk.bold.green('yarn test:edge')}`); + console.log(''); + console.log(` ${chalk.dim('# Firefox Chrome extension')}`); + console.log(` ${chalk.bold.green('yarn test:firefox')}`); + + await confirmContinue(); +} + +async function buildAndTestStandalonePackage() { + const corePackagePath = join(ROOT_PATH, 'packages', 'react-devtools-core'); + const buildCorePromise = exec('yarn build', {cwd: corePackagePath}); + + await logger( + buildCorePromise, + `Building ${chalk.bold('react-devtools-core')} package.`, + { + estimate: 25000, + } + ); + + const standalonePackagePath = join(ROOT_PATH, 'packages', 'react-devtools'); + const safariFixturePath = join( + ROOT_PATH, + 'fixtures', + 'devtools', + 'standalone', + 'index.html' + ); + + console.log(''); + console.log( + `Test the ${chalk.bold('react-devtools-core')} target before continuing:` + ); + console.log(` ${chalk.bold.green('cd ' + standalonePackagePath)}`); + console.log(` ${chalk.bold.green('yarn start')}`); + console.log(''); + console.log( + 'The following fixture can be useful for testing Safari integration:' + ); + console.log(` ${chalk.dim(safariFixturePath)}`); + + await confirmContinue(); +} + +async function buildAndTestInlinePackage() { + const inlinePackagePath = join( + ROOT_PATH, + 'packages', + 'react-devtools-inline' + ); + const buildPromise = exec('yarn build', {cwd: inlinePackagePath}); + + await logger( + buildPromise, + `Building ${chalk.bold('react-devtools-inline')} package.`, + { + estimate: 10000, + } + ); + + const shellPackagePath = join(ROOT_PATH, 'packages', 'react-devtools-shell'); + + console.log(''); + console.log(`Built ${chalk.bold('react-devtools-inline')} target.`); + console.log(''); + console.log('Test this build before continuing:'); + console.log(` ${chalk.bold.green('cd ' + shellPackagePath)}`); + console.log(` ${chalk.bold.green('yarn start')}`); + + await confirmContinue(); +} + +async function checkNPMPermissions() { + const currentUser = await execRead('npm whoami'); + const failedProjects = []; + + const checkProject = async project => { + const owners = (await execRead(`npm owner ls ${project}`)) + .split('\n') + .filter(owner => owner) + .map(owner => owner.split(' ')[0]); + + if (!owners.includes(currentUser)) { + failedProjects.push(project); + } + }; + + await logger( + Promise.all(NPM_PACKAGES.map(checkProject)), + `Checking NPM permissions for ${chalk.bold(currentUser)}.`, + {estimate: 2500} + ); + + console.log(''); + + if (failedProjects.length) { + console.error(chalk.bold('Insufficient NPM permissions')); + console.error(''); + console.error( + `NPM user {underline ${currentUser}} is not an owner for: ${chalk.bold( + failedProjects.join(', ') + )}` + ); + console.error( + 'Please contact a React team member to be added to the above project(s).' + ); + process.exit(1); + } +} + +async function commitPendingChanges(previousVersion, nextVersion) { + console.log(''); + console.log('Committing revision and changelog.'); + console.log(chalk.dim(' git add .')); + console.log( + chalk.dim( + ` git commit -m "React DevTools ${previousVersion} -> ${nextVersion}"` + ) + ); + + if (!DRY_RUN) { + await exec(` + git add . + git commit -m "React DevTools ${previousVersion} -> ${nextVersion}" + `); + } + + console.log(''); + console.log(`Please push this commit before continuing:`); + console.log(` ${chalk.bold.green('git push')}`); + + await confirmContinue(); +} + +async function confirmContinue() { + console.log(''); + + const {confirm} = await inquirer.prompt({ + name: 'confirm', + type: 'confirm', + message: 'Continue the release?', + }); + if (!confirm) { + process.exit(0); + } + + console.log(''); +} + +async function downloadLatestReactBuild() { + const releaseScriptPath = join(ROOT_PATH, 'scripts', 'release'); + const installPromise = exec('yarn install', {cwd: releaseScriptPath}); + + await logger(installPromise, 'Installing release script dependencies.', { + estimate: 5000, + }); + + console.log(''); + + const {commit} = await inquirer.prompt([ + { + type: 'input', + name: 'commit', + message: 'Which React version (commit) should be used?', + default: 'main', + }, + ]); + console.log(''); + + const downloadScriptPath = join( + releaseScriptPath, + 'download-experimental-build.js' + ); + const downloadPromise = execRead( + `"${downloadScriptPath}" --commit=${commit}` + ); + + const output = await logger( + downloadPromise, + 'Downloading React artifacts from CI.', + {estimate: 15000} + ); + + const match = output.match('--build=([0-9]+)'); + if (match.length === 0) { + console.error(`No build ID found in "${output}"`); + process.exit(1); + } + + const buildID = match[1]; + + console.log(''); + console.log(`Downloaded artiacts for CI build ${chalk.bold(buildID)}.`); + + await confirmContinue(); + + return buildID; +} + +async function execRead(command, options) { + const {stdout} = await exec(command, options); + + return stdout.trim(); +} + +async function getCommitLog(sha) { + let formattedLog = ''; + + const rawLog = await execRead(` + git log --topo-order --pretty=format:'%s' ${sha}...HEAD -- packages/react-devtools* + `); + rawLog.split('\n').forEach(line => { + line = line.replace('[DevTools] ', ''); + + const match = line.match(/(.+) \(#([0-9]+)\)/); + if (match !== null) { + const title = match[1]; + const pr = match[2]; + + formattedLog += `\n* ${title} ([USERNAME](https://github.com/USERNAME) in [#${pr}](${PULL_REQUEST_BASE_URL}${pr}))`; + } else { + formattedLog += `\n* ${line}`; + } + }); + + return formattedLog; +} + +async function getPreviousCommitSha() { + const choices = []; + + const lines = await execRead(` + git log --max-count=5 --topo-order --pretty=format:'%H:::%s:::%as' HEAD -- ${PACKAGE_PATHS[0]} + `); + lines.split('\n').forEach((line, index) => { + const [hash, message, date] = line.split(':::'); + choices.push({ + name: `${chalk.bold(hash)} ${chalk.dim(date)} ${message}`, + value: hash, + short: date, + }); + }); + + const {sha} = await inquirer.prompt([ + { + type: 'list', + name: 'sha', + message: 'Which of the commits above marks the last DevTools release?', + choices, + default: choices[0].value, + }, + ]); + + return sha; +} + +async function getReleaseType() { + const {releaseType} = await inquirer.prompt([ + { + type: 'list', + name: 'releaseType', + message: 'Which type of release is this?', + choices: [ + { + name: 'Minor (new user facing functionality)', + value: 'minor', + short: 'Minor', + }, + {name: 'Patch (bug fixes only)', value: 'patch', short: 'Patch'}, + ], + default: 'patch', + }, + ]); + + return releaseType; +} + +async function printFinalInstructions(buildID, archivePath) { + console.log(''); + console.log( + 'You are now ready to publish the extension to Chrome, Edge, and Firefox:' + ); + console.log( + ` ${chalk.blue.underline( + 'https://fburl.com/publish-react-devtools-extensions' + )}` + ); + console.log(''); + console.log('When publishing to Firefox, remember the following:'); + console.log(` Build id: ${chalk.bold(buildID)}`); + console.log(` Git archive: ${chalk.bold(archivePath)}`); + console.log(''); + console.log('Also consider syncing this release to Facebook:'); + console.log(` ${chalk.bold.green('js1 upgrade react-devtools')}`); +} + +async function publishToNPM() { + const {otp} = await inquirer.prompt([ + { + type: 'input', + name: 'otp', + message: 'Please provide an NPM two-factor auth token:', + }, + ]); + + console.log(''); + + if (!otp) { + console.error(`Invalid OTP provided: "${chalk.bold(otp)}"`); + process.exit(0); + } + + for (let index = 0; index < NPM_PACKAGES.length; index++) { + const npmPackage = NPM_PACKAGES[index]; + const packagePath = join(ROOT_PATH, 'packages', npmPackage); + + if (DRY_RUN) { + console.log(`Publishing package ${chalk.bold(npmPackage)}`); + console.log(chalk.dim(` npm publish --otp=${otp}`)); + } else { + const publishPromise = exec(`npm publish --otp=${otp}`, { + cwd: packagePath, + }); + + await logger( + publishPromise, + `Publishing package ${chalk.bold(npmPackage)}`, + { + estimate: 2500, + } + ); + } + } +} + +async function reviewChangelogPrompt() { + console.log(''); + console.log( + 'The changelog has been updated with commits since the previous release:' + ); + console.log(` ${chalk.bold(CHANGELOG_PATH)}`); + console.log(''); + console.log('Please review the new changelog text for the following:'); + console.log(' 1. Organize the list into Features vs Bugfixes'); + console.log(' 1. Filter out any non-user-visible changes (e.g. typo fixes)'); + console.log(' 1. Combine related PRs into a single bullet list.'); + console.log( + ' 1. Replacing the "USERNAME" placeholder text with the GitHub username(s)' + ); + console.log(''); + console.log(` ${chalk.bold.green(`open ${CHANGELOG_PATH}`)}`); + + await confirmContinue(); +} + +function updateChangelog(nextVersion, commitLog) { + const path = join(ROOT_PATH, CHANGELOG_PATH); + const oldChangelog = readFileSync(path, 'utf8'); + + const [beginning, end] = oldChangelog.split(RELEASE_SCRIPT_TOKEN); + + const dateString = new Date().toLocaleDateString('en-us', { + year: 'numeric', + month: 'long', + day: 'numeric', + }); + const header = `## ${nextVersion} (${dateString})`; + + const newChangelog = `${beginning}${RELEASE_SCRIPT_TOKEN}\n\n${header}\n${commitLog}${end}`; + + console.log(chalk.dim(' Updating changelog: ' + CHANGELOG_PATH)); + + if (!DRY_RUN) { + writeFileSync(path, newChangelog); + } +} + +function updateManifestVersions(previousVersion, nextVersion) { + MANIFEST_PATHS.forEach(partialPath => { + const path = join(ROOT_PATH, partialPath); + const json = readJsonSync(path); + json.version = nextVersion; + + if (json.hasOwnProperty('version_name')) { + json.version_name = nextVersion; + } + + console.log(chalk.dim(' Updating manifest JSON: ' + partialPath)); + + if (!DRY_RUN) { + writeJsonSync(path, json, {spaces: 2}); + } + }); +} + +function updatePackageVersions(previousVersion, nextVersion) { + PACKAGE_PATHS.forEach(partialPath => { + const path = join(ROOT_PATH, partialPath); + const json = readJsonSync(path); + json.version = nextVersion; + + for (let key in json.dependencies) { + if (key.startsWith('react-devtools')) { + const version = json.dependencies[key]; + + json.dependencies[key] = version.replace(previousVersion, nextVersion); + } + } + + console.log(chalk.dim(' Updating package JSON: ' + partialPath)); + + if (!DRY_RUN) { + writeJsonSync(path, json, {spaces: 2}); + } + }); +} + +main(); diff --git a/scripts/devtools/yarn.lock b/scripts/devtools/yarn.lock new file mode 100644 index 00000000000..37c759ab79f --- /dev/null +++ b/scripts/devtools/yarn.lock @@ -0,0 +1,529 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +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@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +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" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +chalk@^2.1.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +cli-cursor@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" + integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== + +cli-spinners@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" + integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +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.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +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== + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +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== + +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" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +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== + +humanize-duration@^3.15.3: + version "3.27.0" + resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.27.0.tgz#3f781b7cf8022ad587f76b9839b60bc2b29636b2" + integrity sha512-qLo/08cNc3Tb0uD7jK0jAcU5cnqCM0n568918E7R2XhMr/+7F37p4EY062W/stg7tmzvknNn9b/1+UhVRzsYrQ== + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inquirer@^8.1.2: + version "8.1.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.2.tgz#65b204d2cd7fb63400edd925dfe428bafd422e3d" + integrity sha512-DHLKJwLPNgkfwNmsuEUKSejJFbkv0FMO9SMiQbjI3n5NQuCrSIBqP66ggqyz2a6t2qEolKrMjhQ3+W/xXgUQ+Q== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.3.0" + run-async "^2.4.0" + rxjs "^7.2.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +is-fullwidth-code-point@^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" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +keypress@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.2.1.tgz#1e80454250018dbad4c3fe94497d6e67b6269c77" + integrity sha1-HoBFQlABjbrUw/6USX1uZ7YmnHc= + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +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== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +native-or-another@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/native-or-another/-/native-or-another-2.0.0.tgz#17a567f92beea9cd71acff96a7681a735eca3bff" + integrity sha1-F6Vn+Svuqc1xrP+Wp2gac17KO/8= + dependencies: + native-or-bluebird "^1.1.2" + +native-or-bluebird@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/native-or-bluebird/-/native-or-bluebird-1.2.0.tgz#39c47bfd7825d1fb9ffad32210ae25daadf101c9" + integrity sha1-OcR7/Xgl0fuf+tMiEK4l2q3xAck= + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + 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" + +ora@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +progress-estimator@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/progress-estimator/-/progress-estimator-0.2.2.tgz#1c3947a5782ea56e40c8fccc290ac7ceeb1b91cb" + integrity sha512-GF76Ac02MTJD6o2nMNtmtOFjwWCnHcvXyn5HOWPQnEMO8OTLw7LAvNmrwe8LmdsB+eZhwUu9fX/c9iQnBxWaFA== + dependencies: + chalk "^2.4.1" + cli-spinners "^1.3.1" + humanize-duration "^3.15.3" + log-update "^2.3.0" + +prompt-promise@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/prompt-promise/-/prompt-promise-1.0.3.tgz#78ce4fcb9a14a108c49174f2d808c440d1bde265" + integrity sha1-eM5Py5oUoQjEkXTy2AjEQNG94mU= + dependencies: + keypress "~0.2.1" + native-or-another "~2.0.0" + +readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +rxjs@^7.2.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.3.0.tgz#39fe4f3461dc1e50be1475b2b85a0a88c1e938c6" + integrity sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw== + dependencies: + tslib "~2.1.0" + +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== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@^5.4.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.1.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.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" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +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" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tslib@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0"