├── .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 | --------------------------------------------------------------------------------