Introduce Release script (#4631)
parent
f27f6c525b
commit
54b1f8562d
|
@ -4,6 +4,7 @@
|
||||||
!/**/.eslintrc.js
|
!/**/.eslintrc.js
|
||||||
/test.js
|
/test.js
|
||||||
/scripts/build/shims
|
/scripts/build/shims
|
||||||
|
/scripts/release/node_modules
|
||||||
/coverage/
|
/coverage/
|
||||||
/dist/
|
/dist/
|
||||||
**/node_modules/**
|
**/node_modules/**
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
/node_modules
|
/node_modules
|
||||||
|
/scripts/release/node_modules
|
||||||
*.log
|
*.log
|
||||||
/errors
|
/errors
|
||||||
/test.js
|
/test.js
|
||||||
|
|
|
@ -1,2 +1,9 @@
|
||||||
|
parserOptions:
|
||||||
|
ecmaVersion: 2017
|
||||||
rules:
|
rules:
|
||||||
no-console: off
|
no-console: off
|
||||||
|
overrides:
|
||||||
|
files:
|
||||||
|
- test-dist.js
|
||||||
|
parserOptions:
|
||||||
|
ecmaVersion: 6
|
||||||
|
|
|
@ -5,23 +5,22 @@ const stringWidth = require("string-width");
|
||||||
const bundler = require("./bundler");
|
const bundler = require("./bundler");
|
||||||
const bundleConfigs = require("./config");
|
const bundleConfigs = require("./config");
|
||||||
const util = require("./util");
|
const util = require("./util");
|
||||||
const formatMarkdown = require("../../website/playground/markdown");
|
|
||||||
|
|
||||||
// Errors in promises should be fatal.
|
// Errors in promises should be fatal.
|
||||||
const loggedErrors = new Set();
|
const loggedErrors = new Set();
|
||||||
process.on("unhandledRejection", err => {
|
process.on("unhandledRejection", err => {
|
||||||
if (loggedErrors.has(err)) {
|
// No need to print it twice.
|
||||||
// No need to print it twice.
|
if (!loggedErrors.has(err)) {
|
||||||
process.exit(1);
|
console.error(err);
|
||||||
}
|
}
|
||||||
throw err;
|
process.exit(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
const OK = chalk.reset.inverse.bold.green(" DONE ");
|
const OK = chalk.reset.inverse.bold.green(" DONE ");
|
||||||
const FAIL = chalk.reset.inverse.bold.red(" FAIL ");
|
const FAIL = chalk.reset.inverse.bold.red(" FAIL ");
|
||||||
|
|
||||||
function fitTerminal(input) {
|
function fitTerminal(input) {
|
||||||
const columns = process.stdout.columns || 80;
|
const columns = Math.min(process.stdout.columns, 80);
|
||||||
const WIDTH = columns - stringWidth(OK) + 1;
|
const WIDTH = columns - stringWidth(OK) + 1;
|
||||||
if (input.length < WIDTH) {
|
if (input.length < WIDTH) {
|
||||||
input += Array(WIDTH - input.length).join(chalk.dim("."));
|
input += Array(WIDTH - input.length).join(chalk.dim("."));
|
||||||
|
@ -65,30 +64,6 @@ async function preparePackage() {
|
||||||
await util.copyFile("./README.md", "./dist/README.md");
|
await util.copyFile("./README.md", "./dist/README.md");
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateIssueTemplate() {
|
|
||||||
const filename = ".github/ISSUE_TEMPLATE.md";
|
|
||||||
const issueTemplate = await util.readFile(filename, "utf8");
|
|
||||||
|
|
||||||
const pkg = await util.readJson("package.json");
|
|
||||||
await util.writeFile(
|
|
||||||
filename,
|
|
||||||
issueTemplate.replace(
|
|
||||||
/-->[^]*$/,
|
|
||||||
"-->\n\n" +
|
|
||||||
formatMarkdown(
|
|
||||||
"// code snippet",
|
|
||||||
"// code snippet",
|
|
||||||
"",
|
|
||||||
pkg.version,
|
|
||||||
"https://prettier.io/playground/#.....",
|
|
||||||
{ parser: "babylon" },
|
|
||||||
[["# Options (if any):", true], ["--single-quote", true]],
|
|
||||||
true
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
await util.asyncRimRaf("dist");
|
await util.asyncRimRaf("dist");
|
||||||
|
|
||||||
|
@ -98,7 +73,6 @@ async function run() {
|
||||||
}
|
}
|
||||||
|
|
||||||
await preparePackage();
|
await preparePackage();
|
||||||
await updateIssueTemplate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
run();
|
run();
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
# Release script
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```
|
||||||
|
./scripts/release/release.js --version NEW_VERSION
|
||||||
|
```
|
||||||
|
|
||||||
|
The script its own `package.json` so we can reinstall the root's `node_modules/` while making the release.
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
This script was inspired by [React's release script](https://github.com/facebook/react/tree/001f9ef/scripts/release).
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"private": true,
|
||||||
|
"dependencies": {
|
||||||
|
"chalk": "2.4.1",
|
||||||
|
"child-process-promise": "2.2.1",
|
||||||
|
"dedent": "0.7.0",
|
||||||
|
"minimist": "1.2.0",
|
||||||
|
"node-fetch": "2.1.2",
|
||||||
|
"prs-merged-since": "1.0.1",
|
||||||
|
"semver": "5.5.0",
|
||||||
|
"string-width": "2.1.1"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
async function run() {
|
||||||
|
const chalk = require("chalk");
|
||||||
|
const dedent = require("dedent");
|
||||||
|
const minimist = require("minimist");
|
||||||
|
|
||||||
|
const { readJson } = require("./utils");
|
||||||
|
|
||||||
|
const params = minimist(process.argv.slice(2), {
|
||||||
|
string: ["version"],
|
||||||
|
boolean: ["dry"],
|
||||||
|
alias: { v: "version" }
|
||||||
|
});
|
||||||
|
params.previousVersion = (await readJson("package.json")).version;
|
||||||
|
|
||||||
|
const steps = [
|
||||||
|
require("./steps/validate-new-version"),
|
||||||
|
require("./steps/check-git-status"),
|
||||||
|
require("./steps/install-dependencies"),
|
||||||
|
require("./steps/run-tests"),
|
||||||
|
require("./steps/update-version"),
|
||||||
|
require("./steps/generate-bundles"),
|
||||||
|
require("./steps/update-changelog"),
|
||||||
|
require("./steps/push-to-git"),
|
||||||
|
require("./steps/publish-to-npm"),
|
||||||
|
require("./steps/bump-prettier"),
|
||||||
|
require("./steps/post-publish-steps")
|
||||||
|
];
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (const step of steps) {
|
||||||
|
await step(params);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
const message = dedent(error.message.trim());
|
||||||
|
const stack = error.stack.replace(message, "");
|
||||||
|
console.error(`${chalk.red("error")} ${message}\n${stack}`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Install script's dependencies before any require
|
||||||
|
const { exec } = require("child_process");
|
||||||
|
exec("yarn install", { cwd: __dirname }, error => {
|
||||||
|
if (error) {
|
||||||
|
console.error(error);
|
||||||
|
process.exit(1);
|
||||||
|
} else {
|
||||||
|
run();
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,32 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const { exec, spawn } = require("child-process-promise");
|
||||||
|
const { logPromise } = require("../utils");
|
||||||
|
|
||||||
|
async function format() {
|
||||||
|
await exec("yarn lint --fix");
|
||||||
|
await exec("yarn lint-docs --fix");
|
||||||
|
}
|
||||||
|
|
||||||
|
async function commit(version) {
|
||||||
|
await spawn("git", [
|
||||||
|
"commit",
|
||||||
|
"-am",
|
||||||
|
`Bump Prettier dependency to ${version}`
|
||||||
|
]);
|
||||||
|
await exec("git push");
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = async function({ dry, version }) {
|
||||||
|
if (dry) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await logPromise(
|
||||||
|
"Installing Prettier",
|
||||||
|
spawn("yarn", ["add", "--dev", `prettier@${version}`])
|
||||||
|
);
|
||||||
|
|
||||||
|
await logPromise("Updating files", format());
|
||||||
|
await logPromise("Committing changed files", commit(version));
|
||||||
|
};
|
|
@ -0,0 +1,14 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const { exec } = require("child-process-promise");
|
||||||
|
|
||||||
|
module.exports = async function() {
|
||||||
|
const status = (await exec("git status --porcelain")).stdout;
|
||||||
|
|
||||||
|
if (status) {
|
||||||
|
throw Error(
|
||||||
|
"Uncommited local changes. " +
|
||||||
|
"Please revert or commit all local changes before making a release."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,19 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const chalk = require("chalk");
|
||||||
|
const { runYarn, logPromise, readJson } = require("../utils");
|
||||||
|
|
||||||
|
module.exports = async function({ version }) {
|
||||||
|
await logPromise("Generating bundles", runYarn("build"));
|
||||||
|
|
||||||
|
const builtPkg = await readJson("dist/package.json");
|
||||||
|
if (builtPkg.version !== version) {
|
||||||
|
throw Error(
|
||||||
|
`Expected ${version} in dist/package.json but found ${builtPkg.version}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
await logPromise("Running tests on generated bundles", runYarn("test:dist"));
|
||||||
|
|
||||||
|
console.log(chalk.green.bold("Build successful!\n"));
|
||||||
|
};
|
|
@ -0,0 +1,20 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const { exec } = require("child-process-promise");
|
||||||
|
const { logPromise } = require("../utils");
|
||||||
|
|
||||||
|
async function install() {
|
||||||
|
await exec("rm -rf node_modules");
|
||||||
|
await exec("yarn install");
|
||||||
|
|
||||||
|
const status = (await exec("git ls-files -m")).stdout.trim();
|
||||||
|
if (status) {
|
||||||
|
throw Error(
|
||||||
|
"The lockfile needs to be updated, commit it before making the release."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = function() {
|
||||||
|
return logPromise("Installing NPM dependencies", install());
|
||||||
|
};
|
|
@ -0,0 +1,65 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const chalk = require("chalk");
|
||||||
|
const dedent = require("dedent");
|
||||||
|
const fetch = require("node-fetch");
|
||||||
|
const { exec } = require("child-process-promise");
|
||||||
|
const { logPromise, waitForEnter } = require("../utils");
|
||||||
|
|
||||||
|
const SCHEMA_REPO = "SchemaStore/schemastore";
|
||||||
|
const SCHEMA_PATH = "src/schemas/json/prettierrc.json";
|
||||||
|
const RAW_URL = `https://raw.githubusercontent.com/${SCHEMA_REPO}/master/${SCHEMA_PATH}`;
|
||||||
|
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 exec("node scripts/generate-schema.js")).stdout.trim();
|
||||||
|
const remoteSchema = await logPromise(
|
||||||
|
"Checking current schema in SchemaStore",
|
||||||
|
fetch(RAW_URL)
|
||||||
|
.then(r => r.text())
|
||||||
|
.then(t => t.trim())
|
||||||
|
);
|
||||||
|
|
||||||
|
if (schema === remoteSchema) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dedent(chalk`
|
||||||
|
{bold.underline The schema in {yellow SchemaStore} needs an update.}
|
||||||
|
- Open {cyan.underline ${EDIT_URL}}
|
||||||
|
- Run {yellow node scripts/generate-schema.js} and copy the new schema
|
||||||
|
- Paste it on GitHub interface
|
||||||
|
- Open a PR
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
|
||||||
|
function twitterAnnouncement() {
|
||||||
|
return dedent(chalk`
|
||||||
|
{bold.underline Announce on Twitter}
|
||||||
|
- Open {cyan.underline https://tweetdeck.twitter.com}
|
||||||
|
- Make sure you are tweeting from the {yellow @PrettierCode} account.
|
||||||
|
- Tweet about the release, including the blog post URL.
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = async function() {
|
||||||
|
const steps = [await checkSchema(), twitterAnnouncement()].filter(Boolean);
|
||||||
|
|
||||||
|
console.log(chalk.bold.green("The script has finished!\n"));
|
||||||
|
|
||||||
|
if (steps.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
dedent(chalk`
|
||||||
|
{yellow.bold The following ${
|
||||||
|
steps.length === 1 ? "step is" : "steps are"
|
||||||
|
} optional.}
|
||||||
|
|
||||||
|
${steps.join("\n\n")}
|
||||||
|
`)
|
||||||
|
);
|
||||||
|
};
|
|
@ -0,0 +1,36 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const chalk = require("chalk");
|
||||||
|
const dedent = require("dedent");
|
||||||
|
const { exec } = require("child-process-promise");
|
||||||
|
const { logPromise, waitForEnter } = require("../utils");
|
||||||
|
|
||||||
|
module.exports = async function({ dry, version }) {
|
||||||
|
if (dry) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await logPromise("Publishing to npm", exec("npm publish", { cwd: "./dist" }));
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
dedent(chalk`
|
||||||
|
{green.bold Prettier ${version} published!}
|
||||||
|
|
||||||
|
{yellow.bold Some manual steps are necessary.}
|
||||||
|
|
||||||
|
{bold.underline Create a GitHub Release}
|
||||||
|
- Go to {cyan.underline https://github.com/prettier/prettier/releases/new?tag=${version}}
|
||||||
|
- Copy release notes from {yellow CHANGELOG.md}
|
||||||
|
- Attach all files in {yellow dist/} folder.
|
||||||
|
- Press {bgGreen.black Publish release }
|
||||||
|
|
||||||
|
{bold.underline Test the new releae}
|
||||||
|
- In a new session, run {yellow npm i prettier@latest} in another directory
|
||||||
|
- Test the API and CLI
|
||||||
|
|
||||||
|
After that, we can proceed to bump this repo's Prettier dependency.
|
||||||
|
Press any key to continue.
|
||||||
|
`)
|
||||||
|
);
|
||||||
|
await waitForEnter();
|
||||||
|
};
|
|
@ -0,0 +1,19 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const { exec, spawn } = require("child-process-promise");
|
||||||
|
const { logPromise } = require("../utils");
|
||||||
|
|
||||||
|
async function pushGit({ version }) {
|
||||||
|
await spawn("git", ["commit", "-am", `Release ${version}`]);
|
||||||
|
await spawn("git", ["tag", "-a", version, "-m", `Release ${version}`]);
|
||||||
|
await exec("git push");
|
||||||
|
await exec("git push --tags");
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = function(params) {
|
||||||
|
if (params.dry) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return logPromise("Committing and pushing to remote", pushGit(params));
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const { runYarn, logPromise } = require("../utils");
|
||||||
|
|
||||||
|
module.exports = async function() {
|
||||||
|
await logPromise("Running linter", runYarn("lint"));
|
||||||
|
await logPromise("Running linter on docs", runYarn("lint-docs"));
|
||||||
|
await logPromise("Running tests", runYarn("test"));
|
||||||
|
};
|
|
@ -0,0 +1,100 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const chalk = require("chalk");
|
||||||
|
const dedent = require("dedent");
|
||||||
|
const fs = require("fs");
|
||||||
|
const prsMergedSince = require("prs-merged-since");
|
||||||
|
const semver = require("semver");
|
||||||
|
const { logPromise, waitForEnter } = require("../utils");
|
||||||
|
|
||||||
|
function getBlogPostInfo(version) {
|
||||||
|
const date = new Date();
|
||||||
|
const year = date.getFullYear();
|
||||||
|
const month = new String(date.getMonth() + 1).padStart(2, "0");
|
||||||
|
const day = new String(date.getDate()).padStart(2, "0");
|
||||||
|
|
||||||
|
return {
|
||||||
|
file: `website/blog/${year}-${month}-${day}-${version}.md`,
|
||||||
|
path: `blog/${year}/${month}/${day}/${version}.html`
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getMergedPrs(previousVersion) {
|
||||||
|
const prs = await prsMergedSince({
|
||||||
|
repo: "prettier/prettier",
|
||||||
|
tag: previousVersion,
|
||||||
|
githubApiToken: process.env.GITHUB_API_TOKEN
|
||||||
|
});
|
||||||
|
return prs
|
||||||
|
.map(pr => `- ${pr.title} ([#${pr.number}](${pr.html_url}))`)
|
||||||
|
.join("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeChangelog({ version, previousVersion, releaseNotes }) {
|
||||||
|
const changelog = fs.readFileSync("CHANGELOG.md", "utf-8");
|
||||||
|
const newEntry = dedent`
|
||||||
|
# ${version}
|
||||||
|
|
||||||
|
[link](https://github.com/prettier/prettier/compare/${previousVersion}...${version})
|
||||||
|
|
||||||
|
${releaseNotes}
|
||||||
|
`;
|
||||||
|
fs.writeFileSync("CHANGELOG.md", newEntry + "\n\n" + changelog);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = async function({ version, previousVersion }) {
|
||||||
|
const semverDiff = semver.diff(version, previousVersion);
|
||||||
|
|
||||||
|
if (semverDiff !== "patch") {
|
||||||
|
const blogPost = getBlogPostInfo(version);
|
||||||
|
writeChangelog({
|
||||||
|
version,
|
||||||
|
previousVersion,
|
||||||
|
releaseNotes: `- [Release Notes](https://prettier.io/${blogPost.path})`
|
||||||
|
});
|
||||||
|
if (fs.existsSync(blogPost.file)) {
|
||||||
|
// Everything is fine, this step is finished
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.warn(
|
||||||
|
dedent(chalk`
|
||||||
|
{yellow warning} The file {bold ${
|
||||||
|
blogPost.file
|
||||||
|
}} doesn't exist, but it will be referenced in {bold CHANGELOG.md}. Make sure to create it later.
|
||||||
|
|
||||||
|
Press ENTER to continue.
|
||||||
|
`)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
if (!process.env.GITHUB_API_TOKEN) {
|
||||||
|
console.log(
|
||||||
|
chalk`{yellow warning} GitHub API access token missing. You can expose a token via {bold GITHUB_API_TOKEN} environment variable.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const releaseNotes = await logPromise(
|
||||||
|
"Fetching merged PRs",
|
||||||
|
getMergedPrs(previousVersion)
|
||||||
|
);
|
||||||
|
writeChangelog({
|
||||||
|
version,
|
||||||
|
previousVersion,
|
||||||
|
releaseNotes
|
||||||
|
});
|
||||||
|
console.log();
|
||||||
|
console.log(
|
||||||
|
dedent(chalk`
|
||||||
|
{yellow.bold A manual step is necessary.}
|
||||||
|
|
||||||
|
The script has updated the file {bold CHANGELOG.md} with all the merged PRs since the last release.
|
||||||
|
You must edit it to focus only on relevant changes and make sure they have meaningful titles.
|
||||||
|
|
||||||
|
You don't need to commit the file, the script will take care of that.
|
||||||
|
|
||||||
|
When you're finished, press ENTER to continue.
|
||||||
|
`)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
await waitForEnter();
|
||||||
|
};
|
|
@ -0,0 +1,27 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const { exec } = require("child-process-promise");
|
||||||
|
const { readFileSync, writeFileSync } = require("fs");
|
||||||
|
const { logPromise, readJson, writeJson } = require("../utils");
|
||||||
|
|
||||||
|
async function bump({ version }) {
|
||||||
|
const pkg = await readJson("package.json");
|
||||||
|
pkg.version = version;
|
||||||
|
await writeJson("package.json", pkg, { spaces: 2 });
|
||||||
|
|
||||||
|
// Update .github/ISSUE_TEMPLATE.MD
|
||||||
|
const issueFile = ".github/ISSUE_TEMPLATE.md";
|
||||||
|
const issueTempl = readFileSync(issueFile, "utf-8");
|
||||||
|
writeFileSync(
|
||||||
|
issueFile,
|
||||||
|
issueTempl.replace(/^\*\*Prettier .*?\*\*$/m, `**Prettier ${version}**`)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = async function(params) {
|
||||||
|
await logPromise("Bumping version", bump(params));
|
||||||
|
await logPromise(
|
||||||
|
"Updating integration snapshots",
|
||||||
|
exec("yarn test-integration -u")
|
||||||
|
);
|
||||||
|
};
|
|
@ -0,0 +1,14 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const chalk = require("chalk");
|
||||||
|
const semver = require("semver");
|
||||||
|
|
||||||
|
module.exports = async function({ version, previousVersion }) {
|
||||||
|
if (!semver.valid(version)) {
|
||||||
|
throw Error(`Invalid version specified`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!semver.gt(version, previousVersion)) {
|
||||||
|
throw Error(`Version ${chalk.yellow(version)} has already been published`);
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,78 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
require("readline").emitKeypressEvents(process.stdin);
|
||||||
|
|
||||||
|
const chalk = require("chalk");
|
||||||
|
const fs = require("fs");
|
||||||
|
const { spawn } = require("child-process-promise");
|
||||||
|
const stringWidth = require("string-width");
|
||||||
|
|
||||||
|
const OK = chalk.bgGreen.black(" DONE ");
|
||||||
|
const FAIL = chalk.bgRed.black(" FAIL ");
|
||||||
|
|
||||||
|
function fitTerminal(input) {
|
||||||
|
const columns = Math.min(process.stdout.columns, 80);
|
||||||
|
const WIDTH = columns - stringWidth(OK) + 1;
|
||||||
|
if (input.length < WIDTH) {
|
||||||
|
input += Array(WIDTH - input.length).join(chalk.dim("."));
|
||||||
|
}
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
function logPromise(name, promise) {
|
||||||
|
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;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function runYarn(script) {
|
||||||
|
return spawn("yarn", ["--silent", script], {
|
||||||
|
capture: ["stdout", "stderr"]
|
||||||
|
}).catch(error => {
|
||||||
|
throw Error(`\`yarn ${script}\` failed\n${error.stdout}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function waitForEnter() {
|
||||||
|
process.stdin.setRawMode(true);
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
process.stdin.on("keypress", listener);
|
||||||
|
process.stdin.resume();
|
||||||
|
|
||||||
|
function listener(ch, key) {
|
||||||
|
if (key.name === "return") {
|
||||||
|
process.stdin.setRawMode(false);
|
||||||
|
process.stdin.removeListener("keypress", listener);
|
||||||
|
process.stdin.pause();
|
||||||
|
resolve();
|
||||||
|
} else if (key.ctrl && key.name === "c") {
|
||||||
|
reject(Error("Process terminated by the user"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function readJson(filename) {
|
||||||
|
return JSON.parse(fs.readFileSync(filename, "utf-8"));
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeJson(filename, content) {
|
||||||
|
fs.writeFileSync(filename, JSON.stringify(content, null, 2) + "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
runYarn,
|
||||||
|
logPromise,
|
||||||
|
readJson,
|
||||||
|
writeJson,
|
||||||
|
waitForEnter
|
||||||
|
};
|
|
@ -0,0 +1,482 @@
|
||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@octokit/rest@^15.2.6":
|
||||||
|
version "15.8.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-15.8.1.tgz#8bcdece90026d3af5edd73bd49a8732cb3801d29"
|
||||||
|
dependencies:
|
||||||
|
before-after-hook "^1.1.0"
|
||||||
|
btoa-lite "^1.0.0"
|
||||||
|
debug "^3.1.0"
|
||||||
|
http-proxy-agent "^2.1.0"
|
||||||
|
https-proxy-agent "^2.2.0"
|
||||||
|
lodash "^4.17.4"
|
||||||
|
node-fetch "^2.1.1"
|
||||||
|
url-template "^2.0.8"
|
||||||
|
|
||||||
|
agent-base@4, agent-base@^4.1.0:
|
||||||
|
version "4.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.0.tgz#9838b5c3392b962bad031e6a4c5e1024abec45ce"
|
||||||
|
dependencies:
|
||||||
|
es6-promisify "^5.0.0"
|
||||||
|
|
||||||
|
ansi-regex@^2.0.0:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
||||||
|
|
||||||
|
ansi-regex@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
before-after-hook@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.1.0.tgz#83165e15a59460d13702cb8febd6a1807896db5a"
|
||||||
|
|
||||||
|
btoa-lite@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337"
|
||||||
|
|
||||||
|
camelcase@^4.1.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
|
||||||
|
|
||||||
|
chalk@2.4.1, chalk@^2.0.1, chalk@^2.3.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"
|
||||||
|
|
||||||
|
child-process-promise@2.2.1:
|
||||||
|
version "2.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/child-process-promise/-/child-process-promise-2.2.1.tgz#4730a11ef610fad450b8f223c79d31d7bdad8074"
|
||||||
|
dependencies:
|
||||||
|
cross-spawn "^4.0.2"
|
||||||
|
node-version "^1.0.0"
|
||||||
|
promise-polyfill "^6.0.1"
|
||||||
|
|
||||||
|
cli-cursor@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
|
||||||
|
dependencies:
|
||||||
|
restore-cursor "^2.0.0"
|
||||||
|
|
||||||
|
cli-spinners@^1.1.0:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a"
|
||||||
|
|
||||||
|
cliui@^4.0.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
|
||||||
|
dependencies:
|
||||||
|
string-width "^2.1.1"
|
||||||
|
strip-ansi "^4.0.0"
|
||||||
|
wrap-ansi "^2.0.0"
|
||||||
|
|
||||||
|
clone@^1.0.2:
|
||||||
|
version "1.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
|
||||||
|
|
||||||
|
code-point-at@^1.0.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
||||||
|
|
||||||
|
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@^4.0.2:
|
||||||
|
version "4.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
|
||||||
|
dependencies:
|
||||||
|
lru-cache "^4.0.1"
|
||||||
|
which "^1.2.9"
|
||||||
|
|
||||||
|
cross-spawn@^5.0.1:
|
||||||
|
version "5.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
|
||||||
|
dependencies:
|
||||||
|
lru-cache "^4.0.1"
|
||||||
|
shebang-command "^1.2.0"
|
||||||
|
which "^1.2.9"
|
||||||
|
|
||||||
|
debug@3.1.0, debug@^3.1.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
||||||
|
dependencies:
|
||||||
|
ms "2.0.0"
|
||||||
|
|
||||||
|
decamelize@^1.1.1:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||||
|
|
||||||
|
dedent@0.7.0:
|
||||||
|
version "0.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
|
||||||
|
|
||||||
|
defaults@^1.0.3:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
|
||||||
|
dependencies:
|
||||||
|
clone "^1.0.2"
|
||||||
|
|
||||||
|
es6-promise@^4.0.3:
|
||||||
|
version "4.2.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29"
|
||||||
|
|
||||||
|
es6-promisify@^5.0.0:
|
||||||
|
version "5.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
|
||||||
|
dependencies:
|
||||||
|
es6-promise "^4.0.3"
|
||||||
|
|
||||||
|
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.7.0:
|
||||||
|
version "0.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
|
||||||
|
dependencies:
|
||||||
|
cross-spawn "^5.0.1"
|
||||||
|
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"
|
||||||
|
|
||||||
|
find-up@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
|
||||||
|
dependencies:
|
||||||
|
locate-path "^2.0.0"
|
||||||
|
|
||||||
|
get-caller-file@^1.0.1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
http-proxy-agent@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
|
||||||
|
dependencies:
|
||||||
|
agent-base "4"
|
||||||
|
debug "3.1.0"
|
||||||
|
|
||||||
|
https-proxy-agent@^2.2.0:
|
||||||
|
version "2.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
|
||||||
|
dependencies:
|
||||||
|
agent-base "^4.1.0"
|
||||||
|
debug "^3.1.0"
|
||||||
|
|
||||||
|
invert-kv@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
|
||||||
|
|
||||||
|
is-fullwidth-code-point@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
|
||||||
|
dependencies:
|
||||||
|
number-is-nan "^1.0.0"
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
is-stream@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||||
|
|
||||||
|
isexe@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||||
|
|
||||||
|
lcid@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
|
||||||
|
dependencies:
|
||||||
|
invert-kv "^1.0.0"
|
||||||
|
|
||||||
|
locate-path@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
|
||||||
|
dependencies:
|
||||||
|
p-locate "^2.0.0"
|
||||||
|
path-exists "^3.0.0"
|
||||||
|
|
||||||
|
lodash@^4.17.4:
|
||||||
|
version "4.17.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
|
||||||
|
|
||||||
|
log-symbols@^2.2.0:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
|
||||||
|
dependencies:
|
||||||
|
chalk "^2.0.1"
|
||||||
|
|
||||||
|
lru-cache@^4.0.1:
|
||||||
|
version "4.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
|
||||||
|
dependencies:
|
||||||
|
pseudomap "^1.0.2"
|
||||||
|
yallist "^2.1.2"
|
||||||
|
|
||||||
|
mem@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
|
||||||
|
dependencies:
|
||||||
|
mimic-fn "^1.0.0"
|
||||||
|
|
||||||
|
mimic-fn@^1.0.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
|
||||||
|
|
||||||
|
minimist@1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
||||||
|
|
||||||
|
ms@2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||||
|
|
||||||
|
node-fetch@2.1.2, node-fetch@^2.1.1:
|
||||||
|
version "2.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5"
|
||||||
|
|
||||||
|
node-version@^1.0.0:
|
||||||
|
version "1.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.1.3.tgz#1081c87cce6d2dbbd61d0e51e28c287782678496"
|
||||||
|
|
||||||
|
npm-run-path@^2.0.0:
|
||||||
|
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"
|
||||||
|
|
||||||
|
number-is-nan@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||||
|
|
||||||
|
onetime@^2.0.0:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
|
||||||
|
dependencies:
|
||||||
|
mimic-fn "^1.0.0"
|
||||||
|
|
||||||
|
ora@^2.0.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ora/-/ora-2.1.0.tgz#6caf2830eb924941861ec53a173799e008b51e5b"
|
||||||
|
dependencies:
|
||||||
|
chalk "^2.3.1"
|
||||||
|
cli-cursor "^2.1.0"
|
||||||
|
cli-spinners "^1.1.0"
|
||||||
|
log-symbols "^2.2.0"
|
||||||
|
strip-ansi "^4.0.0"
|
||||||
|
wcwidth "^1.0.1"
|
||||||
|
|
||||||
|
os-locale@^2.0.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
|
||||||
|
dependencies:
|
||||||
|
execa "^0.7.0"
|
||||||
|
lcid "^1.0.0"
|
||||||
|
mem "^1.1.0"
|
||||||
|
|
||||||
|
p-finally@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
|
||||||
|
|
||||||
|
p-limit@^1.1.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
|
||||||
|
dependencies:
|
||||||
|
p-try "^1.0.0"
|
||||||
|
|
||||||
|
p-locate@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
|
||||||
|
dependencies:
|
||||||
|
p-limit "^1.1.0"
|
||||||
|
|
||||||
|
p-try@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
|
||||||
|
|
||||||
|
path-exists@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
|
||||||
|
|
||||||
|
path-key@^2.0.0:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
|
||||||
|
|
||||||
|
promise-polyfill@^6.0.1:
|
||||||
|
version "6.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057"
|
||||||
|
|
||||||
|
prs-merged-since@1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/prs-merged-since/-/prs-merged-since-1.0.1.tgz#2e9905f0843ec0189c3168a6eb31087982ac47fb"
|
||||||
|
dependencies:
|
||||||
|
"@octokit/rest" "^15.2.6"
|
||||||
|
ora "^2.0.0"
|
||||||
|
yargs "^11.0.0"
|
||||||
|
|
||||||
|
pseudomap@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
|
||||||
|
|
||||||
|
require-directory@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||||
|
|
||||||
|
require-main-filename@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
|
||||||
|
|
||||||
|
restore-cursor@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
|
||||||
|
dependencies:
|
||||||
|
onetime "^2.0.0"
|
||||||
|
signal-exit "^3.0.2"
|
||||||
|
|
||||||
|
semver@5.5.0:
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
|
||||||
|
|
||||||
|
set-blocking@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||||
|
|
||||||
|
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, signal-exit@^3.0.2:
|
||||||
|
version "3.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
||||||
|
|
||||||
|
string-width@2.1.1, string-width@^2.0.0, 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"
|
||||||
|
|
||||||
|
string-width@^1.0.1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
||||||
|
dependencies:
|
||||||
|
code-point-at "^1.0.0"
|
||||||
|
is-fullwidth-code-point "^1.0.0"
|
||||||
|
strip-ansi "^3.0.0"
|
||||||
|
|
||||||
|
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^2.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"
|
||||||
|
|
||||||
|
url-template@^2.0.8:
|
||||||
|
version "2.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21"
|
||||||
|
|
||||||
|
wcwidth@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
|
||||||
|
dependencies:
|
||||||
|
defaults "^1.0.3"
|
||||||
|
|
||||||
|
which-module@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
||||||
|
|
||||||
|
which@^1.2.9:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||||
|
dependencies:
|
||||||
|
isexe "^2.0.0"
|
||||||
|
|
||||||
|
wrap-ansi@^2.0.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
|
||||||
|
dependencies:
|
||||||
|
string-width "^1.0.1"
|
||||||
|
strip-ansi "^3.0.1"
|
||||||
|
|
||||||
|
y18n@^3.2.1:
|
||||||
|
version "3.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
|
||||||
|
|
||||||
|
yallist@^2.1.2:
|
||||||
|
version "2.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
|
||||||
|
|
||||||
|
yargs-parser@^9.0.2:
|
||||||
|
version "9.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
|
||||||
|
dependencies:
|
||||||
|
camelcase "^4.1.0"
|
||||||
|
|
||||||
|
yargs@^11.0.0:
|
||||||
|
version "11.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b"
|
||||||
|
dependencies:
|
||||||
|
cliui "^4.0.0"
|
||||||
|
decamelize "^1.1.1"
|
||||||
|
find-up "^2.1.0"
|
||||||
|
get-caller-file "^1.0.1"
|
||||||
|
os-locale "^2.0.0"
|
||||||
|
require-directory "^2.1.1"
|
||||||
|
require-main-filename "^1.0.1"
|
||||||
|
set-blocking "^2.0.0"
|
||||||
|
string-width "^2.0.0"
|
||||||
|
which-module "^2.0.0"
|
||||||
|
y18n "^3.2.1"
|
||||||
|
yargs-parser "^9.0.2"
|
Loading…
Reference in New Issue