├── .circleci
└── config.yml
├── .editorconfig
├── .gitignore
├── .yarnrc
├── LICENSE.md
├── README.md
├── bin
└── release.js
├── lib
├── bump.js
├── changelog.js
├── choices.js
├── commits.js
├── connect.js
├── definitions.js
├── group.js
├── hook.js
├── pick-commit.js
├── repo.js
├── spinner.js
└── tags.js
├── package.json
└── yarn.lock
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | jobs:
3 | build:
4 | docker:
5 | - image: circleci/node:latest
6 |
7 | working_directory: ~/repo
8 |
9 | steps:
10 | - checkout
11 |
12 | - restore_cache:
13 | keys:
14 | - v1-dependencies-{{ checksum "package.json" }}
15 | # fallback to using the latest cache if no exact match is found
16 | - v1-dependencies-
17 |
18 | - run: yarn
19 |
20 | - save_cache:
21 | paths:
22 | - node_modules
23 | key: v1-dependencies-{{ checksum "package.json" }}
24 |
25 | - run: yarn test
26 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = tab
5 | indent_size = 4
6 | tab_width = 4
7 | end_of_line = lf
8 | charset = utf-8
9 | trim_trailing_whitespace = true
10 | insert_final_newline = true
11 |
12 | [{*.json,*.json.example,*.gyp,*.yml,*.yaml}]
13 | indent_style = space
14 | indent_size = 2
15 |
16 | [{*.py,*.asm}]
17 | indent_style = space
18 |
19 | [*.py]
20 | indent_size = 4
21 |
22 | [*.asm]
23 | indent_size = 8
24 |
25 | [*.md]
26 | trim_trailing_whitespace = false
27 |
28 | # Ideal settings - some plugins might support these.
29 | [*.js]
30 | quote_type = single
31 |
32 | [{*.c,*.cc,*.h,*.hh,*.cpp,*.hpp,*.m,*.mm,*.mpp,*.js,*.java,*.go,*.rs,*.php,*.ng,*.jsx,*.ts,*.d,*.cs,*.swift}]
33 | curly_bracket_next_line = false
34 | spaces_around_operators = true
35 | spaces_around_brackets = outside
36 | # close enough to 1TB
37 | indent_brace_style = K&R
38 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # dependencies
2 | node_modules
3 | package-lock.json
4 |
5 | # logs
6 | npm-debug.log
7 |
8 | # VSCode
9 | .vscode/
10 |
--------------------------------------------------------------------------------
/.yarnrc:
--------------------------------------------------------------------------------
1 | save-prefix ""
2 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 ZEIT, Inc.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Release
6 |
7 | Release is a command line tool to automatically generate a new [GitHub Release](https://help.github.com/articles/creating-releases/) and populates it with the changes (commits) made since the last release.
8 |
9 | ## Usage
10 |
11 | Firstly, install the package from [npm](https://npmjs.com/release):
12 |
13 | ```bash
14 | npm install -g release
15 | ```
16 |
17 | Alternatively, you can use [Yarn](https://yarnpkg.com/en/) to install it:
18 |
19 | ```bash
20 | yarn global add release
21 | ```
22 |
23 | Once that's done, you can run this command inside your project's directory:
24 |
25 | ```bash
26 | release
27 | ```
28 |
29 | A `` argument can be passed. If you leave it out, a [GitHub Release](https://help.github.com/articles/creating-releases/) will be created from the most recent commit and tag.
30 |
31 | According to the [SemVer](https://semver.org) spec, the argument can have one of these values:
32 |
33 | - `major`: Incompatible API changes were introduced
34 | - `minor`: Functionality was added in a backwards-compatible manner
35 | - `patch`: Backwards-compatible bug fixes were applied
36 |
37 | In addition to those values, we also support creating pre-releases like `3.0.0-canary.1`:
38 |
39 | ```bash
40 | release pre
41 | ```
42 |
43 | You can also apply a custom suffix in place of "canary" like this:
44 |
45 | ```bash
46 | release pre
47 | ```
48 |
49 | Assuming that you provide "beta" as the `` your release will then be `3.0.0-beta.1` – and so on...
50 |
51 | ## Options
52 |
53 | The following command will show you a list of all available options:
54 |
55 | ```bash
56 | release help
57 | ```
58 |
59 | ## Pre-Defining Types
60 |
61 | If you want to automate `release` even further, specify the change type of your commits by adding it to the **title** or **description** within parenthesis:
62 |
63 | > Error logging works now (patch)
64 |
65 | Assuming that you've defined it for a certain commit, `release` won't ask you to set a type for it manually. This will make the process of creating a release even faster.
66 |
67 | To pre-define that a commit should be excluded from the list, you can use this keyword:
68 |
69 | > This is a commit message (ignore)
70 |
71 | ## Custom Hook
72 |
73 | Sometimes you might want to filter the information that gets inserted into new releases by adding an intro text, replacing certain data or just changing the order of the changes.
74 |
75 | With a custom hook, the examples above (and many more) are very easy to accomplish:
76 |
77 | By default, release will look for a file named `release.js` in the root directory of your project. This file should export a function with two parameters and always return a `String` (the final release):
78 |
79 | ```js
80 | module.exports = async (markdown, metaData) => {
81 | // Use the available data to create a custom release
82 | return markdown;
83 | };
84 | ```
85 |
86 | In the example above, `markdown` contains the release as a `String` (if you just want to replace something). In addition, `metaData` contains these properties:
87 |
88 | | Property Name | Content |
89 | | ---------------- | ----------------------------------------------------- |
90 | | `changeTypes` | The types of changes and their descriptions |
91 | | `commits` | A list of commits since the latest release |
92 | | `groupedCommits` | Similar to `commits`, but grouped by the change types |
93 | | `authors` | The GitHub usernames of the release collaborators |
94 |
95 | **Hint:** You can specify a custom location for the hook file using the `--hook` or `-H` flag, which takes in a path relative to the current working directory.
96 |
97 | ## Why?
98 |
99 | As we at [Vercel](https://github.com/vercel) moved all of our GitHub repositories from keeping a `HISTORY.md` file to using [GitHub Releases](https://help.github.com/articles/creating-releases/), we needed a way to automatically generate these releases from our own devices, rather than always having to open a page in the browser and manually add the notes for each change.
100 |
101 | ## Contributing
102 |
103 | You can find the authentication flow [here](https://github.com/vercel/release-auth).
104 |
105 | 1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device
106 | 2. Uninstall the package if it's already installed: `npm uninstall -g release`
107 | 3. Link the package to the global module directory: `npm link`
108 | 4. You can now use `release` on the command line!
109 |
110 | As always, you can use `npm test` to run the tests and see if your changes have broken anything.
111 |
112 | ## Credits
113 |
114 | Thanks a lot to [Daniel Chatfield](https://github.com/danielchatfield) for donating the "release" name on [npm](https://www.npmjs.com) and [my lovely team](https://vercel.com/about) for telling me about their needs and how I can make this package as efficient as possible.
115 |
116 | ## Author
117 |
118 | Leo Lamprecht ([@leo](https://x.com/leo))
119 |
--------------------------------------------------------------------------------
/bin/release.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | // Packages
4 | const args = require('args');
5 | const chalk = require('chalk');
6 | const semVer = require('semver');
7 | const inquirer = require('inquirer');
8 | const open = require('opn');
9 | const checkForUpdate = require('update-check');
10 | const {red} = require('chalk');
11 | const nodeVersion = require('node-version');
12 | const sleep = require('delay');
13 |
14 | // Utilities
15 | const groupChanges = require('../lib/group');
16 | const {branchSynced, getRepo} = require('../lib/repo');
17 | const getCommits = require('../lib/commits');
18 | const getChoices = require('../lib/choices');
19 | const getTags = require('../lib/tags');
20 | const definitions = require('../lib/definitions');
21 | const connect = require('../lib/connect');
22 | const createChangelog = require('../lib/changelog');
23 | const {fail, create: createSpinner} = require('../lib/spinner');
24 | const bumpVersion = require('../lib/bump');
25 | const pkg = require('../package');
26 | const applyHook = require('../lib/hook');
27 |
28 | // Throw an error if node version is too low
29 | if (nodeVersion.major < 6) {
30 | console.error(
31 | `${red('Error!')} Now requires at least version 6 of Node. Please upgrade!`
32 | );
33 | process.exit(1);
34 | }
35 |
36 | args.option('pre', 'Mark the release as prerelease')
37 | .option('overwrite', 'If the release already exists, replace it')
38 | .option('publish', 'Instead of creating a draft, publish the release')
39 | .option(['H', 'hook'], 'Specify a custom file to pipe releases through')
40 | .option(['t', 'previous-tag'], 'Specify previous release', '')
41 | .option(['u', 'show-url'], 'Show the release URL instead of opening it in the browser')
42 | .option(['s', 'skip-questions'], 'Skip the questions and create a simple list without the headings');
43 |
44 | const flags = args.parse(process.argv);
45 |
46 | // When running `release pre`, the release
47 | // should automatically be marked as a pre-release
48 | if (args.sub[0] === 'pre') {
49 | flags.pre = true;
50 | }
51 |
52 | let githubConnection;
53 | let repoDetails;
54 |
55 | const changeTypes = [
56 | {
57 | handle: 'major',
58 | name: 'Major Change',
59 | pluralName: 'Major Changes',
60 | description: 'incompatible API change'
61 | },
62 | {
63 | handle: 'minor',
64 | name: 'Minor Change',
65 | pluralName: 'Minor Changes',
66 | description: 'backwards-compatible functionality'
67 | },
68 | {
69 | handle: 'patch',
70 | name: 'Patch',
71 | pluralName: 'Patches',
72 | description: 'backwards-compatible bug fix'
73 | }
74 | ];
75 |
76 | const getReleaseURL = (release, edit = false) => {
77 | if (!release || !release.html_url) {
78 | return false;
79 | }
80 |
81 | const htmlURL = release.html_url;
82 | return edit ? htmlURL.replace('/tag/', '/edit/') : htmlURL;
83 | };
84 |
85 | const createRelease = async (tag, changelog, exists) => {
86 | const isPre = flags.pre ? 'pre' : '';
87 | createSpinner(`Uploading ${isPre}release`);
88 |
89 | const methodPrefix = exists ? 'edit' : 'create';
90 | const method = `${methodPrefix}Release`;
91 | const {pre, publish, showUrl} = flags;
92 |
93 |
94 | const body = {
95 | owner: repoDetails.user,
96 | repo: repoDetails.repo,
97 | /* eslint-disable camelcase */
98 | tag_name: tag.tag,
99 | target_commitish: tag.hash,
100 | /* eslint-enable camelcase */
101 | body: changelog,
102 | draft: !publish,
103 | prerelease: pre
104 | };
105 |
106 | if (exists) {
107 | body.id = exists;
108 | }
109 |
110 | let response;
111 |
112 | try {
113 | response = await githubConnection.repos[method](body);
114 | } catch (err) {
115 | response = {};
116 | }
117 |
118 | if (!response.data) {
119 | console.log('\n');
120 | fail('Failed to upload release.');
121 | }
122 |
123 | global.spinner.succeed();
124 | const releaseURL = getReleaseURL(response.data, !publish);
125 |
126 | // Wait for the GitHub UI to render the release
127 | await sleep(500);
128 |
129 | if (!showUrl) {
130 | try {
131 | open(releaseURL, {wait: false});
132 | console.log(`\n${chalk.bold('Done!')} Opened release in browser...`);
133 |
134 | return;
135 | // eslint-disable-next-line no-empty
136 | } catch (err) {}
137 | }
138 |
139 | console.log(`\n${chalk.bold('Done!')} ${releaseURL}`);
140 | };
141 |
142 | const orderCommits = async (commits, tags, exists) => {
143 | const questions = [];
144 | const predefined = {};
145 |
146 | const choices = getChoices(changeTypes, tags);
147 |
148 | // Show the latest changes first
149 | commits.all.reverse();
150 |
151 | for (const commit of commits.all) {
152 | const defTitle = definitions.type(commit.title, changeTypes);
153 | const defDescription = definitions.type(commit.description, changeTypes);
154 |
155 | const definition = defTitle || defDescription;
156 |
157 | // Firstly try to use the commit title
158 | let message = commit.title;
159 |
160 | // If it wasn't set, try the description
161 | if (message.length === 0) {
162 | const lines = commit.description.split('\n');
163 |
164 | for (let line of lines) {
165 | if (!line) {
166 | continue;
167 | }
168 |
169 | line = line.replace('* ', '');
170 |
171 | if (line.length === 0) {
172 | continue;
173 | }
174 |
175 | const questionExists = questions.find(question => question.message === line);
176 |
177 | if (questionExists) {
178 | continue;
179 | }
180 |
181 | if (line.length > 1) {
182 | message = line;
183 | break;
184 | }
185 | }
186 | }
187 |
188 | // If for some reason the message is still not defined,
189 | // don't include it in the list
190 | if (message.length === 0) {
191 | continue;
192 | }
193 |
194 | // If a type preset was found, don't include it
195 | // in the list either
196 | if (definition) {
197 | predefined[commit.hash] = {
198 | type: definition,
199 | message
200 | };
201 |
202 | continue;
203 | }
204 |
205 | // If we are skipping the questions, don't let them be included
206 | // in the list
207 | if (flags.skipQuestions) {
208 | predefined[commit.hash] = {
209 | // The type doesn't matter since it is not included in the
210 | // final changelog
211 | type: 'patch',
212 | message
213 | };
214 |
215 | continue;
216 | }
217 |
218 | questions.push({
219 | name: commit.hash,
220 | message,
221 | type: 'list',
222 | choices
223 | });
224 | }
225 |
226 | global.spinner.succeed();
227 |
228 | // Prevents the spinner from getting succeeded
229 | // again once new spinner gets created
230 | global.spinner = false;
231 |
232 | // By default, nothing is there yet
233 | let answers = {};
234 |
235 | if (choices && questions.length > 0) {
236 | console.log(
237 | `${chalk.green('!')} Please enter the type of change for each commit:\n`
238 | );
239 |
240 | answers = await inquirer.prompt(questions);
241 |
242 | for (const answer in answers) {
243 | if (!{}.hasOwnProperty.call(answers, answer)) {
244 | continue;
245 | }
246 |
247 | const type = answers[answer];
248 | const {message} = questions.find(question => question.name === answer);
249 |
250 | answers[answer] = {
251 | type,
252 | message
253 | };
254 | }
255 |
256 | // Update the spinner status
257 | if (choices) {
258 | console.log('');
259 | }
260 | }
261 |
262 | createSpinner('Generating the changelog');
263 |
264 | const results = Object.assign({}, predefined, answers);
265 | const grouped = groupChanges(results, changeTypes);
266 | const changes = await createChangelog(grouped, commits, changeTypes, flags.skipQuestions, flags.hook, flags.showUrl);
267 |
268 | let {credits, changelog} = changes;
269 |
270 | if (!changelog) {
271 | changelog = 'Initial release';
272 | }
273 |
274 | // Apply the `release.js` file or the one that
275 | // was specified using the `--hook` flag
276 | const filtered = await applyHook(flags.hook, changelog, {
277 | githubConnection,
278 | repoDetails,
279 | changeTypes,
280 | commits,
281 | groupedCommits: grouped,
282 | authors: credits
283 | });
284 |
285 | // Upload changelog to GitHub Releases
286 | createRelease(tags[0], filtered, exists);
287 | };
288 |
289 | const collectChanges = async (tags, exists = false) => {
290 | createSpinner('Loading commit history');
291 | let commits;
292 |
293 | try {
294 | commits = await getCommits(tags);
295 | } catch (err) {
296 | fail(err.message);
297 | }
298 |
299 | for (const commit of commits.all) {
300 | if (semVer.valid(commit.title)) {
301 | const index = commits.all.indexOf(commit);
302 | commits.all.splice(index, 1);
303 | }
304 | }
305 |
306 | if (commits.length < 1) {
307 | fail('No changes happened since the last release.');
308 | }
309 |
310 | orderCommits(commits, tags, exists);
311 | };
312 |
313 | const checkReleaseStatus = async () => {
314 | let tags;
315 |
316 | try {
317 | const unordered = await getTags({
318 | previousTag: flags.previousTag
319 | });
320 | tags = unordered.sort((a, b) => new Date(b.date) - new Date(a.date));
321 | } catch (err) {
322 | fail('Directory is not a Git repository.');
323 | }
324 |
325 | if (tags.length < 1) {
326 | fail('No tags available for release.');
327 | }
328 |
329 | const synced = await branchSynced();
330 |
331 | if (!synced) {
332 | fail('Your branch needs to be up-to-date with origin.');
333 | }
334 |
335 | githubConnection = await connect(flags.showUrl);
336 | repoDetails = await getRepo(githubConnection);
337 |
338 | createSpinner('Checking if release already exists');
339 |
340 | let response;
341 |
342 | try {
343 | response = await githubConnection.repos.getReleases({
344 | owner: repoDetails.user,
345 | repo: repoDetails.repo
346 | });
347 | } catch (err) {
348 | console.error(err);
349 | }
350 |
351 | if (!response) {
352 | fail("Couldn't check if release exists.");
353 | }
354 |
355 | if (!response.data || response.data.length < 1) {
356 | collectChanges(tags);
357 | return;
358 | }
359 |
360 | let existingRelease = null;
361 |
362 | for (const release of response.data) {
363 | if (release.tag_name === tags[0].tag) {
364 | existingRelease = release;
365 | break;
366 | }
367 | }
368 |
369 | if (!existingRelease) {
370 | collectChanges(tags);
371 | return;
372 | }
373 |
374 | if (flags.overwrite) {
375 | global.spinner.text = 'Overwriting release, because it already exists';
376 | collectChanges(tags, existingRelease.id);
377 |
378 | return;
379 | }
380 |
381 | global.spinner.succeed();
382 | console.log('');
383 |
384 | const releaseURL = getReleaseURL(existingRelease);
385 | const prefix = `${chalk.red('Error!')} Release already exists`;
386 |
387 | if (!flags.showUrl) {
388 | try {
389 | open(releaseURL, {wait: false});
390 | console.error(`${prefix}. Opened in browser...`);
391 |
392 | return;
393 | // eslint-disable-next-line no-empty
394 | } catch (err) {}
395 | }
396 |
397 | console.error(`${prefix}: ${releaseURL}`);
398 | process.exit(1);
399 | };
400 |
401 | const main = async () => {
402 | const update = await checkForUpdate(pkg);
403 |
404 | if (update) {
405 | console.log(
406 | `${chalk.bgRed(
407 | 'UPDATE AVAILABLE'
408 | )} The latest version of \`release\` is ${update.latest}`
409 | );
410 | }
411 |
412 | const bumpType = args.sub;
413 | const argAmount = bumpType.length;
414 |
415 | if (argAmount === 1 || (bumpType[0] === 'pre' && argAmount === 2)) {
416 | const allowedTypes = ['pre'];
417 |
418 | for (const type of changeTypes) {
419 | allowedTypes.push(type.handle);
420 | }
421 |
422 | const allowed = allowedTypes.includes(bumpType[0]);
423 | const type = bumpType[0];
424 |
425 | if (!allowed) {
426 | fail(
427 | 'Version type not SemVer-compatible ' +
428 | '("major", "minor", "patch" or "pre")'
429 | );
430 | }
431 |
432 | await bumpVersion(type, bumpType[1]);
433 | }
434 |
435 | checkReleaseStatus();
436 | };
437 |
438 | // Let the firework start
439 | main();
440 |
--------------------------------------------------------------------------------
/lib/bump.js:
--------------------------------------------------------------------------------
1 | // Native
2 | const path = require('path');
3 | const {promisify} = require('util');
4 | const {exec} = require('child_process');
5 |
6 | // Packages
7 | const fs = require('fs-extra');
8 | const semver = require('semver');
9 | const {bold} = require('chalk');
10 |
11 | // Utilities
12 | const {fail, create: createSpinner} = require('./spinner');
13 |
14 | const increment = async (type, preSuffix) => {
15 | const pkgPath = path.join(process.cwd(), 'package.json');
16 |
17 | if (!fs.existsSync(pkgPath)) {
18 | throw new Error(`The "package.json" file doesn't exist`);
19 | }
20 |
21 | let pkgContent;
22 |
23 | try {
24 | pkgContent = await fs.readJSON(pkgPath);
25 | } catch (err) {
26 | throw new Error(`Couldn't parse "package.json"`);
27 | }
28 |
29 | if (!pkgContent.version) {
30 | throw new Error(`No "version" field inside "package.json"`);
31 | }
32 |
33 | const {version: oldVersion} = pkgContent;
34 | const isPre = semver.prerelease(oldVersion);
35 | const shouldBePre = type === 'pre';
36 |
37 | if (!isPre && shouldBePre && !preSuffix) {
38 | preSuffix = 'canary';
39 | }
40 |
41 | let newVersion;
42 |
43 | if (shouldBePre && preSuffix) {
44 | newVersion = semver.inc(oldVersion, type, preSuffix);
45 | } else {
46 | newVersion = semver.inc(oldVersion, type);
47 | }
48 |
49 | pkgContent.version = newVersion;
50 |
51 | try {
52 | await fs.writeJSON(pkgPath, pkgContent, {
53 | spaces: 2
54 | });
55 | } catch (err) {
56 | throw new Error(`Couldn't write to "package.json"`);
57 | }
58 |
59 | const lockfilePath = path.join(process.cwd(), 'package-lock.json');
60 |
61 | if (!fs.existsSync(lockfilePath)) {
62 | return newVersion;
63 | }
64 |
65 | let lockfileContent;
66 |
67 | try {
68 | lockfileContent = await fs.readJSON(lockfilePath);
69 | } catch (err) {
70 | throw new Error(`Couldn't parse "package-lock.json"`);
71 | }
72 |
73 | lockfileContent.version = newVersion;
74 |
75 | try {
76 | await fs.writeJSON(lockfilePath, lockfileContent, {
77 | spaces: 2
78 | });
79 | } catch (err) {
80 | throw new Error(`Couldn't write to "package-lock.json"`);
81 | }
82 |
83 | return newVersion;
84 | };
85 |
86 | const runGitCommand = async command => {
87 | try {
88 | await promisify(exec)(command);
89 | } catch (err) {
90 | if (err.message.includes('Not a git repository')) {
91 | throw new Error('Directory is not a Git repository');
92 | }
93 |
94 | throw err;
95 | }
96 | };
97 |
98 | module.exports = async (type, preSuffix) => {
99 | createSpinner('Bumping version tag');
100 | let version;
101 |
102 | try {
103 | version = await increment(type, preSuffix);
104 | } catch (err) {
105 | fail(err.message);
106 | }
107 |
108 | global.spinner.text = `Bumped version tag to ${bold(version)}`;
109 | createSpinner('Creating release commit');
110 |
111 | try {
112 | await runGitCommand(`git add -A && git commit -a -m "${version}"`);
113 | } catch (err) {
114 | fail(err.message);
115 | }
116 |
117 | global.spinner.text = `Created release commit`;
118 | createSpinner('Tagging commit');
119 |
120 | try {
121 | await runGitCommand(`git tag ${version}`);
122 | } catch (err) {
123 | fail(err.message);
124 | }
125 |
126 | global.spinner.text = `Tagged commit`;
127 | createSpinner('Pushing everything to remote');
128 |
129 | try {
130 | await runGitCommand(`git push && git push --tags`);
131 | } catch (err) {
132 | fail(err.message);
133 | }
134 |
135 | global.spinner.succeed(`Pushed everything to remote`);
136 | global.spinner = null;
137 | };
138 |
--------------------------------------------------------------------------------
/lib/changelog.js:
--------------------------------------------------------------------------------
1 | // Packages
2 | const getUsername = require('github-username');
3 |
4 | // Utilities
5 | const pickCommit = require('./pick-commit');
6 |
7 | const getAuthor = async ({author}) => {
8 | let username;
9 |
10 | try {
11 | username = await getUsername(author);
12 | } catch (err) {
13 | return false;
14 | }
15 |
16 | return username;
17 | };
18 |
19 | const getChangesListText = async (changes, commits, changeTypes, filteringWithHook, showURL, credits) => {
20 | // This is the bullet list with each change of the type
21 | let text = '';
22 |
23 | // Find last change, in order to be able
24 | // to add a newline after it
25 | const lastChange = changes[changes.length - 1];
26 |
27 | for (const change of changes) {
28 | const changeDetails = await pickCommit(
29 | change,
30 | commits.all,
31 | changeTypes,
32 | // Do not escape HTML from commit title
33 | // if a custom hook is being used
34 | !filteringWithHook,
35 | showURL
36 | );
37 |
38 | if (changeDetails.text) {
39 | text += changeDetails.text;
40 | }
41 |
42 | if (changeDetails.credits && changeDetails.credits.length > 0) {
43 | changeDetails.credits.forEach(item => {
44 | // Don't add bots to the credits
45 | if (item.includes('[bot]')) {
46 | return;
47 | }
48 |
49 | credits.add(item);
50 | });
51 | }
52 |
53 | if (change === lastChange) {
54 | text += '\n';
55 | }
56 | }
57 |
58 | return text;
59 | };
60 |
61 | module.exports = async (types, commits, changeTypes, skippedQuestions, filteringWithHook, showURL) => {
62 | let text = '';
63 | const credits = new Set();
64 |
65 | for (const type in types) {
66 | if (!{}.hasOwnProperty.call(types, type)) {
67 | continue;
68 | }
69 |
70 | const changes = types[type];
71 |
72 | if (changes.length < 1) {
73 | continue;
74 | }
75 |
76 | const changesListText = await getChangesListText(changes, commits, changeTypes, filteringWithHook, showURL, credits);
77 |
78 | // If the user skipped the questions, we will render only the changes list without
79 | // the heading
80 | if (skippedQuestions) {
81 | text += changesListText;
82 | continue;
83 | }
84 |
85 | const typeInfo = changeTypes.filter(item => item.handle === type)[0];
86 |
87 | // Add heading
88 | text += `### ${typeInfo.pluralName} \n\n`;
89 | // Add the changes list
90 | text += changesListText;
91 | }
92 |
93 | const username = await getAuthor(commits.latest);
94 |
95 | // Don't include the release author in the credits
96 | if (username && credits.has(username)) {
97 | credits.delete(username);
98 | }
99 |
100 | if (credits.size > 0) {
101 | text += '### Credits \n\n';
102 | text += 'Huge thanks to ';
103 |
104 | // GitHub links usernames if prefixed with @
105 | let index = 1;
106 | credits.forEach(credit => {
107 | text += `@${credit}`;
108 |
109 | const penultimate = index === credits.size - 1;
110 | const notLast = index !== credits.size;
111 |
112 | if (penultimate) {
113 | // Oxford comma is applied when list is bigger than 2 names
114 | if (credits.size > 2) {
115 | text += ',';
116 | }
117 |
118 | text += ' and ';
119 | } else if (notLast) {
120 | text += ', ';
121 | }
122 |
123 | index += 1;
124 | });
125 |
126 | text += ' for helping!';
127 | text += '\n';
128 | }
129 |
130 | // Remove newlines from the end
131 | return {
132 | changelog: text.trimRight() || null,
133 | credits
134 | };
135 | };
136 |
--------------------------------------------------------------------------------
/lib/choices.js:
--------------------------------------------------------------------------------
1 | // Packages
2 | const inquirer = require('inquirer');
3 | const semVer = require('semver');
4 |
5 | module.exports = (changeTypes, tags) => {
6 | const list = [];
7 | let notNeeded;
8 |
9 | // We just detected the first release
10 | if (tags.length < 2) {
11 | return null;
12 | }
13 |
14 | const releaseType = semVer.diff(tags[1].version, tags[0].version);
15 |
16 | switch (releaseType) {
17 | case 'minor':
18 | notNeeded = 1;
19 | break;
20 | case 'patch':
21 | notNeeded = 2;
22 | break;
23 | default:
24 | notNeeded = 0;
25 | }
26 |
27 | if (notNeeded) {
28 | changeTypes.splice(0, notNeeded);
29 | }
30 |
31 | for (const type of changeTypes) {
32 | const short = type.handle;
33 |
34 | list.push({
35 | 'name': `${type.name} (${type.description})`,
36 | 'value': short,
37 | 'short': `(${short})`
38 | });
39 | }
40 |
41 | return list.concat([
42 | new inquirer.Separator(),
43 | {
44 | 'name': 'Ignore',
45 | 'short': '(ignored)',
46 | 'value': 'ignore'
47 | }
48 | ]);
49 | };
50 |
--------------------------------------------------------------------------------
/lib/commits.js:
--------------------------------------------------------------------------------
1 | // Native
2 | const path = require('path');
3 |
4 | // Packages
5 | const gitStream = require('git-spawned-stream');
6 |
7 | // Utilities
8 | const handleSpinner = require('./spinner');
9 |
10 | const loadCommits = (repoPath, rev) => {
11 | const inner = Date.now();
12 | const outer = inner - 1;
13 |
14 | // How the output shoud look like
15 | const spec = ['s', 'n', 'ae', 'b'];
16 | const format = `${inner}%${spec.join(`${inner}%`)}${outer}`;
17 |
18 | return new Promise(resolve => {
19 | const stream = gitStream(repoPath, [
20 | 'rev-list',
21 | `--pretty=format:${format}`,
22 | '--header',
23 | rev || 'HEAD'
24 | ]);
25 |
26 | let commits = [];
27 |
28 | stream.on('data', data => {
29 | const parts = data
30 | .toString('utf8')
31 | .split(outer)
32 | .map(item => {
33 | const trimmed = item.trim();
34 |
35 | if (trimmed.length === 0) {
36 | return null;
37 | }
38 |
39 | const splitted = trimmed.split(inner);
40 | const details = splitted.map(i => i.trim()).filter(i => i);
41 |
42 | return {
43 | hash: details[0].split(' ')[1],
44 | title: details[1] || '',
45 | description: details[3] || '',
46 | author: details[2]
47 | };
48 | })
49 | .filter(i => i);
50 |
51 | commits = commits.concat(parts);
52 | });
53 |
54 | stream.on('error', () => {
55 | handleSpinner.fail('Not able to collect commits.');
56 | });
57 |
58 | stream.on('end', () => resolve(commits));
59 | });
60 | };
61 |
62 | module.exports = async tags => {
63 | const [release, parent] = tags;
64 | let loadAll = false;
65 |
66 | if (!release || !parent || !parent.hash || !release.hash) {
67 | loadAll = true;
68 | }
69 |
70 | const rev = loadAll ? false : `${parent.hash}..${release.hash}`;
71 | const repoPath = path.join(process.cwd(), '.git');
72 |
73 | // Load the commits using `git rev-list`
74 | const all = await loadCommits(repoPath, rev);
75 |
76 | // Find the latest commit, as it's the release reference
77 | const latest = all.find(commit => commit.hash === release.hash);
78 | const latestIndex = all.indexOf(latest);
79 |
80 | // Remove the latest commit from the collection
81 | all.splice(latestIndex, 1);
82 |
83 | // Hand back the commits
84 | return {all, latest};
85 | };
86 |
--------------------------------------------------------------------------------
/lib/connect.js:
--------------------------------------------------------------------------------
1 | // Native
2 | const queryString = require('querystring');
3 |
4 | // Packages
5 | const fetch = require('node-fetch');
6 | const open = require('opn');
7 | const randomString = require('random-string');
8 | const retry = require('async-retry');
9 | const Storage = require('configstore');
10 | const GitHubAPI = require('@octokit/rest');
11 | const sleep = require('delay');
12 |
13 | // Utilities
14 | const pkg = require('../package');
15 | const handleSpinner = require('./spinner');
16 |
17 | // Initialize token storage
18 | const config = new Storage(pkg.name);
19 |
20 | const github = new GitHubAPI({
21 | headers: {
22 | 'user-agent': `Release v${pkg.version}`
23 | }
24 | });
25 |
26 | const tokenAPI = state =>
27 | retry(
28 | () =>
29 | new Promise(async (resolve, reject) => {
30 | const qs = queryString.stringify({state});
31 | try {
32 | const res = await fetch(`https://release-auth.vercel.sh/?${qs}`);
33 | if (res.status === 403) {
34 | reject(new Error('Unauthorized'));
35 | }
36 | const data = await res.json();
37 | if (data.error) {
38 | reject(res.error);
39 | }
40 | resolve(data.token);
41 | } catch (error) {
42 | reject(error);
43 | }
44 | }),
45 | {
46 | retries: 500
47 | }
48 | );
49 |
50 | const validateToken = token =>
51 | new Promise(resolve => {
52 | github.authenticate({
53 | type: 'token',
54 | token
55 | });
56 |
57 | // See if the token works by getting
58 | // the data for our company's account
59 | github.users.getForUser(
60 | {
61 | username: 'zeit'
62 | },
63 | err => {
64 | if (err) {
65 | resolve(false);
66 | return;
67 | }
68 |
69 | resolve(true);
70 | }
71 | );
72 | });
73 |
74 | const loadToken = async () => {
75 | if (config.has('token')) {
76 | const fromStore = config.get('token');
77 | const valid = await validateToken(fromStore);
78 |
79 | return valid ? fromStore : false;
80 | }
81 |
82 | return false;
83 | };
84 |
85 | const requestToken = async showURL => {
86 | let authURL = 'https://github.com/login/oauth/authorize';
87 |
88 | const state = randomString({
89 | length: 20
90 | });
91 |
92 | const params = {
93 | // eslint-disable-next-line camelcase
94 | client_id: '08bd4d4e3725ce1c0465',
95 | scope: 'repo',
96 | state
97 | };
98 |
99 | authURL += `?${queryString.stringify(params)}`;
100 |
101 | try {
102 | if (showURL) {
103 | throw new Error('No browser support');
104 | }
105 |
106 | open(authURL, {wait: false});
107 | } catch (err) {
108 | global.spinner.stop();
109 | console.log(`Please click this link to authenticate: ${authURL}`);
110 | }
111 |
112 | const token = await tokenAPI(state);
113 | config.set('token', token);
114 |
115 | return token;
116 | };
117 |
118 | module.exports = async showURL => {
119 | let token = await loadToken();
120 |
121 | if (!token) {
122 | handleSpinner.create(showURL ? 'Retrieving authentication link' : 'Opening GitHub authentication page');
123 | await sleep(100);
124 |
125 | try {
126 | token = await requestToken(showURL);
127 | } catch (err) {
128 | handleSpinner.fail('Could not load token.');
129 | }
130 | }
131 |
132 | github.authenticate({
133 | type: 'token',
134 | token
135 | });
136 |
137 | return github;
138 | };
139 |
--------------------------------------------------------------------------------
/lib/definitions.js:
--------------------------------------------------------------------------------
1 | exports.type = (text, changeTypes) => {
2 | const list = [
3 | ...changeTypes,
4 | {
5 | handle: 'ignore'
6 | }
7 | ];
8 |
9 | for (const type of list) {
10 | const handle = `(${type.handle})`;
11 |
12 | if (text.includes(handle)) {
13 | return type.handle;
14 | }
15 | }
16 |
17 | return false;
18 | };
19 |
20 | exports.reference = title => {
21 | const match = / \(#[-0-9]+\)/.exec(title);
22 |
23 | if (!match) {
24 | return false;
25 | }
26 |
27 | return match[0].replace(' (', '').replace(')', '');
28 | };
29 |
--------------------------------------------------------------------------------
/lib/group.js:
--------------------------------------------------------------------------------
1 | module.exports = (changes, changeTypes) => {
2 | const types = {};
3 |
4 | for (const type of changeTypes) {
5 | types[type.handle] = [];
6 | }
7 |
8 | for (const change in changes) {
9 | if (!{}.hasOwnProperty.call(changes, change)) {
10 | continue;
11 | }
12 |
13 | const {type, message} = changes[change];
14 |
15 | if (type === 'ignore') {
16 | continue;
17 | }
18 |
19 | types[type].push({
20 | hash: change,
21 | message
22 | });
23 | }
24 |
25 | return types;
26 | };
27 |
--------------------------------------------------------------------------------
/lib/hook.js:
--------------------------------------------------------------------------------
1 | // Native
2 | const {existsSync} = require('fs');
3 | const {resolve} = require('path');
4 |
5 | // Utilities
6 | const handleSpinner = require('../lib/spinner');
7 |
8 | module.exports = async (flag, markdown, changes) => {
9 | let file = resolve(process.cwd(), 'release.js');
10 |
11 | if (!flag && !existsSync(file)) {
12 | return markdown;
13 | }
14 |
15 | if (flag) {
16 | file = resolve(process.cwd(), flag);
17 |
18 | if (!existsSync(file)) {
19 | handleSpinner.fail(`The specified ${'--hook'} file doesn't exist`);
20 | }
21 | }
22 |
23 | let hook;
24 |
25 | try {
26 | hook = require(file);
27 | } catch (err) {
28 | handleSpinner.fail(err);
29 | }
30 |
31 | if (typeof hook !== 'function') {
32 | handleSpinner.fail(`The release hook file doesn't export a function`);
33 | }
34 |
35 | if (global.spinner) {
36 | global.spinner.succeed('Found a hook file');
37 | }
38 |
39 | let filtered;
40 |
41 | try {
42 | filtered = await hook(markdown, changes);
43 | } catch (err) {
44 | handleSpinner.fail(err);
45 | }
46 |
47 | return filtered;
48 | };
49 |
--------------------------------------------------------------------------------
/lib/pick-commit.js:
--------------------------------------------------------------------------------
1 | // Packages
2 | const capitalize = require('capitalize');
3 | const escapeGoat = require('escape-goat');
4 |
5 | // Utilities
6 | const connect = require('./connect');
7 | const repo = require('./repo');
8 | const definitions = require('./definitions');
9 |
10 | const getPullRequest = async (number, showURL) => {
11 | const github = await connect(showURL);
12 | const repoDetails = await repo.getRepo(github);
13 |
14 | const response = await github.pullRequests.get({
15 | owner: repoDetails.user,
16 | repo: repoDetails.repo,
17 | number
18 | });
19 |
20 | return response.data;
21 | };
22 |
23 | const forPullRequest = async (number, showURL) => {
24 | let data;
25 |
26 | try {
27 | data = await getPullRequest(number, showURL);
28 | } catch (err) {
29 | return;
30 | }
31 |
32 | if (data.user) {
33 | return [data.user.login];
34 | }
35 |
36 | return false;
37 | };
38 |
39 | const cleanCommitTitle = (title, changeTypes, doEscapeHTML) => {
40 | const toReplace = {
41 | type: definitions.type(title, changeTypes),
42 | ref: definitions.reference(title)
43 | };
44 |
45 | for (const definition in toReplace) {
46 | if (!{}.hasOwnProperty.call(toReplace, definition)) {
47 | continue;
48 | }
49 |
50 | const state = toReplace[definition];
51 |
52 | if (state) {
53 | title = title.replace(`(${state})`, '');
54 | }
55 | }
56 |
57 | if (doEscapeHTML) {
58 | title = escapeGoat.escape(title);
59 | }
60 |
61 | return {
62 | content: capitalize(title).trim(),
63 | ref: toReplace.ref
64 | };
65 | };
66 |
67 | module.exports = async ({hash, message}, all, changeTypes, doEscapeHTML, showURL) => {
68 | const title = cleanCommitTitle(message, changeTypes, doEscapeHTML);
69 | let credits = [];
70 |
71 | if (title.ref) {
72 | hash = title.ref;
73 |
74 | const rawHash = hash.split('#')[1];
75 |
76 | // Retrieve users that have collaborated on a change
77 | const collaborators = await forPullRequest(rawHash, showURL);
78 |
79 | if (collaborators) {
80 | credits = credits.concat(collaborators);
81 | }
82 | }
83 |
84 | return {
85 | text: `- ${title.content}: ${hash}\n`,
86 | credits
87 | };
88 | };
89 |
--------------------------------------------------------------------------------
/lib/repo.js:
--------------------------------------------------------------------------------
1 | // Packages
2 | const git = require('git-state');
3 | const repoName = require('git-repo-name');
4 | const repoUser = require('git-username');
5 |
6 | // Utilities
7 | const handleSpinner = require('./spinner');
8 |
9 | exports.getRepo = githubConnection =>
10 | new Promise(resolve => {
11 | repoName((err, repo) => {
12 | if (err) {
13 | handleSpinner.fail('Could not determine GitHub repository.');
14 | return;
15 | }
16 |
17 | const details = {repo};
18 |
19 | githubConnection.repos.get(
20 | {owner: repoUser(), repo: details.repo},
21 | (error, detailedRepo) => {
22 | if (error) {
23 | handleSpinner.fail('Could not determine GitHub repository.');
24 | return;
25 | }
26 |
27 | details.user = detailedRepo.data.owner.login;
28 | resolve(details);
29 | }
30 | );
31 | });
32 | });
33 |
34 | exports.branchSynced = () =>
35 | new Promise(resolve => {
36 | const path = process.cwd();
37 |
38 | const ignore = ['branch', 'stashes', 'untracked'];
39 |
40 | git.isGit(path, exists => {
41 | if (!exists) {
42 | return;
43 | }
44 |
45 | git.check(path, (err, results) => {
46 | if (err) {
47 | resolve(false);
48 | return;
49 | }
50 |
51 | for (const state of ignore) {
52 | delete results[state];
53 | }
54 |
55 | for (const result in results) {
56 | if (results[result] > 0) {
57 | resolve(false);
58 | break;
59 | }
60 | }
61 |
62 | resolve(true);
63 | });
64 | });
65 | });
66 |
--------------------------------------------------------------------------------
/lib/spinner.js:
--------------------------------------------------------------------------------
1 | // Packages
2 | const ora = require('ora');
3 | const {red} = require('chalk');
4 |
5 | exports.create = message => {
6 | if (global.spinner) {
7 | global.spinner.succeed();
8 | }
9 |
10 | global.spinner = ora(message).start();
11 | };
12 |
13 | exports.fail = message => {
14 | if (global.spinner) {
15 | global.spinner.fail();
16 | console.log('');
17 | }
18 |
19 | console.error(`${red('Error!')} ${message}`);
20 | process.exit(1);
21 | };
22 |
--------------------------------------------------------------------------------
/lib/tags.js:
--------------------------------------------------------------------------------
1 | // Packages
2 | const semVer = require('semver');
3 | const taggedVersions = require('tagged-versions');
4 |
5 | const defaultRev = 'HEAD --first-parent `git rev-parse --abbrev-ref HEAD`';
6 |
7 | const defaultOptions = {
8 | rev: defaultRev,
9 | previousTag: ''
10 | };
11 |
12 | module.exports = async (options = {}) => {
13 | const {rev, previousTag} = {...defaultOptions, ...options};
14 |
15 | const [tags, latest] = await Promise.all([
16 | taggedVersions.getList({rev}),
17 | taggedVersions.getLastVersion({rev})
18 | ]);
19 |
20 | if (!latest) {
21 | return [];
22 | }
23 |
24 | const isPreviousTag =
25 | previousTag && previousTag.length > 0
26 | ? commitVersion => commitVersion === previousTag
27 | : semVer.lt;
28 |
29 | for (const commit of tags) {
30 | if (isPreviousTag(commit.version, latest.version)) {
31 | return [latest, commit];
32 | }
33 | }
34 |
35 | return [latest];
36 | };
37 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "release",
3 | "version": "6.3.1",
4 | "description": "Generate changelogs with a single command",
5 | "scripts": {
6 | "test": "yarn lint",
7 | "lint": "zeit-eslint --ext .jsx,.js .",
8 | "lint-staged": "git diff --diff-filter=ACMRT --cached --name-only '*.js' '*.jsx' | xargs zeit-eslint"
9 | },
10 | "files": [
11 | "bin",
12 | "lib"
13 | ],
14 | "repository": "vercel/release",
15 | "keywords": [
16 | "github",
17 | "releases",
18 | "cli",
19 | "tags",
20 | "push"
21 | ],
22 | "author": "leo",
23 | "license": "MIT",
24 | "bin": {
25 | "release": "./bin/release.js"
26 | },
27 | "devDependencies": {
28 | "@zeit/eslint-config-node": "0.2.13",
29 | "@zeit/git-hooks": "0.1.4",
30 | "eslint": "4.19.1"
31 | },
32 | "dependencies": {
33 | "@octokit/rest": "15.2.6",
34 | "args": "4.0.0",
35 | "async-retry": "1.2.1",
36 | "capitalize": "1.0.0",
37 | "chalk": "2.4.0",
38 | "configstore": "3.1.2",
39 | "delay": "4.3.0",
40 | "escape-goat": "1.3.0",
41 | "fs-extra": "5.0.0",
42 | "git-repo-name": "0.6.0",
43 | "git-spawned-stream": "1.0.0",
44 | "git-state": "4.0.0",
45 | "git-username": "1.0.0",
46 | "github-username": "4.1.0",
47 | "inquirer": "5.2.0",
48 | "node-fetch": "2.6.1",
49 | "node-version": "1.1.3",
50 | "opn": "5.4.0",
51 | "ora": "2.0.0",
52 | "random-string": "0.2.0",
53 | "semver": "5.5.0",
54 | "tagged-versions": "1.3.0",
55 | "update-check": "1.3.2"
56 | },
57 | "eslintConfig": {
58 | "extends": [
59 | "@zeit/eslint-config-node"
60 | ]
61 | },
62 | "git": {
63 | "pre-commit": "lint-staged"
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@octokit/rest@15.2.6":
6 | version "15.2.6"
7 | resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-15.2.6.tgz#16226f58fbf0ba88f631848fb622dfe0ad410c0c"
8 | integrity sha512-KcqG0zjnjzUqn7wczz/fKiueNpTLiAI7erhUG6bXWAsYKJJlqnwYonFSXrMW/nmes5y+qOk4uSyHBh1mdRXdVQ==
9 | dependencies:
10 | before-after-hook "^1.1.0"
11 | btoa-lite "^1.0.0"
12 | debug "^3.1.0"
13 | http-proxy-agent "^2.1.0"
14 | https-proxy-agent "^2.2.0"
15 | lodash "^4.17.4"
16 | node-fetch "^2.1.1"
17 | url-template "^2.0.8"
18 |
19 | "@zeit/eslint-config-base@0.2.13":
20 | version "0.2.13"
21 | resolved "https://registry.yarnpkg.com/@zeit/eslint-config-base/-/eslint-config-base-0.2.13.tgz#47c305edb184efb95cfd4bc83d3ed259ac2bd00d"
22 | integrity sha512-onMpkltbQdpzGWU6sezPcj8jqNV5g17CITecPraBrnZ4S+5B5gIvhme1woKV3Y+Kd+ozCBrhUHfHlVhMZSY0FA==
23 | dependencies:
24 | arg "^1.0.0"
25 | chalk "^2.3.0"
26 |
27 | "@zeit/eslint-config-node@0.2.13":
28 | version "0.2.13"
29 | resolved "https://registry.yarnpkg.com/@zeit/eslint-config-node/-/eslint-config-node-0.2.13.tgz#f6aabeb07d1f390830ce7be4774c829f070f3f81"
30 | integrity sha512-E1bokneUXBxm8OVwSEzN52zq9G3NxqwYNJmJs7MuHtJkTLXprY1hpTdBwl6l3ikDfI5zfUEBx03mrG483Mv1vQ==
31 | dependencies:
32 | "@zeit/eslint-config-base" "0.2.13"
33 |
34 | "@zeit/git-hooks@0.1.4":
35 | version "0.1.4"
36 | resolved "https://registry.yarnpkg.com/@zeit/git-hooks/-/git-hooks-0.1.4.tgz#70583db5dd69726a62c7963520e67f2c3a33cc5f"
37 | integrity sha512-NvgZgoYJ/n27Ly7lKxKttMIKSS8P4dr1EURgTmqihHVdTAEqVtkAYPT5XykZIR+GKz8WRGyEQVJekwSgvjYQLg==
38 |
39 | acorn-jsx@^3.0.0:
40 | version "3.0.1"
41 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
42 | integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
43 | dependencies:
44 | acorn "^3.0.4"
45 |
46 | acorn@^3.0.4:
47 | version "3.3.0"
48 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
49 | integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
50 |
51 | acorn@^5.5.0:
52 | version "5.5.3"
53 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9"
54 | integrity sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==
55 |
56 | after-all-results@^2.0.0:
57 | version "2.0.0"
58 | resolved "https://registry.yarnpkg.com/after-all-results/-/after-all-results-2.0.0.tgz#6ac2fc202b500f88da8f4f5530cfa100f4c6a2d0"
59 | integrity sha1-asL8ICtQD4jaj09VMM+hAPTGotA=
60 |
61 | agent-base@4, agent-base@^4.3.0:
62 | version "4.3.0"
63 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
64 | integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
65 | dependencies:
66 | es6-promisify "^5.0.0"
67 |
68 | ajv-keywords@^2.1.0:
69 | version "2.1.1"
70 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
71 | integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=
72 |
73 | ajv@^5.2.3, ajv@^5.3.0:
74 | version "5.5.2"
75 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
76 | integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=
77 | dependencies:
78 | co "^4.6.0"
79 | fast-deep-equal "^1.0.0"
80 | fast-json-stable-stringify "^2.0.0"
81 | json-schema-traverse "^0.3.0"
82 |
83 | ansi-escapes@^3.0.0:
84 | version "3.1.0"
85 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
86 | integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==
87 |
88 | ansi-regex@^2.0.0:
89 | version "2.1.1"
90 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
91 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
92 |
93 | ansi-regex@^3.0.0:
94 | version "3.0.0"
95 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
96 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
97 |
98 | ansi-styles@^2.2.1:
99 | version "2.2.1"
100 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
101 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
102 |
103 | ansi-styles@^3.2.1:
104 | version "3.2.1"
105 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
106 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
107 | dependencies:
108 | color-convert "^1.9.0"
109 |
110 | arg@^1.0.0:
111 | version "1.0.1"
112 | resolved "https://registry.yarnpkg.com/arg/-/arg-1.0.1.tgz#892a26d841bd5a64880bbc8f73dd64a705910ca3"
113 | integrity sha512-yZ7k3hP42f9XI+8s4Sg6nPlHXpqfu5G9ijGZ+7XDF1+9CchByI6Bqs8gB+6bFw0MoSN6WwnfYTLyD3Bv/4W8eA==
114 |
115 | argparse@^1.0.7:
116 | version "1.0.10"
117 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
118 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
119 | dependencies:
120 | sprintf-js "~1.0.2"
121 |
122 | args@4.0.0:
123 | version "4.0.0"
124 | resolved "https://registry.yarnpkg.com/args/-/args-4.0.0.tgz#5ca24cdba43d4b17111c56616f5f2e9d91933954"
125 | integrity sha512-4b7lVF58nlo7sNtq8s2OueroOY/UHn0Nt/NVjsx9zn28u6yDVb9bQ/uy/5jKtHCbUDil4MlMyDLF5+OHEgnTug==
126 | dependencies:
127 | camelcase "5.0.0"
128 | chalk "2.3.2"
129 | leven "2.1.0"
130 | mri "1.1.0"
131 |
132 | array-union@^1.0.1:
133 | version "1.0.2"
134 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
135 | integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
136 | dependencies:
137 | array-uniq "^1.0.1"
138 |
139 | array-uniq@^1.0.1:
140 | version "1.0.3"
141 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
142 | integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
143 |
144 | arrify@^1.0.0:
145 | version "1.0.1"
146 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
147 | integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
148 |
149 | async-retry@1.2.1:
150 | version "1.2.1"
151 | resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.1.tgz#308c6c4e1d91e63397a4676290334ae9bda7bcb1"
152 | integrity sha512-FadV8UDcyZDjzb6eV7MCJj0bfrNjwKw7/X0QHPFCbYP6T20FXgZCYXpJKlQC8RxEQP1E6Xs8pNHdh3bcrZAuAw==
153 | dependencies:
154 | retry "0.10.1"
155 |
156 | babel-code-frame@^6.22.0:
157 | version "6.26.0"
158 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
159 | integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
160 | dependencies:
161 | chalk "^1.1.3"
162 | esutils "^2.0.2"
163 | js-tokens "^3.0.2"
164 |
165 | balanced-match@^1.0.0:
166 | version "1.0.0"
167 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
168 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
169 |
170 | before-after-hook@^1.1.0:
171 | version "1.1.0"
172 | resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.1.0.tgz#83165e15a59460d13702cb8febd6a1807896db5a"
173 | integrity sha512-VOMDtYPwLbIncTxNoSzRyvaMxtXmLWLUqr8k5AfC1BzLk34HvBXaQX8snOwQZ4c0aX8aSERqtJSiI9/m2u5kuA==
174 |
175 | brace-expansion@^1.1.7:
176 | version "1.1.11"
177 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
178 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
179 | dependencies:
180 | balanced-match "^1.0.0"
181 | concat-map "0.0.1"
182 |
183 | btoa-lite@^1.0.0:
184 | version "1.0.0"
185 | resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337"
186 | integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc=
187 |
188 | buffer-from@^1.0.0:
189 | version "1.0.0"
190 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531"
191 | integrity sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==
192 |
193 | caller-path@^0.1.0:
194 | version "0.1.0"
195 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
196 | integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
197 | dependencies:
198 | callsites "^0.2.0"
199 |
200 | callsites@^0.2.0:
201 | version "0.2.0"
202 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
203 | integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
204 |
205 | camelcase@5.0.0:
206 | version "5.0.0"
207 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42"
208 | integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==
209 |
210 | capitalize@1.0.0:
211 | version "1.0.0"
212 | resolved "https://registry.yarnpkg.com/capitalize/-/capitalize-1.0.0.tgz#dc802c580aee101929020d2ca14b4ca8a0ae44be"
213 | integrity sha1-3IAsWAruEBkpAg0soUtMqKCuRL4=
214 |
215 | chalk@2.3.2:
216 | version "2.3.2"
217 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
218 | integrity sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==
219 | dependencies:
220 | ansi-styles "^3.2.1"
221 | escape-string-regexp "^1.0.5"
222 | supports-color "^5.3.0"
223 |
224 | chalk@2.4.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1:
225 | version "2.4.0"
226 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.0.tgz#a060a297a6b57e15b61ca63ce84995daa0fe6e52"
227 | integrity sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==
228 | dependencies:
229 | ansi-styles "^3.2.1"
230 | escape-string-regexp "^1.0.5"
231 | supports-color "^5.3.0"
232 |
233 | chalk@^1.1.3:
234 | version "1.1.3"
235 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
236 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
237 | dependencies:
238 | ansi-styles "^2.2.1"
239 | escape-string-regexp "^1.0.2"
240 | has-ansi "^2.0.0"
241 | strip-ansi "^3.0.0"
242 | supports-color "^2.0.0"
243 |
244 | chardet@^0.4.0:
245 | version "0.4.2"
246 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
247 | integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
248 |
249 | child-process-promise@^2.1.3:
250 | version "2.2.1"
251 | resolved "https://registry.yarnpkg.com/child-process-promise/-/child-process-promise-2.2.1.tgz#4730a11ef610fad450b8f223c79d31d7bdad8074"
252 | integrity sha1-RzChHvYQ+tRQuPIjx50x172tgHQ=
253 | dependencies:
254 | cross-spawn "^4.0.2"
255 | node-version "^1.0.0"
256 | promise-polyfill "^6.0.1"
257 |
258 | circular-json@^0.3.1:
259 | version "0.3.3"
260 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
261 | integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
262 |
263 | cli-cursor@^2.1.0:
264 | version "2.1.0"
265 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
266 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
267 | dependencies:
268 | restore-cursor "^2.0.0"
269 |
270 | cli-spinners@^1.1.0:
271 | version "1.3.1"
272 | resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a"
273 | integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==
274 |
275 | cli-width@^2.0.0:
276 | version "2.2.0"
277 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
278 | integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
279 |
280 | clone@^1.0.2:
281 | version "1.0.4"
282 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
283 | integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
284 |
285 | co@^4.6.0:
286 | version "4.6.0"
287 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
288 | integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
289 |
290 | color-convert@^1.9.0:
291 | version "1.9.1"
292 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
293 | integrity sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==
294 | dependencies:
295 | color-name "^1.1.1"
296 |
297 | color-name@^1.1.1:
298 | version "1.1.3"
299 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
300 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
301 |
302 | concat-map@0.0.1:
303 | version "0.0.1"
304 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
305 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
306 |
307 | concat-stream@^1.6.0:
308 | version "1.6.2"
309 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
310 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
311 | dependencies:
312 | buffer-from "^1.0.0"
313 | inherits "^2.0.3"
314 | readable-stream "^2.2.2"
315 | typedarray "^0.0.6"
316 |
317 | configstore@3.1.2:
318 | version "3.1.2"
319 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f"
320 | integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==
321 | dependencies:
322 | dot-prop "^4.1.0"
323 | graceful-fs "^4.1.2"
324 | make-dir "^1.0.0"
325 | unique-string "^1.0.0"
326 | write-file-atomic "^2.0.0"
327 | xdg-basedir "^3.0.0"
328 |
329 | core-util-is@~1.0.0:
330 | version "1.0.2"
331 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
332 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
333 |
334 | cross-spawn@^4.0.2:
335 | version "4.0.2"
336 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
337 | integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=
338 | dependencies:
339 | lru-cache "^4.0.1"
340 | which "^1.2.9"
341 |
342 | cross-spawn@^5.1.0:
343 | version "5.1.0"
344 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
345 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
346 | dependencies:
347 | lru-cache "^4.0.1"
348 | shebang-command "^1.2.0"
349 | which "^1.2.9"
350 |
351 | crypto-random-string@^1.0.0:
352 | version "1.0.0"
353 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
354 | integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
355 |
356 | cwd@^0.9.1:
357 | version "0.9.1"
358 | resolved "https://registry.yarnpkg.com/cwd/-/cwd-0.9.1.tgz#41e10a7e1ab833dc59c2eca83814c7de77b5a4fd"
359 | integrity sha1-QeEKfhq4M9xZwuyoOBTH3ne1pP0=
360 | dependencies:
361 | find-pkg "^0.1.0"
362 |
363 | debug@3.1.0:
364 | version "3.1.0"
365 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
366 | integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
367 | dependencies:
368 | ms "2.0.0"
369 |
370 | debug@^3.1.0:
371 | version "3.2.6"
372 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
373 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
374 | dependencies:
375 | ms "^2.1.1"
376 |
377 | debug@~0.8.1:
378 | version "0.8.1"
379 | resolved "https://registry.yarnpkg.com/debug/-/debug-0.8.1.tgz#20ff4d26f5e422cb68a1bacbbb61039ad8c1c130"
380 | integrity sha1-IP9NJvXkIstoobrLu2EDmtjBwTA=
381 |
382 | decompress-response@^3.2.0:
383 | version "3.3.0"
384 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
385 | integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
386 | dependencies:
387 | mimic-response "^1.0.0"
388 |
389 | deep-extend@~0.4.0:
390 | version "0.4.2"
391 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
392 | integrity sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=
393 |
394 | deep-is@~0.1.3:
395 | version "0.1.3"
396 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
397 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
398 |
399 | defaults@^1.0.3:
400 | version "1.0.3"
401 | resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
402 | integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
403 | dependencies:
404 | clone "^1.0.2"
405 |
406 | del@^2.0.2:
407 | version "2.2.2"
408 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
409 | integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=
410 | dependencies:
411 | globby "^5.0.0"
412 | is-path-cwd "^1.0.0"
413 | is-path-in-cwd "^1.0.0"
414 | object-assign "^4.0.1"
415 | pify "^2.0.0"
416 | pinkie-promise "^2.0.0"
417 | rimraf "^2.2.8"
418 |
419 | delay@4.3.0:
420 | version "4.3.0"
421 | resolved "https://registry.yarnpkg.com/delay/-/delay-4.3.0.tgz#efeebfb8f545579cb396b3a722443ec96d14c50e"
422 | integrity sha512-Lwaf3zVFDMBop1yDuFZ19F9WyGcZcGacsbdlZtWjQmM50tOcMntm1njF/Nb/Vjij3KaSvCF+sEYGKrrjObu2NA==
423 |
424 | doctrine@^2.1.0:
425 | version "2.1.0"
426 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
427 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
428 | dependencies:
429 | esutils "^2.0.2"
430 |
431 | dot-prop@^4.1.0:
432 | version "4.2.1"
433 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4"
434 | integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==
435 | dependencies:
436 | is-obj "^1.0.0"
437 |
438 | duplexer3@^0.1.4:
439 | version "0.1.4"
440 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
441 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
442 |
443 | es6-promise@^4.0.3:
444 | version "4.2.8"
445 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
446 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
447 |
448 | es6-promisify@^5.0.0:
449 | version "5.0.0"
450 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
451 | integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
452 | dependencies:
453 | es6-promise "^4.0.3"
454 |
455 | escape-goat@1.3.0:
456 | version "1.3.0"
457 | resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-1.3.0.tgz#bf3ee8ad1e488fbba404b084b2e4a55e09231c64"
458 | integrity sha512-E2nU1Y39N5UgfLU8qwMlK0vZrZprIwWLeVmDYN8wd/e37hMtGzu2w1DBiREts0XHfgyZEQlj/hYr0H0izF0HDQ==
459 |
460 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
461 | version "1.0.5"
462 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
463 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
464 |
465 | eslint-scope@^3.7.1:
466 | version "3.7.1"
467 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
468 | integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=
469 | dependencies:
470 | esrecurse "^4.1.0"
471 | estraverse "^4.1.1"
472 |
473 | eslint-visitor-keys@^1.0.0:
474 | version "1.0.0"
475 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
476 | integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==
477 |
478 | eslint@4.19.1:
479 | version "4.19.1"
480 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300"
481 | integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==
482 | dependencies:
483 | ajv "^5.3.0"
484 | babel-code-frame "^6.22.0"
485 | chalk "^2.1.0"
486 | concat-stream "^1.6.0"
487 | cross-spawn "^5.1.0"
488 | debug "^3.1.0"
489 | doctrine "^2.1.0"
490 | eslint-scope "^3.7.1"
491 | eslint-visitor-keys "^1.0.0"
492 | espree "^3.5.4"
493 | esquery "^1.0.0"
494 | esutils "^2.0.2"
495 | file-entry-cache "^2.0.0"
496 | functional-red-black-tree "^1.0.1"
497 | glob "^7.1.2"
498 | globals "^11.0.1"
499 | ignore "^3.3.3"
500 | imurmurhash "^0.1.4"
501 | inquirer "^3.0.6"
502 | is-resolvable "^1.0.0"
503 | js-yaml "^3.9.1"
504 | json-stable-stringify-without-jsonify "^1.0.1"
505 | levn "^0.3.0"
506 | lodash "^4.17.4"
507 | minimatch "^3.0.2"
508 | mkdirp "^0.5.1"
509 | natural-compare "^1.4.0"
510 | optionator "^0.8.2"
511 | path-is-inside "^1.0.2"
512 | pluralize "^7.0.0"
513 | progress "^2.0.0"
514 | regexpp "^1.0.1"
515 | require-uncached "^1.0.3"
516 | semver "^5.3.0"
517 | strip-ansi "^4.0.0"
518 | strip-json-comments "~2.0.1"
519 | table "4.0.2"
520 | text-table "~0.2.0"
521 |
522 | espree@^3.5.4:
523 | version "3.5.4"
524 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
525 | integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
526 | dependencies:
527 | acorn "^5.5.0"
528 | acorn-jsx "^3.0.0"
529 |
530 | esprima@^4.0.0:
531 | version "4.0.1"
532 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
533 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
534 |
535 | esquery@^1.0.0:
536 | version "1.0.1"
537 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
538 | integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
539 | dependencies:
540 | estraverse "^4.0.0"
541 |
542 | esrecurse@^4.1.0:
543 | version "4.2.1"
544 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
545 | integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
546 | dependencies:
547 | estraverse "^4.1.0"
548 |
549 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
550 | version "4.2.0"
551 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
552 | integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
553 |
554 | esutils@^2.0.2:
555 | version "2.0.2"
556 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
557 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
558 |
559 | expand-tilde@^1.2.2:
560 | version "1.2.2"
561 | resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449"
562 | integrity sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=
563 | dependencies:
564 | os-homedir "^1.0.1"
565 |
566 | extend-shallow@^2.0.1:
567 | version "2.0.1"
568 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
569 | integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
570 | dependencies:
571 | is-extendable "^0.1.0"
572 |
573 | external-editor@^2.0.4, external-editor@^2.1.0:
574 | version "2.2.0"
575 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
576 | integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
577 | dependencies:
578 | chardet "^0.4.0"
579 | iconv-lite "^0.4.17"
580 | tmp "^0.0.33"
581 |
582 | fast-deep-equal@^1.0.0:
583 | version "1.1.0"
584 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
585 | integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=
586 |
587 | fast-json-stable-stringify@^2.0.0:
588 | version "2.0.0"
589 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
590 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
591 |
592 | fast-levenshtein@~2.0.4:
593 | version "2.0.6"
594 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
595 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
596 |
597 | figures@^2.0.0:
598 | version "2.0.0"
599 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
600 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
601 | dependencies:
602 | escape-string-regexp "^1.0.5"
603 |
604 | file-entry-cache@^2.0.0:
605 | version "2.0.0"
606 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
607 | integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
608 | dependencies:
609 | flat-cache "^1.2.1"
610 | object-assign "^4.0.1"
611 |
612 | file-name@^0.1.0:
613 | version "0.1.0"
614 | resolved "https://registry.yarnpkg.com/file-name/-/file-name-0.1.0.tgz#12b122f120f9c34dbc176c1ab81a548aced6def7"
615 | integrity sha1-ErEi8SD5w028F2wauBpUis7W3vc=
616 |
617 | find-file-up@^0.1.2:
618 | version "0.1.3"
619 | resolved "https://registry.yarnpkg.com/find-file-up/-/find-file-up-0.1.3.tgz#cf68091bcf9f300a40da411b37da5cce5a2fbea0"
620 | integrity sha1-z2gJG8+fMApA2kEbN9pczlovvqA=
621 | dependencies:
622 | fs-exists-sync "^0.1.0"
623 | resolve-dir "^0.1.0"
624 |
625 | find-pkg@^0.1.0:
626 | version "0.1.2"
627 | resolved "https://registry.yarnpkg.com/find-pkg/-/find-pkg-0.1.2.tgz#1bdc22c06e36365532e2a248046854b9788da557"
628 | integrity sha1-G9wiwG42NlUy4qJIBGhUuXiNpVc=
629 | dependencies:
630 | find-file-up "^0.1.2"
631 |
632 | flat-cache@^1.2.1:
633 | version "1.3.0"
634 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
635 | integrity sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=
636 | dependencies:
637 | circular-json "^0.3.1"
638 | del "^2.0.2"
639 | graceful-fs "^4.1.2"
640 | write "^0.2.1"
641 |
642 | fs-exists-sync@^0.1.0:
643 | version "0.1.0"
644 | resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
645 | integrity sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=
646 |
647 | fs-extra@5.0.0:
648 | version "5.0.0"
649 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd"
650 | integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==
651 | dependencies:
652 | graceful-fs "^4.1.2"
653 | jsonfile "^4.0.0"
654 | universalify "^0.1.0"
655 |
656 | fs.realpath@^1.0.0:
657 | version "1.0.0"
658 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
659 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
660 |
661 | functional-red-black-tree@^1.0.1:
662 | version "1.0.1"
663 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
664 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
665 |
666 | get-stream@^3.0.0:
667 | version "3.0.0"
668 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
669 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
670 |
671 | gh-got@^6.0.0:
672 | version "6.0.0"
673 | resolved "https://registry.yarnpkg.com/gh-got/-/gh-got-6.0.0.tgz#d74353004c6ec466647520a10bd46f7299d268d0"
674 | integrity sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==
675 | dependencies:
676 | got "^7.0.0"
677 | is-plain-obj "^1.1.0"
678 |
679 | git-config-path@^1.0.1:
680 | version "1.0.1"
681 | resolved "https://registry.yarnpkg.com/git-config-path/-/git-config-path-1.0.1.tgz#6d33f7ed63db0d0e118131503bab3aca47d54664"
682 | integrity sha1-bTP37WPbDQ4RgTFQO6s6ykfVRmQ=
683 | dependencies:
684 | extend-shallow "^2.0.1"
685 | fs-exists-sync "^0.1.0"
686 | homedir-polyfill "^1.0.0"
687 |
688 | git-repo-name@0.6.0:
689 | version "0.6.0"
690 | resolved "https://registry.yarnpkg.com/git-repo-name/-/git-repo-name-0.6.0.tgz#af09884656aa537ec625c7087008175cd61228ff"
691 | integrity sha1-rwmIRlaqU37GJccIcAgXXNYSKP8=
692 | dependencies:
693 | cwd "^0.9.1"
694 | file-name "^0.1.0"
695 | lazy-cache "^1.0.4"
696 | remote-origin-url "^0.5.1"
697 |
698 | git-spawned-stream@1.0.0:
699 | version "1.0.0"
700 | resolved "https://registry.yarnpkg.com/git-spawned-stream/-/git-spawned-stream-1.0.0.tgz#abffaf1dab1bf2a612926d5fed1c9f35ef4e3111"
701 | integrity sha1-q/+vHasb8qYSkm1f7RyfNe9OMRE=
702 | dependencies:
703 | debug "~0.8.1"
704 | spawn-to-readstream "~0.1.3"
705 |
706 | git-state@4.0.0:
707 | version "4.0.0"
708 | resolved "https://registry.yarnpkg.com/git-state/-/git-state-4.0.0.tgz#c6f55127e81a2d9feb405a6ad4f76f97fbb68104"
709 | integrity sha512-7rW22+ryQP6az93gU2jr+4SVAAoEPLELTwQiZd1ldq+77N+KLinP1FyZ61bkWrbXiZcEc9F9mpam2r30yG68Tw==
710 | dependencies:
711 | after-all-results "^2.0.0"
712 |
713 | git-username@1.0.0:
714 | version "1.0.0"
715 | resolved "https://registry.yarnpkg.com/git-username/-/git-username-1.0.0.tgz#5e31ef29efe15c184cfaa5ed23212c89b0fcf123"
716 | integrity sha512-xm45KwBR6Eu1jO4umx/o2M84v9TC7tdOBuzLx8ayhdR9H1FBiiG9azz31uC0esDvaWVBTDINpJ5USomk+ja8OQ==
717 | dependencies:
718 | parse-github-url "^1.0.2"
719 | remote-origin-url "^1.0.0"
720 |
721 | github-username@4.1.0:
722 | version "4.1.0"
723 | resolved "https://registry.yarnpkg.com/github-username/-/github-username-4.1.0.tgz#cbe280041883206da4212ae9e4b5f169c30bf417"
724 | integrity sha1-y+KABBiDIG2kISrp5LXxacML9Bc=
725 | dependencies:
726 | gh-got "^6.0.0"
727 |
728 | glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
729 | version "7.1.2"
730 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
731 | integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
732 | dependencies:
733 | fs.realpath "^1.0.0"
734 | inflight "^1.0.4"
735 | inherits "2"
736 | minimatch "^3.0.4"
737 | once "^1.3.0"
738 | path-is-absolute "^1.0.0"
739 |
740 | global-modules@^0.2.3:
741 | version "0.2.3"
742 | resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d"
743 | integrity sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=
744 | dependencies:
745 | global-prefix "^0.1.4"
746 | is-windows "^0.2.0"
747 |
748 | global-prefix@^0.1.4:
749 | version "0.1.5"
750 | resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f"
751 | integrity sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=
752 | dependencies:
753 | homedir-polyfill "^1.0.0"
754 | ini "^1.3.4"
755 | is-windows "^0.2.0"
756 | which "^1.2.12"
757 |
758 | globals@^11.0.1:
759 | version "11.4.0"
760 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.4.0.tgz#b85c793349561c16076a3c13549238a27945f1bc"
761 | integrity sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==
762 |
763 | globby@^5.0.0:
764 | version "5.0.0"
765 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
766 | integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=
767 | dependencies:
768 | array-union "^1.0.1"
769 | arrify "^1.0.0"
770 | glob "^7.0.3"
771 | object-assign "^4.0.1"
772 | pify "^2.0.0"
773 | pinkie-promise "^2.0.0"
774 |
775 | got@^7.0.0:
776 | version "7.1.0"
777 | resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a"
778 | integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==
779 | dependencies:
780 | decompress-response "^3.2.0"
781 | duplexer3 "^0.1.4"
782 | get-stream "^3.0.0"
783 | is-plain-obj "^1.1.0"
784 | is-retry-allowed "^1.0.0"
785 | is-stream "^1.0.0"
786 | isurl "^1.0.0-alpha5"
787 | lowercase-keys "^1.0.0"
788 | p-cancelable "^0.3.0"
789 | p-timeout "^1.1.1"
790 | safe-buffer "^5.0.1"
791 | timed-out "^4.0.0"
792 | url-parse-lax "^1.0.0"
793 | url-to-options "^1.0.1"
794 |
795 | graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
796 | version "4.1.11"
797 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
798 | integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
799 |
800 | has-ansi@^2.0.0:
801 | version "2.0.0"
802 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
803 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
804 | dependencies:
805 | ansi-regex "^2.0.0"
806 |
807 | has-flag@^3.0.0:
808 | version "3.0.0"
809 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
810 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
811 |
812 | has-symbol-support-x@^1.4.1:
813 | version "1.4.2"
814 | resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455"
815 | integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==
816 |
817 | has-to-string-tag-x@^1.2.0:
818 | version "1.4.1"
819 | resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d"
820 | integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==
821 | dependencies:
822 | has-symbol-support-x "^1.4.1"
823 |
824 | homedir-polyfill@^1.0.0:
825 | version "1.0.1"
826 | resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
827 | integrity sha1-TCu8inWJmP7r9e1oWA921GdotLw=
828 | dependencies:
829 | parse-passwd "^1.0.0"
830 |
831 | http-proxy-agent@^2.1.0:
832 | version "2.1.0"
833 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
834 | integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==
835 | dependencies:
836 | agent-base "4"
837 | debug "3.1.0"
838 |
839 | https-proxy-agent@^2.2.0:
840 | version "2.2.4"
841 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b"
842 | integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==
843 | dependencies:
844 | agent-base "^4.3.0"
845 | debug "^3.1.0"
846 |
847 | iconv-lite@^0.4.17:
848 | version "0.4.21"
849 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.21.tgz#c47f8733d02171189ebc4a400f3218d348094798"
850 | integrity sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==
851 | dependencies:
852 | safer-buffer "^2.1.0"
853 |
854 | ignore@^3.3.3:
855 | version "3.3.7"
856 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
857 | integrity sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==
858 |
859 | imurmurhash@^0.1.4:
860 | version "0.1.4"
861 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
862 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
863 |
864 | inflight@^1.0.4:
865 | version "1.0.6"
866 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
867 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
868 | dependencies:
869 | once "^1.3.0"
870 | wrappy "1"
871 |
872 | inherits@2, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
873 | version "2.0.3"
874 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
875 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
876 |
877 | ini@^1.3.4, ini@~1.3.0:
878 | version "1.3.7"
879 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
880 | integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
881 |
882 | inquirer@5.2.0:
883 | version "5.2.0"
884 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726"
885 | integrity sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==
886 | dependencies:
887 | ansi-escapes "^3.0.0"
888 | chalk "^2.0.0"
889 | cli-cursor "^2.1.0"
890 | cli-width "^2.0.0"
891 | external-editor "^2.1.0"
892 | figures "^2.0.0"
893 | lodash "^4.3.0"
894 | mute-stream "0.0.7"
895 | run-async "^2.2.0"
896 | rxjs "^5.5.2"
897 | string-width "^2.1.0"
898 | strip-ansi "^4.0.0"
899 | through "^2.3.6"
900 |
901 | inquirer@^3.0.6:
902 | version "3.3.0"
903 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
904 | integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==
905 | dependencies:
906 | ansi-escapes "^3.0.0"
907 | chalk "^2.0.0"
908 | cli-cursor "^2.1.0"
909 | cli-width "^2.0.0"
910 | external-editor "^2.0.4"
911 | figures "^2.0.0"
912 | lodash "^4.3.0"
913 | mute-stream "0.0.7"
914 | run-async "^2.2.0"
915 | rx-lite "^4.0.8"
916 | rx-lite-aggregates "^4.0.8"
917 | string-width "^2.1.0"
918 | strip-ansi "^4.0.0"
919 | through "^2.3.6"
920 |
921 | is-extendable@^0.1.0:
922 | version "0.1.1"
923 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
924 | integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
925 |
926 | is-fullwidth-code-point@^2.0.0:
927 | version "2.0.0"
928 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
929 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
930 |
931 | is-obj@^1.0.0:
932 | version "1.0.1"
933 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
934 | integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
935 |
936 | is-object@^1.0.1:
937 | version "1.0.1"
938 | resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470"
939 | integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA=
940 |
941 | is-path-cwd@^1.0.0:
942 | version "1.0.0"
943 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
944 | integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
945 |
946 | is-path-in-cwd@^1.0.0:
947 | version "1.0.1"
948 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
949 | integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==
950 | dependencies:
951 | is-path-inside "^1.0.0"
952 |
953 | is-path-inside@^1.0.0:
954 | version "1.0.1"
955 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
956 | integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
957 | dependencies:
958 | path-is-inside "^1.0.1"
959 |
960 | is-plain-obj@^1.1.0:
961 | version "1.1.0"
962 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
963 | integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
964 |
965 | is-promise@^2.1.0:
966 | version "2.1.0"
967 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
968 | integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
969 |
970 | is-resolvable@^1.0.0:
971 | version "1.1.0"
972 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
973 | integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
974 |
975 | is-retry-allowed@^1.0.0:
976 | version "1.1.0"
977 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
978 | integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=
979 |
980 | is-stream@^1.0.0:
981 | version "1.1.0"
982 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
983 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
984 |
985 | is-windows@^0.2.0:
986 | version "0.2.0"
987 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c"
988 | integrity sha1-3hqm1j6indJIc3tp8f+LgALSEIw=
989 |
990 | is-wsl@^1.1.0:
991 | version "1.1.0"
992 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
993 | integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
994 |
995 | isarray@0.0.1:
996 | version "0.0.1"
997 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
998 | integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
999 |
1000 | isarray@~1.0.0:
1001 | version "1.0.0"
1002 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1003 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
1004 |
1005 | isexe@^2.0.0:
1006 | version "2.0.0"
1007 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1008 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
1009 |
1010 | isurl@^1.0.0-alpha5:
1011 | version "1.0.0"
1012 | resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"
1013 | integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==
1014 | dependencies:
1015 | has-to-string-tag-x "^1.2.0"
1016 | is-object "^1.0.1"
1017 |
1018 | js-tokens@^3.0.2:
1019 | version "3.0.2"
1020 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
1021 | integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
1022 |
1023 | js-yaml@^3.9.1:
1024 | version "3.13.1"
1025 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
1026 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
1027 | dependencies:
1028 | argparse "^1.0.7"
1029 | esprima "^4.0.0"
1030 |
1031 | json-schema-traverse@^0.3.0:
1032 | version "0.3.1"
1033 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
1034 | integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
1035 |
1036 | json-stable-stringify-without-jsonify@^1.0.1:
1037 | version "1.0.1"
1038 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1039 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
1040 |
1041 | jsonfile@^4.0.0:
1042 | version "4.0.0"
1043 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
1044 | integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
1045 | optionalDependencies:
1046 | graceful-fs "^4.1.6"
1047 |
1048 | lazy-cache@^1.0.4:
1049 | version "1.0.4"
1050 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
1051 | integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
1052 |
1053 | leven@2.1.0:
1054 | version "2.1.0"
1055 | resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
1056 | integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA=
1057 |
1058 | levn@^0.3.0, levn@~0.3.0:
1059 | version "0.3.0"
1060 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
1061 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
1062 | dependencies:
1063 | prelude-ls "~1.1.2"
1064 | type-check "~0.3.2"
1065 |
1066 | limit-spawn@0.0.3:
1067 | version "0.0.3"
1068 | resolved "https://registry.yarnpkg.com/limit-spawn/-/limit-spawn-0.0.3.tgz#cc09c24467a0f0a1ed10a5196dba597cad3f65dc"
1069 | integrity sha1-zAnCRGeg8KHtEKUZbbpZfK0/Zdw=
1070 |
1071 | lodash@^4.17.4, lodash@^4.3.0:
1072 | version "4.17.19"
1073 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
1074 | integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
1075 |
1076 | log-symbols@^2.2.0:
1077 | version "2.2.0"
1078 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
1079 | integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
1080 | dependencies:
1081 | chalk "^2.0.1"
1082 |
1083 | lowercase-keys@^1.0.0:
1084 | version "1.0.1"
1085 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
1086 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
1087 |
1088 | lru-cache@^4.0.1:
1089 | version "4.1.2"
1090 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f"
1091 | integrity sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==
1092 | dependencies:
1093 | pseudomap "^1.0.2"
1094 | yallist "^2.1.2"
1095 |
1096 | make-dir@^1.0.0:
1097 | version "1.2.0"
1098 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b"
1099 | integrity sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==
1100 | dependencies:
1101 | pify "^3.0.0"
1102 |
1103 | mimic-fn@^1.0.0:
1104 | version "1.2.0"
1105 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
1106 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
1107 |
1108 | mimic-response@^1.0.0:
1109 | version "1.0.0"
1110 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e"
1111 | integrity sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=
1112 |
1113 | minimatch@^3.0.2, minimatch@^3.0.4:
1114 | version "3.0.4"
1115 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1116 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
1117 | dependencies:
1118 | brace-expansion "^1.1.7"
1119 |
1120 | minimist@0.0.8:
1121 | version "0.0.8"
1122 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1123 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
1124 |
1125 | minimist@^1.2.0:
1126 | version "1.2.0"
1127 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1128 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
1129 |
1130 | mkdirp@^0.5.1:
1131 | version "0.5.1"
1132 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1133 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
1134 | dependencies:
1135 | minimist "0.0.8"
1136 |
1137 | mri@1.1.0:
1138 | version "1.1.0"
1139 | resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.0.tgz#5c0a3f29c8ccffbbb1ec941dcec09d71fa32f36a"
1140 | integrity sha1-XAo/KcjM/7ux7JQdzsCdcfoy82o=
1141 |
1142 | ms@2.0.0:
1143 | version "2.0.0"
1144 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1145 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
1146 |
1147 | ms@^2.1.1:
1148 | version "2.1.2"
1149 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1150 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1151 |
1152 | mute-stream@0.0.7:
1153 | version "0.0.7"
1154 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
1155 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
1156 |
1157 | natural-compare@^1.4.0:
1158 | version "1.4.0"
1159 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1160 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
1161 |
1162 | node-fetch@2.6.1, node-fetch@^2.1.1:
1163 | version "2.6.1"
1164 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
1165 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
1166 |
1167 | node-version@1.1.3, node-version@^1.0.0:
1168 | version "1.1.3"
1169 | resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.1.3.tgz#1081c87cce6d2dbbd61d0e51e28c287782678496"
1170 | integrity sha512-rEwE51JWn0yN3Wl5BXeGn5d52OGbSXzWiiXRjAQeuyvcGKyvuSILW2rb3G7Xh+nexzLwhTpek6Ehxd6IjvHePg==
1171 |
1172 | object-assign@^4.0.1:
1173 | version "4.1.1"
1174 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1175 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
1176 |
1177 | object-keys@~0.4.0:
1178 | version "0.4.0"
1179 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
1180 | integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=
1181 |
1182 | once@^1.3.0:
1183 | version "1.4.0"
1184 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1185 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1186 | dependencies:
1187 | wrappy "1"
1188 |
1189 | onetime@^2.0.0:
1190 | version "2.0.1"
1191 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
1192 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
1193 | dependencies:
1194 | mimic-fn "^1.0.0"
1195 |
1196 | opn@5.4.0:
1197 | version "5.4.0"
1198 | resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035"
1199 | integrity sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==
1200 | dependencies:
1201 | is-wsl "^1.1.0"
1202 |
1203 | optionator@^0.8.2:
1204 | version "0.8.2"
1205 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
1206 | integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
1207 | dependencies:
1208 | deep-is "~0.1.3"
1209 | fast-levenshtein "~2.0.4"
1210 | levn "~0.3.0"
1211 | prelude-ls "~1.1.2"
1212 | type-check "~0.3.2"
1213 | wordwrap "~1.0.0"
1214 |
1215 | ora@2.0.0:
1216 | version "2.0.0"
1217 | resolved "https://registry.yarnpkg.com/ora/-/ora-2.0.0.tgz#8ec3a37fa7bffb54a3a0c188a1f6798e7e1827cd"
1218 | integrity sha512-g+IR0nMUXq1k4nE3gkENbN4wkF0XsVZFyxznTF6CdmwQ9qeTGONGpSR9LM5//1l0TVvJoJF3MkMtJp6slUsWFg==
1219 | dependencies:
1220 | chalk "^2.3.1"
1221 | cli-cursor "^2.1.0"
1222 | cli-spinners "^1.1.0"
1223 | log-symbols "^2.2.0"
1224 | strip-ansi "^4.0.0"
1225 | wcwidth "^1.0.1"
1226 |
1227 | os-homedir@^1.0.1:
1228 | version "1.0.2"
1229 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1230 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
1231 |
1232 | os-tmpdir@~1.0.2:
1233 | version "1.0.2"
1234 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1235 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
1236 |
1237 | p-cancelable@^0.3.0:
1238 | version "0.3.0"
1239 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"
1240 | integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==
1241 |
1242 | p-finally@^1.0.0:
1243 | version "1.0.0"
1244 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
1245 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
1246 |
1247 | p-timeout@^1.1.1:
1248 | version "1.2.1"
1249 | resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386"
1250 | integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=
1251 | dependencies:
1252 | p-finally "^1.0.0"
1253 |
1254 | parse-git-config@^1.1.1:
1255 | version "1.1.1"
1256 | resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-1.1.1.tgz#d3a9984317132f57398712bba438e129590ddf8c"
1257 | integrity sha1-06mYQxcTL1c5hxK7pDjhKVkN34w=
1258 | dependencies:
1259 | extend-shallow "^2.0.1"
1260 | fs-exists-sync "^0.1.0"
1261 | git-config-path "^1.0.1"
1262 | ini "^1.3.4"
1263 |
1264 | parse-github-url@^1.0.2:
1265 | version "1.0.2"
1266 | resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395"
1267 | integrity sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==
1268 |
1269 | parse-passwd@^1.0.0:
1270 | version "1.0.0"
1271 | resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
1272 | integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
1273 |
1274 | path-is-absolute@^1.0.0:
1275 | version "1.0.1"
1276 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1277 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1278 |
1279 | path-is-inside@^1.0.1, path-is-inside@^1.0.2:
1280 | version "1.0.2"
1281 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
1282 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
1283 |
1284 | pify@^2.0.0:
1285 | version "2.3.0"
1286 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
1287 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
1288 |
1289 | pify@^3.0.0:
1290 | version "3.0.0"
1291 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
1292 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
1293 |
1294 | pinkie-promise@^2.0.0:
1295 | version "2.0.1"
1296 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
1297 | integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
1298 | dependencies:
1299 | pinkie "^2.0.0"
1300 |
1301 | pinkie@^2.0.0:
1302 | version "2.0.4"
1303 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
1304 | integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
1305 |
1306 | pluralize@^7.0.0:
1307 | version "7.0.0"
1308 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
1309 | integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
1310 |
1311 | prelude-ls@~1.1.2:
1312 | version "1.1.2"
1313 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
1314 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
1315 |
1316 | prepend-http@^1.0.1:
1317 | version "1.0.4"
1318 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
1319 | integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
1320 |
1321 | process-nextick-args@~2.0.0:
1322 | version "2.0.0"
1323 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
1324 | integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
1325 |
1326 | progress@^2.0.0:
1327 | version "2.0.0"
1328 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
1329 | integrity sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=
1330 |
1331 | promise-polyfill@^6.0.1:
1332 | version "6.1.0"
1333 | resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057"
1334 | integrity sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc=
1335 |
1336 | pseudomap@^1.0.2:
1337 | version "1.0.2"
1338 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
1339 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
1340 |
1341 | random-string@0.2.0:
1342 | version "0.2.0"
1343 | resolved "https://registry.yarnpkg.com/random-string/-/random-string-0.2.0.tgz#a46e4375352beda9a0d7b0d19ed6d321ecd1d82d"
1344 | integrity sha1-pG5DdTUr7amg17DRntbTIezR2C0=
1345 |
1346 | rc@^1.0.1, rc@^1.1.6:
1347 | version "1.2.6"
1348 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092"
1349 | integrity sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=
1350 | dependencies:
1351 | deep-extend "~0.4.0"
1352 | ini "~1.3.0"
1353 | minimist "^1.2.0"
1354 | strip-json-comments "~2.0.1"
1355 |
1356 | readable-stream@^2.2.2:
1357 | version "2.3.6"
1358 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
1359 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
1360 | dependencies:
1361 | core-util-is "~1.0.0"
1362 | inherits "~2.0.3"
1363 | isarray "~1.0.0"
1364 | process-nextick-args "~2.0.0"
1365 | safe-buffer "~5.1.1"
1366 | string_decoder "~1.1.1"
1367 | util-deprecate "~1.0.1"
1368 |
1369 | readable-stream@~1.0.17:
1370 | version "1.0.34"
1371 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
1372 | integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
1373 | dependencies:
1374 | core-util-is "~1.0.0"
1375 | inherits "~2.0.1"
1376 | isarray "0.0.1"
1377 | string_decoder "~0.10.x"
1378 |
1379 | regexpp@^1.0.1:
1380 | version "1.1.0"
1381 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab"
1382 | integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==
1383 |
1384 | registry-auth-token@3.3.2:
1385 | version "3.3.2"
1386 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20"
1387 | integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==
1388 | dependencies:
1389 | rc "^1.1.6"
1390 | safe-buffer "^5.0.1"
1391 |
1392 | registry-url@3.1.0:
1393 | version "3.1.0"
1394 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
1395 | integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI=
1396 | dependencies:
1397 | rc "^1.0.1"
1398 |
1399 | remote-origin-url@^0.5.1:
1400 | version "0.5.3"
1401 | resolved "https://registry.yarnpkg.com/remote-origin-url/-/remote-origin-url-0.5.3.tgz#b9fc6ced2c826690d0b07218b2b8c17fcec88e87"
1402 | integrity sha512-crQ7Xk1m/F2IiwBx5oTqk/c0hjoumrEz+a36+ZoVupskQRE/q7pAwHKsTNeiZ31sbSTELvVlVv4h1W0Xo5szKg==
1403 | dependencies:
1404 | parse-git-config "^1.1.1"
1405 |
1406 | remote-origin-url@^1.0.0:
1407 | version "1.0.0"
1408 | resolved "https://registry.yarnpkg.com/remote-origin-url/-/remote-origin-url-1.0.0.tgz#add020aa5f1a0b37372858e02b323dc28d4cd030"
1409 | integrity sha512-xHDM6IBqivpiQ1e4WOuFpM/T6rbzA/WBsu+3WLtgPOhHyjA0nYlijV3NprlTb4FcXlQ5+Q+z174sQ1NnUF5FwA==
1410 | dependencies:
1411 | parse-git-config "^1.1.1"
1412 |
1413 | require-uncached@^1.0.3:
1414 | version "1.0.3"
1415 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
1416 | integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
1417 | dependencies:
1418 | caller-path "^0.1.0"
1419 | resolve-from "^1.0.0"
1420 |
1421 | resolve-dir@^0.1.0:
1422 | version "0.1.1"
1423 | resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e"
1424 | integrity sha1-shklmlYC+sXFxJatiUpujMQwJh4=
1425 | dependencies:
1426 | expand-tilde "^1.2.2"
1427 | global-modules "^0.2.3"
1428 |
1429 | resolve-from@^1.0.0:
1430 | version "1.0.1"
1431 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
1432 | integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
1433 |
1434 | restore-cursor@^2.0.0:
1435 | version "2.0.0"
1436 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
1437 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
1438 | dependencies:
1439 | onetime "^2.0.0"
1440 | signal-exit "^3.0.2"
1441 |
1442 | retry@0.10.1:
1443 | version "0.10.1"
1444 | resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4"
1445 | integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=
1446 |
1447 | rimraf@^2.2.8:
1448 | version "2.6.2"
1449 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
1450 | integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
1451 | dependencies:
1452 | glob "^7.0.5"
1453 |
1454 | run-async@^2.2.0:
1455 | version "2.3.0"
1456 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
1457 | integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
1458 | dependencies:
1459 | is-promise "^2.1.0"
1460 |
1461 | rx-lite-aggregates@^4.0.8:
1462 | version "4.0.8"
1463 | resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
1464 | integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=
1465 | dependencies:
1466 | rx-lite "*"
1467 |
1468 | rx-lite@*, rx-lite@^4.0.8:
1469 | version "4.0.8"
1470 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
1471 | integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
1472 |
1473 | rxjs@^5.5.2:
1474 | version "5.5.10"
1475 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.10.tgz#fde02d7a614f6c8683d0d1957827f492e09db045"
1476 | integrity sha512-SRjimIDUHJkon+2hFo7xnvNC4ZEHGzCRwh9P7nzX3zPkCGFEg/tuElrNR7L/rZMagnK2JeH2jQwPRpmyXyLB6A==
1477 | dependencies:
1478 | symbol-observable "1.0.1"
1479 |
1480 | safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1481 | version "5.1.1"
1482 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
1483 | integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==
1484 |
1485 | safer-buffer@^2.1.0:
1486 | version "2.1.2"
1487 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1488 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
1489 |
1490 | semver@5.5.0, semver@^5.3.0:
1491 | version "5.5.0"
1492 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
1493 | integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
1494 |
1495 | shebang-command@^1.2.0:
1496 | version "1.2.0"
1497 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
1498 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
1499 | dependencies:
1500 | shebang-regex "^1.0.0"
1501 |
1502 | shebang-regex@^1.0.0:
1503 | version "1.0.0"
1504 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
1505 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
1506 |
1507 | signal-exit@^3.0.2:
1508 | version "3.0.2"
1509 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
1510 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
1511 |
1512 | slice-ansi@1.0.0:
1513 | version "1.0.0"
1514 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
1515 | integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==
1516 | dependencies:
1517 | is-fullwidth-code-point "^2.0.0"
1518 |
1519 | spawn-to-readstream@~0.1.3:
1520 | version "0.1.3"
1521 | resolved "https://registry.yarnpkg.com/spawn-to-readstream/-/spawn-to-readstream-0.1.3.tgz#96768b72739ac64ffa77c8ce2cbf98c2d21d8dbf"
1522 | integrity sha1-lnaLcnOaxk/6d8jOLL+YwtIdjb8=
1523 | dependencies:
1524 | limit-spawn "0.0.3"
1525 | through2 "~0.4.1"
1526 |
1527 | sprintf-js@~1.0.2:
1528 | version "1.0.3"
1529 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1530 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
1531 |
1532 | string-width@^2.1.0, string-width@^2.1.1:
1533 | version "2.1.1"
1534 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
1535 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
1536 | dependencies:
1537 | is-fullwidth-code-point "^2.0.0"
1538 | strip-ansi "^4.0.0"
1539 |
1540 | string_decoder@~0.10.x:
1541 | version "0.10.31"
1542 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
1543 | integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
1544 |
1545 | string_decoder@~1.1.1:
1546 | version "1.1.1"
1547 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
1548 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
1549 | dependencies:
1550 | safe-buffer "~5.1.0"
1551 |
1552 | strip-ansi@^3.0.0:
1553 | version "3.0.1"
1554 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1555 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
1556 | dependencies:
1557 | ansi-regex "^2.0.0"
1558 |
1559 | strip-ansi@^4.0.0:
1560 | version "4.0.0"
1561 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
1562 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
1563 | dependencies:
1564 | ansi-regex "^3.0.0"
1565 |
1566 | strip-json-comments@~2.0.1:
1567 | version "2.0.1"
1568 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
1569 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
1570 |
1571 | supports-color@^2.0.0:
1572 | version "2.0.0"
1573 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
1574 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
1575 |
1576 | supports-color@^5.3.0:
1577 | version "5.4.0"
1578 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
1579 | integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
1580 | dependencies:
1581 | has-flag "^3.0.0"
1582 |
1583 | symbol-observable@1.0.1:
1584 | version "1.0.1"
1585 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
1586 | integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=
1587 |
1588 | table@4.0.2:
1589 | version "4.0.2"
1590 | resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
1591 | integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==
1592 | dependencies:
1593 | ajv "^5.2.3"
1594 | ajv-keywords "^2.1.0"
1595 | chalk "^2.1.0"
1596 | lodash "^4.17.4"
1597 | slice-ansi "1.0.0"
1598 | string-width "^2.1.1"
1599 |
1600 | tagged-versions@1.3.0:
1601 | version "1.3.0"
1602 | resolved "https://registry.yarnpkg.com/tagged-versions/-/tagged-versions-1.3.0.tgz#fd3cca176859817b95b1f5d311a12c9c08c8bdc4"
1603 | integrity sha1-/TzKF2hZgXuVsfXTEaEsnAjIvcQ=
1604 | dependencies:
1605 | child-process-promise "^2.1.3"
1606 | semver "^5.3.0"
1607 |
1608 | text-table@~0.2.0:
1609 | version "0.2.0"
1610 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1611 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
1612 |
1613 | through2@~0.4.1:
1614 | version "0.4.2"
1615 | resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b"
1616 | integrity sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=
1617 | dependencies:
1618 | readable-stream "~1.0.17"
1619 | xtend "~2.1.1"
1620 |
1621 | through@^2.3.6:
1622 | version "2.3.8"
1623 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1624 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
1625 |
1626 | timed-out@^4.0.0:
1627 | version "4.0.1"
1628 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
1629 | integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
1630 |
1631 | tmp@^0.0.33:
1632 | version "0.0.33"
1633 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
1634 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
1635 | dependencies:
1636 | os-tmpdir "~1.0.2"
1637 |
1638 | type-check@~0.3.2:
1639 | version "0.3.2"
1640 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
1641 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
1642 | dependencies:
1643 | prelude-ls "~1.1.2"
1644 |
1645 | typedarray@^0.0.6:
1646 | version "0.0.6"
1647 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
1648 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
1649 |
1650 | unique-string@^1.0.0:
1651 | version "1.0.0"
1652 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
1653 | integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
1654 | dependencies:
1655 | crypto-random-string "^1.0.0"
1656 |
1657 | universalify@^0.1.0:
1658 | version "0.1.1"
1659 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
1660 | integrity sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=
1661 |
1662 | update-check@1.3.2:
1663 | version "1.3.2"
1664 | resolved "https://registry.yarnpkg.com/update-check/-/update-check-1.3.2.tgz#460f9e9ab24820367f3edbeb4d4142d9936ff171"
1665 | integrity sha512-0iGt63gXrsU4VTw4tIGVVk14H6KLHI7ExNPuSmdDdwUrUAQTBnh1hQcRpnoBWetb3/Ab4YyXK1iDWXP7D0VHTQ==
1666 | dependencies:
1667 | registry-auth-token "3.3.2"
1668 | registry-url "3.1.0"
1669 |
1670 | url-parse-lax@^1.0.0:
1671 | version "1.0.0"
1672 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
1673 | integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
1674 | dependencies:
1675 | prepend-http "^1.0.1"
1676 |
1677 | url-template@^2.0.8:
1678 | version "2.0.8"
1679 | resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21"
1680 | integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE=
1681 |
1682 | url-to-options@^1.0.1:
1683 | version "1.0.1"
1684 | resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9"
1685 | integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=
1686 |
1687 | util-deprecate@~1.0.1:
1688 | version "1.0.2"
1689 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1690 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
1691 |
1692 | wcwidth@^1.0.1:
1693 | version "1.0.1"
1694 | resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
1695 | integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
1696 | dependencies:
1697 | defaults "^1.0.3"
1698 |
1699 | which@^1.2.12, which@^1.2.9:
1700 | version "1.3.0"
1701 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
1702 | integrity sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==
1703 | dependencies:
1704 | isexe "^2.0.0"
1705 |
1706 | wordwrap@~1.0.0:
1707 | version "1.0.0"
1708 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
1709 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
1710 |
1711 | wrappy@1:
1712 | version "1.0.2"
1713 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1714 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1715 |
1716 | write-file-atomic@^2.0.0:
1717 | version "2.3.0"
1718 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab"
1719 | integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==
1720 | dependencies:
1721 | graceful-fs "^4.1.11"
1722 | imurmurhash "^0.1.4"
1723 | signal-exit "^3.0.2"
1724 |
1725 | write@^0.2.1:
1726 | version "0.2.1"
1727 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
1728 | integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
1729 | dependencies:
1730 | mkdirp "^0.5.1"
1731 |
1732 | xdg-basedir@^3.0.0:
1733 | version "3.0.0"
1734 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
1735 | integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
1736 |
1737 | xtend@~2.1.1:
1738 | version "2.1.2"
1739 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"
1740 | integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os=
1741 | dependencies:
1742 | object-keys "~0.4.0"
1743 |
1744 | yallist@^2.1.2:
1745 | version "2.1.2"
1746 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
1747 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
1748 |
--------------------------------------------------------------------------------