├── .eslintrc-server ├── .gitignore ├── .travis.yml ├── CONTRIBUTING.md ├── HISTORY.md ├── LICENSE.txt ├── README.md ├── package.json ├── pull-report.js ├── templates ├── html.hbs └── text.hbs └── yarn.lock /.eslintrc-server: -------------------------------------------------------------------------------- 1 | --- 2 | extends: 3 | - "defaults/configurations/walmart/es5-node" 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .git 2 | .hg 3 | 4 | .DS_Store 5 | .project 6 | bower_components 7 | node_modules 8 | npm-debug.log* 9 | phantomjsdriver.log 10 | 11 | # Build 12 | dist 13 | */dist 14 | build 15 | */build 16 | coverage 17 | .vscode 18 | package-lock.json 19 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | node_js: 4 | - "6" 5 | - "8" 6 | - "10" 7 | 8 | branches: 9 | only: 10 | - master 11 | 12 | cache: yarn 13 | 14 | install: 15 | - yarn install --frozen-lockfile 16 | 17 | script: 18 | - yarn --version 19 | - yarn run test 20 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Contributions are most welcome. Fork, and do a pull request (yay!) against the 4 | repository. All pull request changes should pass: 5 | 6 | ``` 7 | $ npm test 8 | ``` 9 | -------------------------------------------------------------------------------- /HISTORY.md: -------------------------------------------------------------------------------- 1 | History 2 | ======= 3 | 4 | ## 0.4.1 5 | 6 | * Fix `--repo-type` documentation. 7 | * Fix bug in `--pr-url` causing it not to work. 8 | * Update travis config to modern nodes. 9 | * Switch to yarn. 10 | * Upgrade various dependencies. 11 | 12 | ## 0.4.0 13 | 14 | * Expose `pullReport` as module for external script imports. ( *[@NotWoods][]* ) 15 | [#17](https://github.com/FormidableLabs/pull-report/issues/17) 16 | 17 | ## 0.3.1 18 | 19 | * Fix user home environment variable inference on windows. 20 | [#14](https://github.com/FormidableLabs/pull-report/issues/14) 21 | 22 | ## 0.3.0 23 | 24 | * Add `--issue-type (pull-request|issue)` support. ( *[@jcvernaleo][]* ) 25 | 26 | ## 0.2.0 27 | 28 | * Add `--repo-type (all|member|private)` support. ( *[@petems][]* ) 29 | 30 | ## 0.1.0 31 | 32 | * Switch from jshint to eslint. 33 | * Add support for GitHub tokens / two-factor authentication. ( *[@jcvernaleo][]* ) 34 | [#6](https://github.com/FormidableLabs/pull-report/issues/6) 35 | 36 | ## 0.0.6 37 | 38 | * Fix template paths for text/html Handlebars templates. 39 | 40 | ## 0.0.5 41 | 42 | * Change `host` short flag to `-H` (don't conflict with help `-h`). 43 | * Add Handlebars template support. 44 | 45 | ## 0.0.4 46 | 47 | * Tweak PR URLs to be actual PR web pages for normal / Enterprise GitHub. 48 | 49 | ## 0.0.3 50 | 51 | * Add `--state (open|closed)` flag. 52 | * Add support for GitHub Enterprise with `--host` flag. 53 | [#1](https://github.com/FormidableLabs/pull-report/issues/1) 54 | 55 | ## 0.0.2 56 | 57 | * Add support for `--pr-url` flag adding URLs to report output. 58 | [#2](https://github.com/FormidableLabs/pull-report/issues/2) 59 | 60 | ## 0.0.1 61 | 62 | * Initial release. 63 | 64 | [@petems]: https://github.com/petems 65 | [@jcvernaleo]: https://github.com/jcvernaleo 66 | [@NotWoods]: https://github.com/NotWoods 67 | [@ryan-roemer]: https://github.com/ryan-roemer 68 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013-2016 Formidable Labs, Inc. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Travis Status][trav_img]][trav_site] 2 | [![Maintenance Status][maintenance-image]](#maintenance-status) 3 | 4 | 5 | # Pull Request / Issue Reporter 6 | Create reports for open GitHub pull requests / issues for organizations and users. 7 | 8 | 9 | ## Installation 10 | 11 | You can install with NPM: 12 | 13 | ```sh 14 | $ npm install -g pull-report 15 | ``` 16 | 17 | ## Usage 18 | `pull-report` can retrieve all open pull requests / issues for 1+ 19 | [GitHub organizations](https://github.com/blog/674-introducing-organizations) 20 | and optionally filter by a user list. 21 | 22 | ```sh 23 | $ pull-report --help 24 | 25 | Usage: pull-report [options] 26 | 27 | 28 | Options: 29 | 30 | -V, --version output the version number 31 | -o, --org [orgs] Comma-separated list of 1+ organizations 32 | -u, --user [users] Comma-separated list of 0+ users 33 | -H, --host GitHub Enterprise API host URL 34 | -s, --state State of issues (default: open) 35 | -i, --insecure Allow unauthorized TLS (for proxies) 36 | -t, --tmpl Handlebars template path 37 | --html Display report as HTML 38 | --gh-user GitHub user name 39 | --gh-pass GitHub pass 40 | --gh-token GitHub token 41 | --pr-url Add pull request or issue URL to output 42 | --repo-type Repo type (default: all|member|public) 43 | --issue-type [types] Comma-separated list of issue types (default: pull-request|issue) 44 | -h, --help output usage information 45 | ``` 46 | 47 | ### Requirements 48 | 49 | `org`: You must enter 1+ organization names. 50 | 51 | ### Authentication 52 | 53 | `pull-report` reads your "~/.gitconfig" file looking for an entry like: 54 | 55 | ```yml 56 | [github] 57 | user = MY_USERNAME 58 | password = MY_PASSWORD 59 | token = MY_TOKEN 60 | ``` 61 | 62 | You can alternately specify / override values on the command line: 63 | 64 | ```sh 65 | $ pull-report \ 66 | --org FormidableLabs \ 67 | --gh-user MY_USERNAME \ 68 | --gh-pass MY_PASSWORD 69 | 70 | $ pull-report \ 71 | --org FormidableLabs \ 72 | --gh-token MY_TOKEN 73 | ``` 74 | 75 | If you user two factor auth (or do not want to specify a password on 76 | the command line or in your config file, you may instead specify a 77 | personal access token. You should generate a token from your github 78 | user account with NO additional privileges and either include it in 79 | your .gitconfig file or specify it on the command line. 80 | 81 | The order of authentication preferences are: 82 | 83 | 1. `--gh-token` 84 | 2. `--gh-user`/`--gh-pass` w/ `.gitconfig:github:user`/`.gitconfig:github:password` 85 | 3. `.gitconfig:github:token` 86 | 4. `.gitconfig:github:user`, `.gitconfig:github:password` 87 | 88 | ### GitHub Enterprise 89 | 90 | Pull report has experimental support for 91 | [GitHub Enterprise](https://enterprise.github.com/) repositories. However, 92 | there are a few things to note: 93 | 94 | * **Brittle Implementation**: We hack up the host and route paths internally 95 | in the underlying [node-github](https://github.com/ajaxorg/node-github) 96 | library. The underlying library could change how its internals work and 97 | our hack would be broken. 98 | * **Disables TLS Cert Matching**: Pull report has an `--insecure` option to 99 | disable the `NODE_TLS_REJECT_UNAUTHORIZED` environment variable to avoid an 100 | `UNABLE_TO_VERIFY_LEAF_SIGNATURE` error when hitting GitHub enterprise through 101 | a VPN or proxy. Do not use the flag if you can't otherwise verify you are 102 | going through a safe transport mechanism (i.e., in other programs that **do** 103 | verify). 104 | 105 | To retrieve reports from GitHub Enterprise, set the `--host` flag to the 106 | host name of your GitHub Enterprise host. 107 | 108 | ### Examples 109 | 110 | Get all of the open pull requests for **one organization**: 111 | 112 | ```sh 113 | $ pull-report --org FormidableLabs 114 | * FormidableLabs: 115 | * work-for-us: (1) 116 | * joe-user / jane-user - 1: Added GUI to job posting API 117 | 118 | * chai-jq: (1) 119 | * jane-user / joe-user - 8: fix DOC anchor links 120 | ``` 121 | 122 | Get all of the open issues for **one organization**: 123 | 124 | ```sh 125 | # Just the issues 126 | $ pull-report --issue-type issue --org FormidableLabs 127 | 128 | # Issues and PRs 129 | $ pull-report --issue-type issue,pull-request --org FormidableLabs 130 | ``` 131 | 132 | Get open pull requests for **multiple organizations**: 133 | 134 | ```sh 135 | $ pull-report --org FormidableLabs,ORG2 136 | ``` 137 | 138 | Get PRs for multiple orgs, filtered to a **user list**: 139 | 140 | ```sh 141 | $ pull-report \ 142 | --org FormidableLabs,ORG2 \ 143 | --user ryan-roemer,USER2,USER3,USER4,USER5 144 | ``` 145 | 146 | Get PRs for a **GitHub enterprise** organization: 147 | 148 | ```sh 149 | $ pull-report \ 150 | --host custom-gh-enterprise.example.com \ 151 | --org ORG1 152 | ``` 153 | 154 | ### Templates 155 | 156 | Pull report uses [Handlebars.js](http://handlebarsjs.com/) templates for 157 | rendering reports. The built-in templates available are: 158 | 159 | * **[text.hbs](./templates/text.hbs)**: Default pure text template. Used if no 160 | other option or templates specified. 161 | * **[html.hbs](./templates/html.hbs)**: HTML output templates. Used if the 162 | `--html` option is provided. The provided HTML template has some 163 | preliminary classes for user styling (in another HTML document) and 164 | a few random [Pure CSS](http://purecss.io/) classes that are currently 165 | being used in another project. (We'll look to shore this up in future 166 | releases.) 167 | 168 | Custom templates can be specified using the command option: 169 | `--tmpl /PATH/TO/TEMPLATE.hbs`. 170 | 171 | ### Limitations 172 | 173 | There is a bit of inefficiency in the current underlying use of the GitHub API. 174 | But, any issues should be relatively easy to fix and enhance. 175 | 176 | * `pull-report` retrieves at most 100 pull requests/issues for any repo. 177 | 178 | 179 | ### Maintenance Status 180 | 181 | **Archived:** This project is no longer maintained by Formidable. We are no longer responding to issues or pull requests unless they relate to security concerns. We encourage interested developers to fork this project and make it their own! 182 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pull-report", 3 | "version": "0.4.1", 4 | "description": "Report on open GitHub pull requests for organizations and users", 5 | "homepage": "https://github.com/FormidableLabs/pull-report", 6 | "author": "Ryan Roemer ", 7 | "repository": { 8 | "type": "git", 9 | "url": "git://github.com/FormidableLabs/pull-report.git" 10 | }, 11 | "license": "MIT", 12 | "main": "pull-report.js", 13 | "keywords": [ 14 | "github", 15 | "git", 16 | "pull request" 17 | ], 18 | "dependencies": { 19 | "async": "^2.6.1", 20 | "commander": "^2.9.0", 21 | "github": "^1.4.0", 22 | "handlebars": "^4.0.11", 23 | "iniparser": "^1.0.5", 24 | "underscore": "^1.9.1" 25 | }, 26 | "devDependencies": { 27 | "eslint": "^1.10.3", 28 | "eslint-config-defaults": "^9.0.0", 29 | "eslint-plugin-filenames": "^0.2.0" 30 | }, 31 | "bin": { 32 | "pull-report": "./pull-report.js" 33 | }, 34 | "scripts": { 35 | "lint": "eslint --color -c .eslintrc-server *.js", 36 | "test": "npm run lint" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /pull-report.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict"; 3 | 4 | /** 5 | * Pull request notifications. 6 | */ 7 | var fs = require("fs"); 8 | var path = require("path"); 9 | var pkg = require("./package.json"); 10 | 11 | var _ = require("underscore"); 12 | var async = require("async"); 13 | var handlebars = require("handlebars"); 14 | var program = require("commander"); 15 | var iniparser = require("iniparser"); 16 | var GitHubApi = require("github"); 17 | 18 | var NOT_FOUND = -1; 19 | 20 | var github; 21 | 22 | /** 23 | * Get Items for organization (PRs or Issues). 24 | * 25 | * @param {Object} opts Options. 26 | * @param {String} opts.org Organization name 27 | * @param {String} opts.users Users to filter (or `null`) 28 | * @param {Bool} opts.pullRequests Include pull requests 29 | * @param {Bool} opts.issues Include issues 30 | * @param {String} opts.host GitHub Enterprise API host URL 31 | * @param {Bool} opts.includeUrl Include url in results 32 | * @param {Function} callback Calls back with `(err, data)` 33 | * @returns {void} 34 | */ 35 | var getItems = function (opts, callback) { 36 | // Actions. 37 | async.auto({ 38 | repos: function (cb) { 39 | github.repos.getForOrg({ 40 | type: opts.repoType, 41 | org: opts.org, 42 | per_page: 100 // eslint-disable-line camelcase 43 | }, cb); 44 | }, 45 | 46 | items: ["repos", function (results, cb) { 47 | var repos = _.chain(results.repos) 48 | .map(function (repo) { return [repo.name, repo]; }) 49 | .object() 50 | .value(); 51 | 52 | // Iterate repositories 53 | async.each(results.repos, function (repo, repoCb) { 54 | // Iterate type of item to request. 55 | async.parallel([ 56 | // Type: Pull Requests 57 | function (typeCb) { 58 | if (!opts.pullRequests) { return typeCb(); } 59 | 60 | github.pullRequests.getAll({ 61 | user: opts.org, 62 | repo: repo.name, 63 | state: opts.state, 64 | per_page: 100 // eslint-disable-line camelcase 65 | }, function (err, items) { 66 | if (items && items.length) { 67 | repos[repo.name].items = items; 68 | } 69 | 70 | return typeCb(err); 71 | }); 72 | }, 73 | 74 | // Type: Issues 75 | function (typeCb) { 76 | if (!opts.issues) { return typeCb(); } 77 | 78 | github.issues.repoIssues({ 79 | user: opts.org, 80 | repo: repo.name, 81 | state: opts.state, 82 | per_page: 100 // eslint-disable-line camelcase 83 | }, function (err, items) { 84 | if (items && items.length) { 85 | repos[repo.name].items = items; 86 | } 87 | 88 | return typeCb(err); 89 | }); 90 | } 91 | 92 | ], repoCb); 93 | 94 | 95 | }, function (err) { 96 | return cb(err, repos); 97 | }); 98 | }] 99 | 100 | }, function (err, results) { 101 | if (err) { return callback(err); } 102 | 103 | var repos = {}; 104 | var entUrlRe = /api\/v[0-9]\/repos\//; 105 | var orgUrl = null; 106 | 107 | // Iterate Repos. 108 | _.chain(results.items) 109 | .filter(function (repo) { return repo.items && repo.items.length; }) 110 | .sort(function (repo) { return repo.name; }) 111 | .map(function (repo) { 112 | // Add in owner URL. 113 | orgUrl = orgUrl || repo.owner.html_url; 114 | 115 | // Starting data. 116 | var repoData = { 117 | name: repo.name, 118 | url: repo.html_url 119 | }; 120 | 121 | // Iterate PRs. 122 | repoData.items = _.chain(repo.items) 123 | .sort(function (pr) { return pr.number; }) 124 | .map(function (pr) { 125 | var url = pr.url.replace(/pulls\/([0-9]+)$/, "pull/$1"); 126 | 127 | // Mutate URLs to actual PR urls. 128 | if (entUrlRe.test(url)) { 129 | // Undo Enterprise hack. 130 | url = url.replace(entUrlRe, ""); 131 | } else { 132 | // Normal GitHub. 133 | url = url.replace( 134 | "https://api.github.com/repos/", 135 | "https://github.com/"); 136 | } 137 | 138 | return { 139 | userUrl: "https://" + (opts.host || "github.com"), 140 | user: pr.user ? pr.user.login : null, 141 | assignee: pr.assignee ? pr.assignee.login : null, 142 | number: pr.number, 143 | title: pr.title, 144 | url: opts.includeUrl ? url : null 145 | }; 146 | }) 147 | .filter(function (pr) { 148 | // Limit to assigned / requesting users. 149 | return !opts.users || 150 | _.contains(opts.users, pr.assignee) || 151 | _.contains(opts.users, pr.user); 152 | }) 153 | .value(); 154 | 155 | // Add in repo if 1+ filtered PRs. 156 | if (repoData.items.length > 0) { 157 | repos[repo.name] = repoData; 158 | } 159 | }); 160 | 161 | // Piggy back owner url off first PR. 162 | callback(null, { 163 | org: opts.org, 164 | orgUrl: orgUrl, 165 | repos: repos 166 | }); 167 | }); 168 | }; 169 | 170 | var list = function (val) { 171 | return val.split(","); 172 | }; 173 | 174 | var validateArgs = function (opts) { 175 | // -------------------------------------------------------------------------- 176 | // Validation 177 | // -------------------------------------------------------------------------- 178 | if (!(opts.org || []).length) { 179 | throw new Error("Must specify 1+ organization names"); 180 | } 181 | // If we have a token, no need for user/password 182 | if (!opts.ghToken && !(opts.ghUser && opts.ghPass)) { 183 | throw new Error("Must specify GitHub user / pass in .gitconfig or " + 184 | "on the command line"); 185 | } 186 | if (!/^(open|closed)$/i.test(opts.state)) { 187 | throw new Error("Invalid state: " + opts.state); 188 | } 189 | if (!/^(all|public|member)$/i.test(opts.repoType)) { 190 | throw new Error("Invalid repo type: " + opts.repoType); 191 | } 192 | if (!(opts.issueType || opts.org.issueType)) { 193 | opts.issueType = ["pull-request"]; // default 194 | } 195 | opts.issueType.forEach(function (type) { 196 | if (["pull-request", "issue"].indexOf(type) === NOT_FOUND) { 197 | throw new Error("Invalid issue type: " + type); 198 | } 199 | }); 200 | }; 201 | 202 | var pullReport = function (opts, callback) { 203 | validateArgs(opts); 204 | 205 | // -------------------------------------------------------------------------- 206 | // Authentication 207 | // -------------------------------------------------------------------------- 208 | // Set up github auth. 209 | github = new GitHubApi({ 210 | // required 211 | version: "3.0.0", 212 | // optional 213 | timeout: 5000 214 | }); 215 | 216 | // Hack in GH enterprise API support. 217 | // 218 | // Note: URL forms are different: 219 | // https://ORG_HOST/api/v3/API_PATH/... 220 | if (opts.host && github.version === "3.0.0") { 221 | // Allow for proxy HTTPS mismatch. This is obviously an unsatisfactory 222 | // solution, but temporarily gets past: 223 | // `UNABLE_TO_VERIFY_LEAF_SIGNATURE` errors. 224 | if (opts.insecure) { 225 | process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 226 | } 227 | 228 | // Patch host. 229 | github.constants.host = opts.host; 230 | 231 | // Patch routes with "/api/v3" 232 | _.each(github[github.version].routes, function (group/*, groupName*/) { 233 | _.each(group, function (route/*, routeName*/) { 234 | if (route.url) { 235 | route.url = "/api/v3" + route.url; 236 | } 237 | }); 238 | }); 239 | } 240 | 241 | // Authenticate. 242 | if (opts.ghToken) { 243 | // Favor OAuth2 244 | github.authenticate({ 245 | type: "oauth", 246 | token: opts.ghToken 247 | }); 248 | } else { 249 | // Otherwise basic auth with user/pass 250 | github.authenticate({ 251 | type: "basic", 252 | username: opts.ghUser, 253 | password: opts.ghPass 254 | }); 255 | } 256 | 257 | // -------------------------------------------------------------------------- 258 | // Iterate PRs for Organizations. 259 | // -------------------------------------------------------------------------- 260 | // Get PRs for each org in parallel, then display in order. 261 | async.map(opts.org, function (org, cb) { 262 | getItems({ 263 | repoType: opts.repoType, 264 | org: org, 265 | pullRequests: opts.issueType.indexOf("pull-request") > NOT_FOUND, 266 | issues: opts.issueType.indexOf("issue") > NOT_FOUND, 267 | users: opts.user, 268 | state: opts.state, 269 | host: opts.host, 270 | includeUrl: opts.prUrl || opts.html 271 | }, cb); 272 | }, callback); 273 | }; 274 | 275 | // Main. 276 | if (require.main === module) { 277 | var HOME_PATH = process.env[/^win/.test(process.platform) ? "USERPROFILE" : "HOME"]; 278 | var GIT_CONFIG_PATH = path.join(HOME_PATH, ".gitconfig"); 279 | var GIT_CONFIG = null; 280 | 281 | // Try and get the .gitconfig. 282 | try { 283 | GIT_CONFIG = iniparser.parseSync(GIT_CONFIG_PATH); 284 | } catch (err) { 285 | // Passthrough. 286 | } 287 | 288 | var ghConfig = GIT_CONFIG && GIT_CONFIG.github ? GIT_CONFIG.github : {}; 289 | 290 | // -------------------------------------------------------------------------- 291 | // Configuration 292 | // -------------------------------------------------------------------------- 293 | // Parse command line arguments. 294 | program 295 | .version(pkg.version) 296 | 297 | .option("-o, --org [orgs]", "Comma-separated list of 1+ organizations", list) 298 | .option("-u, --user [users]", "Comma-separated list of 0+ users", list) 299 | .option("-H, --host ", "GitHub Enterprise API host URL") 300 | .option("-s, --state ", "State of issues (default: open)", "open") 301 | .option("-i, --insecure", "Allow unauthorized TLS (for proxies)", false) 302 | .option("-t, --tmpl ", "Handlebars template path") 303 | .option("--html", "Display report as HTML", false) 304 | .option("--gh-user ", "GitHub user name", null) 305 | .option("--gh-pass ", "GitHub pass", null) 306 | .option("--gh-token ", "GitHub token", null) 307 | .option("--pr-url", "Add pull request or issue URL to output", false) 308 | .option("--repo-type ", "Repo type (default: all|member|public)", "all") 309 | .option("--issue-type [types]", 310 | "Comma-separated list of issue types (default: pull-request|issue)", list) 311 | .parse(process.argv); 312 | 313 | // Add defaults from configuration, in order of precendence. 314 | // 1. `--gh-token` 315 | if (!program.ghToken && !(program.ghUser && program.ghPass)) { 316 | // 2. `--gh-user`/`--gh-pass` w/ .gitconfig:github:user`/` 317 | // .gitconfig:github:password` 318 | if (program.ghUser && !program.ghPass && ghConfig.password) { 319 | program.ghPass = ghConfig.password; 320 | } else if (!program.ghUser && ghConfig.user && program.ghPass) { 321 | program.ghUser = ghConfig.user; 322 | 323 | // 3. `.gitconfig:github:token` 324 | } else if (ghConfig.token) { 325 | program.ghToken = ghConfig.token; 326 | 327 | // 4. `.gitconfig:github:user` `.gitconfig:github:password` 328 | } else if (ghConfig.user && ghConfig.pass) { 329 | program.ghUser = ghConfig.user; 330 | program.ghPass = ghConfig.password; 331 | } 332 | } 333 | 334 | // -------------------------------------------------------------------------- 335 | // Template 336 | // -------------------------------------------------------------------------- 337 | var tmplPath = path.join(__dirname, "templates/text.hbs"); 338 | if (program.html) { 339 | tmplPath = path.join(__dirname, "templates/html.hbs"); 340 | } else if (program.tmpl) { 341 | tmplPath = program.tmpl; 342 | } 343 | 344 | var tmplStr = fs.readFileSync(tmplPath).toString(); 345 | var tmpl = handlebars.compile(tmplStr); 346 | 347 | pullReport(program, function (err, results) { 348 | if (err) { throw err; } 349 | 350 | // Write output. 351 | process.stdout.write(tmpl(results)); 352 | }); 353 | } 354 | 355 | module.exports = pullReport; 356 | -------------------------------------------------------------------------------- /templates/html.hbs: -------------------------------------------------------------------------------- 1 | {{#each this}} 2 |

3 | {{org}} 4 |

5 | {{#each repos}} 6 |

7 | {{name}} 8 | ({{items.length}}) 9 |

10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | {{#each items}} 21 | 22 | 27 | 28 | 29 | 30 | 31 | {{/each}} 32 | 33 |
ReviewerCoderNumberTitle
{{#if assignee~}} 23 | {{assignee}} 24 | {{~else~}} 25 | Unassigned 26 | {{~/if}}{{user}}{{number}}"{{title}}"
34 | {{/each}} 35 | {{/each}} 36 | -------------------------------------------------------------------------------- /templates/text.hbs: -------------------------------------------------------------------------------- 1 | {{#each this~}} 2 | * {{org}}: 3 | {{#each repos}} 4 | * {{name}}: ({{items.length}}){{#each items}} 5 | * {{#if assignee}}{{assignee}}{{else}}[unassigned]{{/if}} / {{user}} - {{number}}: {{title}}{{#if url}} 6 | {{url}}{{/if}}{{/each}} 7 | {{/each}} 8 | {{/each~}} 9 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | agent-base@2: 6 | version "2.1.1" 7 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7" 8 | dependencies: 9 | extend "~3.0.0" 10 | semver "~5.0.1" 11 | 12 | ansi-escapes@^1.1.0: 13 | version "1.4.0" 14 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" 15 | 16 | ansi-regex@^2.0.0: 17 | version "2.1.1" 18 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 19 | 20 | ansi-styles@^2.2.1: 21 | version "2.2.1" 22 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 23 | 24 | argparse@^1.0.2: 25 | version "1.0.9" 26 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 27 | dependencies: 28 | sprintf-js "~1.0.2" 29 | 30 | array-union@^1.0.1: 31 | version "1.0.2" 32 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 33 | dependencies: 34 | array-uniq "^1.0.1" 35 | 36 | array-uniq@^1.0.1: 37 | version "1.0.3" 38 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 39 | 40 | arrify@^1.0.0: 41 | version "1.0.1" 42 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 43 | 44 | async@^2.5.0, async@^2.6.1: 45 | version "2.6.2" 46 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" 47 | dependencies: 48 | lodash "^4.17.11" 49 | 50 | balanced-match@^1.0.0: 51 | version "1.0.0" 52 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 53 | 54 | brace-expansion@^1.1.7: 55 | version "1.1.8" 56 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 57 | dependencies: 58 | balanced-match "^1.0.0" 59 | concat-map "0.0.1" 60 | 61 | chalk@^1.0.0: 62 | version "1.1.3" 63 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 64 | dependencies: 65 | ansi-styles "^2.2.1" 66 | escape-string-regexp "^1.0.2" 67 | has-ansi "^2.0.0" 68 | strip-ansi "^3.0.0" 69 | supports-color "^2.0.0" 70 | 71 | circular-json@^0.3.1: 72 | version "0.3.3" 73 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" 74 | 75 | cli-cursor@^1.0.1: 76 | version "1.0.2" 77 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" 78 | dependencies: 79 | restore-cursor "^1.0.1" 80 | 81 | cli-width@^1.0.1: 82 | version "1.1.1" 83 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-1.1.1.tgz#a4d293ef67ebb7b88d4a4d42c0ccf00c4d1e366d" 84 | 85 | code-point-at@^1.0.0: 86 | version "1.1.0" 87 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 88 | 89 | commander@^2.9.0: 90 | version "2.11.0" 91 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" 92 | 93 | commander@~2.20.0: 94 | version "2.20.0" 95 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" 96 | 97 | concat-map@0.0.1: 98 | version "0.0.1" 99 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 100 | 101 | concat-stream@^1.4.6: 102 | version "1.6.0" 103 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" 104 | dependencies: 105 | inherits "^2.0.3" 106 | readable-stream "^2.2.2" 107 | typedarray "^0.0.6" 108 | 109 | core-util-is@~1.0.0: 110 | version "1.0.2" 111 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 112 | 113 | d@1: 114 | version "1.0.0" 115 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" 116 | dependencies: 117 | es5-ext "^0.10.9" 118 | 119 | debug@2, debug@^2.1.1, debug@^2.2.0: 120 | version "2.6.9" 121 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 122 | dependencies: 123 | ms "2.0.0" 124 | 125 | deep-is@~0.1.3: 126 | version "0.1.3" 127 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 128 | 129 | del@^2.0.2: 130 | version "2.2.2" 131 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" 132 | dependencies: 133 | globby "^5.0.0" 134 | is-path-cwd "^1.0.0" 135 | is-path-in-cwd "^1.0.0" 136 | object-assign "^4.0.1" 137 | pify "^2.0.0" 138 | pinkie-promise "^2.0.0" 139 | rimraf "^2.2.8" 140 | 141 | doctrine@^0.7.1: 142 | version "0.7.2" 143 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" 144 | dependencies: 145 | esutils "^1.1.6" 146 | isarray "0.0.1" 147 | 148 | es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: 149 | version "0.10.27" 150 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.27.tgz#bf926b058c62b1cb5de1a887930673b6aa6d9a66" 151 | dependencies: 152 | es6-iterator "2" 153 | es6-symbol "~3.1" 154 | 155 | es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: 156 | version "2.0.1" 157 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" 158 | dependencies: 159 | d "1" 160 | es5-ext "^0.10.14" 161 | es6-symbol "^3.1" 162 | 163 | es6-map@^0.1.3: 164 | version "0.1.5" 165 | resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" 166 | dependencies: 167 | d "1" 168 | es5-ext "~0.10.14" 169 | es6-iterator "~2.0.1" 170 | es6-set "~0.1.5" 171 | es6-symbol "~3.1.1" 172 | event-emitter "~0.3.5" 173 | 174 | es6-set@~0.1.5: 175 | version "0.1.5" 176 | resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" 177 | dependencies: 178 | d "1" 179 | es5-ext "~0.10.14" 180 | es6-iterator "~2.0.1" 181 | es6-symbol "3.1.1" 182 | event-emitter "~0.3.5" 183 | 184 | es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: 185 | version "3.1.1" 186 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" 187 | dependencies: 188 | d "1" 189 | es5-ext "~0.10.14" 190 | 191 | es6-weak-map@^2.0.1: 192 | version "2.0.2" 193 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" 194 | dependencies: 195 | d "1" 196 | es5-ext "^0.10.14" 197 | es6-iterator "^2.0.1" 198 | es6-symbol "^3.1.1" 199 | 200 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 201 | version "1.0.5" 202 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 203 | 204 | escope@^3.3.0: 205 | version "3.6.0" 206 | resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" 207 | dependencies: 208 | es6-map "^0.1.3" 209 | es6-weak-map "^2.0.1" 210 | esrecurse "^4.1.0" 211 | estraverse "^4.1.1" 212 | 213 | eslint-config-defaults@^9.0.0: 214 | version "9.0.0" 215 | resolved "https://registry.yarnpkg.com/eslint-config-defaults/-/eslint-config-defaults-9.0.0.tgz#a090adc13b2935e3f43b3cd048a92701654e5ad5" 216 | 217 | eslint-plugin-filenames@^0.2.0: 218 | version "0.2.0" 219 | resolved "https://registry.yarnpkg.com/eslint-plugin-filenames/-/eslint-plugin-filenames-0.2.0.tgz#5651a969c46bfed42e174272ff90659366e2b4a2" 220 | 221 | eslint@^1.10.3: 222 | version "1.10.3" 223 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-1.10.3.tgz#fb19a91b13c158082bbca294b17d979bc8353a0a" 224 | dependencies: 225 | chalk "^1.0.0" 226 | concat-stream "^1.4.6" 227 | debug "^2.1.1" 228 | doctrine "^0.7.1" 229 | escape-string-regexp "^1.0.2" 230 | escope "^3.3.0" 231 | espree "^2.2.4" 232 | estraverse "^4.1.1" 233 | estraverse-fb "^1.3.1" 234 | esutils "^2.0.2" 235 | file-entry-cache "^1.1.1" 236 | glob "^5.0.14" 237 | globals "^8.11.0" 238 | handlebars "^4.0.0" 239 | inquirer "^0.11.0" 240 | is-my-json-valid "^2.10.0" 241 | is-resolvable "^1.0.0" 242 | js-yaml "3.4.5" 243 | json-stable-stringify "^1.0.0" 244 | lodash.clonedeep "^3.0.1" 245 | lodash.merge "^3.3.2" 246 | lodash.omit "^3.1.0" 247 | minimatch "^3.0.0" 248 | mkdirp "^0.5.0" 249 | object-assign "^4.0.1" 250 | optionator "^0.6.0" 251 | path-is-absolute "^1.0.0" 252 | path-is-inside "^1.0.1" 253 | shelljs "^0.5.3" 254 | strip-json-comments "~1.0.1" 255 | text-table "~0.2.0" 256 | user-home "^2.0.0" 257 | xml-escape "~1.0.0" 258 | 259 | espree@^2.2.4: 260 | version "2.2.5" 261 | resolved "https://registry.yarnpkg.com/espree/-/espree-2.2.5.tgz#df691b9310889402aeb29cc066708c56690b854b" 262 | 263 | esprima@^2.6.0: 264 | version "2.7.3" 265 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 266 | 267 | esrecurse@^4.1.0: 268 | version "4.2.0" 269 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" 270 | dependencies: 271 | estraverse "^4.1.0" 272 | object-assign "^4.0.1" 273 | 274 | estraverse-fb@^1.3.1: 275 | version "1.3.2" 276 | resolved "https://registry.yarnpkg.com/estraverse-fb/-/estraverse-fb-1.3.2.tgz#d323a4cb5e5ac331cea033413a9253e1643e07c4" 277 | 278 | estraverse@^4.1.0, estraverse@^4.1.1: 279 | version "4.2.0" 280 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 281 | 282 | esutils@^1.1.6: 283 | version "1.1.6" 284 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" 285 | 286 | esutils@^2.0.2: 287 | version "2.0.2" 288 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 289 | 290 | event-emitter@~0.3.5: 291 | version "0.3.5" 292 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" 293 | dependencies: 294 | d "1" 295 | es5-ext "~0.10.14" 296 | 297 | exit-hook@^1.0.0: 298 | version "1.1.1" 299 | resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" 300 | 301 | extend@3, extend@~3.0.0: 302 | version "3.0.2" 303 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 304 | 305 | fast-levenshtein@~1.0.6: 306 | version "1.0.7" 307 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz#0178dcdee023b92905193af0959e8a7639cfdcb9" 308 | 309 | figures@^1.3.5: 310 | version "1.7.0" 311 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 312 | dependencies: 313 | escape-string-regexp "^1.0.5" 314 | object-assign "^4.1.0" 315 | 316 | file-entry-cache@^1.1.1: 317 | version "1.3.1" 318 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-1.3.1.tgz#44c61ea607ae4be9c1402f41f44270cbfe334ff8" 319 | dependencies: 320 | flat-cache "^1.2.1" 321 | object-assign "^4.0.1" 322 | 323 | flat-cache@^1.2.1: 324 | version "1.2.2" 325 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" 326 | dependencies: 327 | circular-json "^0.3.1" 328 | del "^2.0.2" 329 | graceful-fs "^4.1.2" 330 | write "^0.2.1" 331 | 332 | follow-redirects@0.0.7: 333 | version "0.0.7" 334 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-0.0.7.tgz#34b90bab2a911aa347571da90f22bd36ecd8a919" 335 | dependencies: 336 | debug "^2.2.0" 337 | stream-consume "^0.1.0" 338 | 339 | fs.realpath@^1.0.0: 340 | version "1.0.0" 341 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 342 | 343 | generate-function@^2.0.0: 344 | version "2.3.1" 345 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" 346 | dependencies: 347 | is-property "^1.0.2" 348 | 349 | generate-object-property@^1.1.0: 350 | version "1.2.0" 351 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" 352 | dependencies: 353 | is-property "^1.0.0" 354 | 355 | github@^1.4.0: 356 | version "1.4.0" 357 | resolved "https://registry.yarnpkg.com/github/-/github-1.4.0.tgz#60aed8f16ffe381a3ca6dc6dba5bdd64445b7856" 358 | dependencies: 359 | follow-redirects "0.0.7" 360 | https-proxy-agent "^1.0.0" 361 | mime "^1.2.11" 362 | 363 | glob@^5.0.14: 364 | version "5.0.15" 365 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 366 | dependencies: 367 | inflight "^1.0.4" 368 | inherits "2" 369 | minimatch "2 || 3" 370 | once "^1.3.0" 371 | path-is-absolute "^1.0.0" 372 | 373 | glob@^7.0.3, glob@^7.0.5: 374 | version "7.1.2" 375 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 376 | dependencies: 377 | fs.realpath "^1.0.0" 378 | inflight "^1.0.4" 379 | inherits "2" 380 | minimatch "^3.0.4" 381 | once "^1.3.0" 382 | path-is-absolute "^1.0.0" 383 | 384 | globals@^8.11.0: 385 | version "8.18.0" 386 | resolved "https://registry.yarnpkg.com/globals/-/globals-8.18.0.tgz#93d4a62bdcac38cfafafc47d6b034768cb0ffcb4" 387 | 388 | globby@^5.0.0: 389 | version "5.0.0" 390 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" 391 | dependencies: 392 | array-union "^1.0.1" 393 | arrify "^1.0.0" 394 | glob "^7.0.3" 395 | object-assign "^4.0.1" 396 | pify "^2.0.0" 397 | pinkie-promise "^2.0.0" 398 | 399 | graceful-fs@^4.1.2: 400 | version "4.1.11" 401 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 402 | 403 | handlebars@^4.0.0, handlebars@^4.0.11: 404 | version "4.0.14" 405 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.14.tgz#88de711eb693a5b783ae06065f9b91b0dd373a71" 406 | dependencies: 407 | async "^2.5.0" 408 | optimist "^0.6.1" 409 | source-map "^0.6.1" 410 | optionalDependencies: 411 | uglify-js "^3.1.4" 412 | 413 | has-ansi@^2.0.0: 414 | version "2.0.0" 415 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 416 | dependencies: 417 | ansi-regex "^2.0.0" 418 | 419 | https-proxy-agent@^1.0.0: 420 | version "1.0.0" 421 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" 422 | dependencies: 423 | agent-base "2" 424 | debug "2" 425 | extend "3" 426 | 427 | inflight@^1.0.4: 428 | version "1.0.6" 429 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 430 | dependencies: 431 | once "^1.3.0" 432 | wrappy "1" 433 | 434 | inherits@2, inherits@^2.0.3, inherits@~2.0.3: 435 | version "2.0.3" 436 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 437 | 438 | iniparser@^1.0.5: 439 | version "1.0.5" 440 | resolved "https://registry.yarnpkg.com/iniparser/-/iniparser-1.0.5.tgz#836d6befe6dfbfcee0bccf1cf9f2acc7027f783d" 441 | 442 | inquirer@^0.11.0: 443 | version "0.11.4" 444 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.11.4.tgz#81e3374e8361beaff2d97016206d359d0b32fa4d" 445 | dependencies: 446 | ansi-escapes "^1.1.0" 447 | ansi-regex "^2.0.0" 448 | chalk "^1.0.0" 449 | cli-cursor "^1.0.1" 450 | cli-width "^1.0.1" 451 | figures "^1.3.5" 452 | lodash "^3.3.1" 453 | readline2 "^1.0.1" 454 | run-async "^0.1.0" 455 | rx-lite "^3.1.2" 456 | string-width "^1.0.1" 457 | strip-ansi "^3.0.0" 458 | through "^2.3.6" 459 | 460 | is-fullwidth-code-point@^1.0.0: 461 | version "1.0.0" 462 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 463 | dependencies: 464 | number-is-nan "^1.0.0" 465 | 466 | is-my-ip-valid@^1.0.0: 467 | version "1.0.0" 468 | resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" 469 | 470 | is-my-json-valid@^2.10.0: 471 | version "2.20.0" 472 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz#1345a6fca3e8daefc10d0fa77067f54cedafd59a" 473 | dependencies: 474 | generate-function "^2.0.0" 475 | generate-object-property "^1.1.0" 476 | is-my-ip-valid "^1.0.0" 477 | jsonpointer "^4.0.0" 478 | xtend "^4.0.0" 479 | 480 | is-path-cwd@^1.0.0: 481 | version "1.0.0" 482 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 483 | 484 | is-path-in-cwd@^1.0.0: 485 | version "1.0.0" 486 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" 487 | dependencies: 488 | is-path-inside "^1.0.0" 489 | 490 | is-path-inside@^1.0.0: 491 | version "1.0.0" 492 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" 493 | dependencies: 494 | path-is-inside "^1.0.1" 495 | 496 | is-property@^1.0.0, is-property@^1.0.2: 497 | version "1.0.2" 498 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" 499 | 500 | is-resolvable@^1.0.0: 501 | version "1.0.0" 502 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" 503 | dependencies: 504 | tryit "^1.0.1" 505 | 506 | isarray@0.0.1: 507 | version "0.0.1" 508 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 509 | 510 | isarray@~1.0.0: 511 | version "1.0.0" 512 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 513 | 514 | js-yaml@3.4.5: 515 | version "3.4.5" 516 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.4.5.tgz#c3403797df12b91866574f2de23646fe8cafb44d" 517 | dependencies: 518 | argparse "^1.0.2" 519 | esprima "^2.6.0" 520 | 521 | json-stable-stringify@^1.0.0: 522 | version "1.0.1" 523 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 524 | dependencies: 525 | jsonify "~0.0.0" 526 | 527 | jsonify@~0.0.0: 528 | version "0.0.0" 529 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 530 | 531 | jsonpointer@^4.0.0: 532 | version "4.0.1" 533 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" 534 | 535 | levn@~0.2.5: 536 | version "0.2.5" 537 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.2.5.tgz#ba8d339d0ca4a610e3a3f145b9caf48807155054" 538 | dependencies: 539 | prelude-ls "~1.1.0" 540 | type-check "~0.3.1" 541 | 542 | lodash._arraycopy@^3.0.0: 543 | version "3.0.0" 544 | resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" 545 | 546 | lodash._arrayeach@^3.0.0: 547 | version "3.0.0" 548 | resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" 549 | 550 | lodash._arraymap@^3.0.0: 551 | version "3.0.0" 552 | resolved "https://registry.yarnpkg.com/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz#1a8fd0f4c0df4b61dea076d717cdc97f0a3c3e66" 553 | 554 | lodash._baseassign@^3.0.0: 555 | version "3.2.0" 556 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 557 | dependencies: 558 | lodash._basecopy "^3.0.0" 559 | lodash.keys "^3.0.0" 560 | 561 | lodash._baseclone@^3.0.0: 562 | version "3.3.0" 563 | resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" 564 | dependencies: 565 | lodash._arraycopy "^3.0.0" 566 | lodash._arrayeach "^3.0.0" 567 | lodash._baseassign "^3.0.0" 568 | lodash._basefor "^3.0.0" 569 | lodash.isarray "^3.0.0" 570 | lodash.keys "^3.0.0" 571 | 572 | lodash._basecopy@^3.0.0: 573 | version "3.0.1" 574 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 575 | 576 | lodash._basedifference@^3.0.0: 577 | version "3.0.3" 578 | resolved "https://registry.yarnpkg.com/lodash._basedifference/-/lodash._basedifference-3.0.3.tgz#f2c204296c2a78e02b389081b6edcac933cf629c" 579 | dependencies: 580 | lodash._baseindexof "^3.0.0" 581 | lodash._cacheindexof "^3.0.0" 582 | lodash._createcache "^3.0.0" 583 | 584 | lodash._baseflatten@^3.0.0: 585 | version "3.1.4" 586 | resolved "https://registry.yarnpkg.com/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz#0770ff80131af6e34f3b511796a7ba5214e65ff7" 587 | dependencies: 588 | lodash.isarguments "^3.0.0" 589 | lodash.isarray "^3.0.0" 590 | 591 | lodash._basefor@^3.0.0: 592 | version "3.0.3" 593 | resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" 594 | 595 | lodash._baseindexof@^3.0.0: 596 | version "3.1.0" 597 | resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" 598 | 599 | lodash._bindcallback@^3.0.0: 600 | version "3.0.1" 601 | resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" 602 | 603 | lodash._cacheindexof@^3.0.0: 604 | version "3.0.2" 605 | resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" 606 | 607 | lodash._createassigner@^3.0.0: 608 | version "3.1.1" 609 | resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" 610 | dependencies: 611 | lodash._bindcallback "^3.0.0" 612 | lodash._isiterateecall "^3.0.0" 613 | lodash.restparam "^3.0.0" 614 | 615 | lodash._createcache@^3.0.0: 616 | version "3.1.2" 617 | resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" 618 | dependencies: 619 | lodash._getnative "^3.0.0" 620 | 621 | lodash._getnative@^3.0.0: 622 | version "3.9.1" 623 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 624 | 625 | lodash._isiterateecall@^3.0.0: 626 | version "3.0.9" 627 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 628 | 629 | lodash._pickbyarray@^3.0.0: 630 | version "3.0.2" 631 | resolved "https://registry.yarnpkg.com/lodash._pickbyarray/-/lodash._pickbyarray-3.0.2.tgz#1f898d9607eb560b0e167384b77c7c6d108aa4c5" 632 | 633 | lodash._pickbycallback@^3.0.0: 634 | version "3.0.0" 635 | resolved "https://registry.yarnpkg.com/lodash._pickbycallback/-/lodash._pickbycallback-3.0.0.tgz#ff61b9a017a7b3af7d30e6c53de28afa19b8750a" 636 | dependencies: 637 | lodash._basefor "^3.0.0" 638 | lodash.keysin "^3.0.0" 639 | 640 | lodash.clonedeep@^3.0.1: 641 | version "3.0.2" 642 | resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db" 643 | dependencies: 644 | lodash._baseclone "^3.0.0" 645 | lodash._bindcallback "^3.0.0" 646 | 647 | lodash.isarguments@^3.0.0: 648 | version "3.1.0" 649 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 650 | 651 | lodash.isarray@^3.0.0: 652 | version "3.0.4" 653 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 654 | 655 | lodash.isplainobject@^3.0.0: 656 | version "3.2.0" 657 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5" 658 | dependencies: 659 | lodash._basefor "^3.0.0" 660 | lodash.isarguments "^3.0.0" 661 | lodash.keysin "^3.0.0" 662 | 663 | lodash.istypedarray@^3.0.0: 664 | version "3.0.6" 665 | resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" 666 | 667 | lodash.keys@^3.0.0: 668 | version "3.1.2" 669 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 670 | dependencies: 671 | lodash._getnative "^3.0.0" 672 | lodash.isarguments "^3.0.0" 673 | lodash.isarray "^3.0.0" 674 | 675 | lodash.keysin@^3.0.0: 676 | version "3.0.8" 677 | resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f" 678 | dependencies: 679 | lodash.isarguments "^3.0.0" 680 | lodash.isarray "^3.0.0" 681 | 682 | lodash.merge@^3.3.2: 683 | version "3.3.2" 684 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994" 685 | dependencies: 686 | lodash._arraycopy "^3.0.0" 687 | lodash._arrayeach "^3.0.0" 688 | lodash._createassigner "^3.0.0" 689 | lodash._getnative "^3.0.0" 690 | lodash.isarguments "^3.0.0" 691 | lodash.isarray "^3.0.0" 692 | lodash.isplainobject "^3.0.0" 693 | lodash.istypedarray "^3.0.0" 694 | lodash.keys "^3.0.0" 695 | lodash.keysin "^3.0.0" 696 | lodash.toplainobject "^3.0.0" 697 | 698 | lodash.omit@^3.1.0: 699 | version "3.1.0" 700 | resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-3.1.0.tgz#897fe382e6413d9ac97c61f78ed1e057a00af9f3" 701 | dependencies: 702 | lodash._arraymap "^3.0.0" 703 | lodash._basedifference "^3.0.0" 704 | lodash._baseflatten "^3.0.0" 705 | lodash._bindcallback "^3.0.0" 706 | lodash._pickbyarray "^3.0.0" 707 | lodash._pickbycallback "^3.0.0" 708 | lodash.keysin "^3.0.0" 709 | lodash.restparam "^3.0.0" 710 | 711 | lodash.restparam@^3.0.0: 712 | version "3.6.1" 713 | resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" 714 | 715 | lodash.toplainobject@^3.0.0: 716 | version "3.0.0" 717 | resolved "https://registry.yarnpkg.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d" 718 | dependencies: 719 | lodash._basecopy "^3.0.0" 720 | lodash.keysin "^3.0.0" 721 | 722 | lodash@^3.3.1: 723 | version "3.10.1" 724 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" 725 | 726 | lodash@^4.17.11: 727 | version "4.17.11" 728 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" 729 | 730 | mime@^1.2.11: 731 | version "1.6.0" 732 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 733 | 734 | "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.4: 735 | version "3.0.4" 736 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 737 | dependencies: 738 | brace-expansion "^1.1.7" 739 | 740 | minimist@0.0.8: 741 | version "0.0.8" 742 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 743 | 744 | minimist@~0.0.1: 745 | version "0.0.10" 746 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 747 | 748 | mkdirp@^0.5.0, mkdirp@^0.5.1: 749 | version "0.5.1" 750 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 751 | dependencies: 752 | minimist "0.0.8" 753 | 754 | ms@2.0.0: 755 | version "2.0.0" 756 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 757 | 758 | mute-stream@0.0.5: 759 | version "0.0.5" 760 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" 761 | 762 | number-is-nan@^1.0.0: 763 | version "1.0.1" 764 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 765 | 766 | object-assign@^4.0.1, object-assign@^4.1.0: 767 | version "4.1.1" 768 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 769 | 770 | once@^1.3.0: 771 | version "1.4.0" 772 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 773 | dependencies: 774 | wrappy "1" 775 | 776 | onetime@^1.0.0: 777 | version "1.1.0" 778 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" 779 | 780 | optimist@^0.6.1: 781 | version "0.6.1" 782 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 783 | dependencies: 784 | minimist "~0.0.1" 785 | wordwrap "~0.0.2" 786 | 787 | optionator@^0.6.0: 788 | version "0.6.0" 789 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.6.0.tgz#b63ecbbf0e315fad4bc9827b45dc7ba45284fcb6" 790 | dependencies: 791 | deep-is "~0.1.3" 792 | fast-levenshtein "~1.0.6" 793 | levn "~0.2.5" 794 | prelude-ls "~1.1.1" 795 | type-check "~0.3.1" 796 | wordwrap "~0.0.2" 797 | 798 | os-homedir@^1.0.0: 799 | version "1.0.2" 800 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 801 | 802 | path-is-absolute@^1.0.0: 803 | version "1.0.1" 804 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 805 | 806 | path-is-inside@^1.0.1: 807 | version "1.0.2" 808 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 809 | 810 | pify@^2.0.0: 811 | version "2.3.0" 812 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 813 | 814 | pinkie-promise@^2.0.0: 815 | version "2.0.1" 816 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 817 | dependencies: 818 | pinkie "^2.0.0" 819 | 820 | pinkie@^2.0.0: 821 | version "2.0.4" 822 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 823 | 824 | prelude-ls@~1.1.0, prelude-ls@~1.1.1, prelude-ls@~1.1.2: 825 | version "1.1.2" 826 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 827 | 828 | process-nextick-args@~1.0.6: 829 | version "1.0.7" 830 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 831 | 832 | readable-stream@^2.2.2: 833 | version "2.3.3" 834 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" 835 | dependencies: 836 | core-util-is "~1.0.0" 837 | inherits "~2.0.3" 838 | isarray "~1.0.0" 839 | process-nextick-args "~1.0.6" 840 | safe-buffer "~5.1.1" 841 | string_decoder "~1.0.3" 842 | util-deprecate "~1.0.1" 843 | 844 | readline2@^1.0.1: 845 | version "1.0.1" 846 | resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" 847 | dependencies: 848 | code-point-at "^1.0.0" 849 | is-fullwidth-code-point "^1.0.0" 850 | mute-stream "0.0.5" 851 | 852 | restore-cursor@^1.0.1: 853 | version "1.0.1" 854 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" 855 | dependencies: 856 | exit-hook "^1.0.0" 857 | onetime "^1.0.0" 858 | 859 | rimraf@^2.2.8: 860 | version "2.6.1" 861 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" 862 | dependencies: 863 | glob "^7.0.5" 864 | 865 | run-async@^0.1.0: 866 | version "0.1.0" 867 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" 868 | dependencies: 869 | once "^1.3.0" 870 | 871 | rx-lite@^3.1.2: 872 | version "3.1.2" 873 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" 874 | 875 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 876 | version "5.1.1" 877 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 878 | 879 | semver@~5.0.1: 880 | version "5.0.3" 881 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" 882 | 883 | shelljs@^0.5.3: 884 | version "0.5.3" 885 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.5.3.tgz#c54982b996c76ef0c1e6b59fbdc5825f5b713113" 886 | 887 | source-map@^0.6.1, source-map@~0.6.1: 888 | version "0.6.1" 889 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 890 | 891 | sprintf-js@~1.0.2: 892 | version "1.0.3" 893 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 894 | 895 | stream-consume@^0.1.0: 896 | version "0.1.1" 897 | resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz#d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48" 898 | 899 | string-width@^1.0.1: 900 | version "1.0.2" 901 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 902 | dependencies: 903 | code-point-at "^1.0.0" 904 | is-fullwidth-code-point "^1.0.0" 905 | strip-ansi "^3.0.0" 906 | 907 | string_decoder@~1.0.3: 908 | version "1.0.3" 909 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" 910 | dependencies: 911 | safe-buffer "~5.1.0" 912 | 913 | strip-ansi@^3.0.0: 914 | version "3.0.1" 915 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 916 | dependencies: 917 | ansi-regex "^2.0.0" 918 | 919 | strip-json-comments@~1.0.1: 920 | version "1.0.4" 921 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" 922 | 923 | supports-color@^2.0.0: 924 | version "2.0.0" 925 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 926 | 927 | text-table@~0.2.0: 928 | version "0.2.0" 929 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 930 | 931 | through@^2.3.6: 932 | version "2.3.8" 933 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 934 | 935 | tryit@^1.0.1: 936 | version "1.0.3" 937 | resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" 938 | 939 | type-check@~0.3.1: 940 | version "0.3.2" 941 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 942 | dependencies: 943 | prelude-ls "~1.1.2" 944 | 945 | typedarray@^0.0.6: 946 | version "0.0.6" 947 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 948 | 949 | uglify-js@^3.1.4: 950 | version "3.6.0" 951 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" 952 | dependencies: 953 | commander "~2.20.0" 954 | source-map "~0.6.1" 955 | 956 | underscore@^1.9.1: 957 | version "1.9.1" 958 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" 959 | 960 | user-home@^2.0.0: 961 | version "2.0.0" 962 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" 963 | dependencies: 964 | os-homedir "^1.0.0" 965 | 966 | util-deprecate@~1.0.1: 967 | version "1.0.2" 968 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 969 | 970 | wordwrap@~0.0.2: 971 | version "0.0.3" 972 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 973 | 974 | wrappy@1: 975 | version "1.0.2" 976 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 977 | 978 | write@^0.2.1: 979 | version "0.2.1" 980 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 981 | dependencies: 982 | mkdirp "^0.5.1" 983 | 984 | xml-escape@~1.0.0: 985 | version "1.0.0" 986 | resolved "https://registry.yarnpkg.com/xml-escape/-/xml-escape-1.0.0.tgz#00963d697b2adf0c185c4e04e73174ba9b288eb2" 987 | 988 | xtend@^4.0.0: 989 | version "4.0.2" 990 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 991 | --------------------------------------------------------------------------------