├── _config.yml ├── .gitignore ├── cli.gif ├── .travis.yml ├── README.md ├── package.json ├── LICENSE ├── cli.js └── yarn.lock /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .vscode -------------------------------------------------------------------------------- /cli.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanchitnevgi/npm-compare/HEAD/cli.gif -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | 3 | language: node_js 4 | 5 | node_js: 6 | - node 7 | 8 | cache: yarn 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | npm-compare 2 | ----------- 3 | 4 | ![](cli.gif) 5 | 6 | Compare npm packages from your terminal. 7 | 8 | Inspired from [npmcompare.com](https://npmcompare.com/) | Using [npms.io api](https://npms.io/) 9 | 10 | Read more about it [here](https://medium.com/@sanchitgn/compare-npm-packages-from-the-command-line-f123c3ac0af1#.bnl6s4lg4) 11 | 12 | ## Installation 13 | 14 | ``` 15 | npm install --global npm-compare 16 | ``` 17 | 18 | ## Usage 19 | 20 | ``` 21 | npm-compare [ ] 22 | ``` 23 | 24 | ### Example 25 | 26 | `npm-compare express connect` 27 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "npm-compare", 3 | "version": "0.2.0", 4 | "description": "Compare npm packages from your terminal", 5 | "main": "cli.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "bin": { 10 | "npm-compare": "cli.js" 11 | }, 12 | "preferGlobal": true, 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/sanchitgn/npm-compare.git" 16 | }, 17 | "keywords": [ 18 | "npm", 19 | "cli", 20 | "compare" 21 | ], 22 | "author": "Sanchit Nevgi ", 23 | "license": "MIT", 24 | "bugs": { 25 | "url": "https://github.com/sanchitgn/npm-compare/issues" 26 | }, 27 | "homepage": "https://github.com/sanchitgn/npm-compare#readme", 28 | "dependencies": { 29 | "axios": "^0.17.1", 30 | "chalk": "^2.3.0", 31 | "cli-table3": "^0.5.0", 32 | "date-fns": "^1.28.0", 33 | "yargs": "^10.0.3" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Sanchit Nevgi 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 13 | all 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 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /cli.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const argv = require('yargs').argv; 4 | const axios = require('axios'); 5 | const distanceInWordsToNow = require('date-fns/distance_in_words_to_now'); 6 | const Table = require('cli-table3'); 7 | const chalk = require('chalk'); 8 | const packageNames = argv._; 9 | 10 | function getPackageDetails(name) { 11 | const url = `https://api.npms.io/v2/package/${encodeURIComponent(name)}`; 12 | return axios 13 | .get(url) 14 | .then(res => { 15 | if (res.status !== 200) return Promise.reject(res.data.message); 16 | return res.data; 17 | }) 18 | .then(mapResponseToPackage) 19 | .catch(err => { 20 | console.error('Could not fetch package details:', name, err); 21 | }); 22 | } 23 | 24 | /* 25 | Stats that are compared: 26 | name, version, description, rating, author, modified, downloads, stars, issues, repository, dependencies 27 | */ 28 | function mapResponseToPackage(response) { 29 | const { 30 | metadata: { 31 | name, 32 | version = '', 33 | description = '', 34 | author = { name: '' }, 35 | date, 36 | links = { repository: '' }, 37 | dependencies = {}, 38 | }, 39 | npm = { downloads: 0 }, 40 | github = { starsCount: 0, issues: { openCount: 0 } }, 41 | } = response.collected; 42 | 43 | const [daily = 0, weekly = 0, monthly = 0] = npm.downloads.map( 44 | data => data.count, 45 | ); 46 | 47 | const package = { 48 | name, 49 | description, 50 | version, 51 | rating: formatRating(response.score.final), 52 | modified: distanceInWordsToNow(date), 53 | author: author.name, 54 | repository: links.repository, 55 | dependencies: Object.keys(dependencies).length, 56 | stars: github.starsCount, 57 | issues: github.issues.openCount, 58 | daily, 59 | weekly, 60 | monthly, 61 | }; 62 | 63 | return package; 64 | } 65 | 66 | function formatRating(rating = 0) { 67 | return parseFloat(Math.round(rating * 1000) / 100).toFixed(2); 68 | } 69 | 70 | function printTable(packages) { 71 | const table = new Table(); 72 | 73 | const keys = Object.keys(packages[0]); 74 | 75 | keys.forEach(function(key, index) { 76 | if (index === 0) { 77 | table.push({ 78 | [chalk.red(key.toUpperCase())]: packages.map(package => 79 | chalk.blue(package[key]), 80 | ), 81 | }); 82 | } else { 83 | let highest = undefined; 84 | let lowest = undefined; 85 | packages.map(function(package, index) { 86 | if (['stars', 'daily', 'weekly', 'monthly', 'rating'].includes(key)) { 87 | if (highest === undefined) { 88 | highest = 0; 89 | } 90 | if (package[key] > packages[highest][key]) { 91 | highest = index; 92 | } 93 | } 94 | if (['dependencies', 'issues'].includes(key)) { 95 | if (lowest === undefined) { 96 | lowest = 0; 97 | } 98 | if (package[key] <= packages[lowest][key]) { 99 | lowest = index; 100 | } 101 | } 102 | return package[key]; 103 | }); 104 | table.push({ 105 | [chalk.red(key.toUpperCase())]: packages.map(function(package, index) { 106 | if (['issues', 'stars', 'daily', 'weekly', 'monthly'].includes(key)) { 107 | package[key] = package[key].toLocaleString('en'); 108 | } 109 | if (highest !== undefined) { 110 | if (index === highest || package[key] === packages[highest][key]) { 111 | return chalk.green(package[key]); 112 | } else { 113 | return chalk.red(package[key]); 114 | } 115 | } else if (lowest !== undefined) { 116 | if (index === lowest || package[key] === packages[lowest][key]) { 117 | return chalk.green(package[key]); 118 | } else { 119 | return chalk.red(package[key]); 120 | } 121 | } else { 122 | return package[key]; 123 | } 124 | }), 125 | }); 126 | } 127 | }); 128 | 129 | console.log(table.toString()); 130 | } 131 | 132 | function init() { 133 | Promise.all(packageNames.map(getPackageDetails)) 134 | .then(printTable) 135 | .catch(err => { 136 | console.error('Oops, looks like the comparison failed', err); 137 | }); 138 | } 139 | 140 | init(); 141 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | ansi-regex@^2.0.0: 6 | version "2.1.1" 7 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 8 | 9 | ansi-regex@^3.0.0: 10 | version "3.0.0" 11 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 12 | 13 | ansi-styles@^3.1.0: 14 | version "3.2.0" 15 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" 16 | dependencies: 17 | color-convert "^1.9.0" 18 | 19 | axios@^0.17.1: 20 | version "0.17.1" 21 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.17.1.tgz#2d8e3e5d0bdbd7327f91bc814f5c57660f81824d" 22 | dependencies: 23 | follow-redirects "^1.2.5" 24 | is-buffer "^1.1.5" 25 | 26 | camelcase@^4.1.0: 27 | version "4.1.0" 28 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 29 | 30 | chalk@^2.3.0: 31 | version "2.3.0" 32 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" 33 | dependencies: 34 | ansi-styles "^3.1.0" 35 | escape-string-regexp "^1.0.5" 36 | supports-color "^4.0.0" 37 | 38 | cli-table3@^0.5.0: 39 | version "0.5.0" 40 | resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.0.tgz#adb2f025715f4466e67629783c8d73e9030eb4bd" 41 | dependencies: 42 | object-assign "^4.1.0" 43 | string-width "^2.1.1" 44 | optionalDependencies: 45 | colors "^1.1.2" 46 | 47 | cliui@^3.2.0: 48 | version "3.2.0" 49 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" 50 | dependencies: 51 | string-width "^1.0.1" 52 | strip-ansi "^3.0.1" 53 | wrap-ansi "^2.0.0" 54 | 55 | code-point-at@^1.0.0: 56 | version "1.1.0" 57 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 58 | 59 | color-convert@^1.9.0: 60 | version "1.9.1" 61 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" 62 | dependencies: 63 | color-name "^1.1.1" 64 | 65 | color-name@^1.1.1: 66 | version "1.1.3" 67 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 68 | 69 | colors@^1.1.2: 70 | version "1.1.2" 71 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 72 | 73 | cross-spawn@^5.0.1: 74 | version "5.1.0" 75 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 76 | dependencies: 77 | lru-cache "^4.0.1" 78 | shebang-command "^1.2.0" 79 | which "^1.2.9" 80 | 81 | date-fns@^1.28.0: 82 | version "1.28.0" 83 | resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.0.tgz#3b12f54b66467807bb95e5930caf7bfb4170bc1a" 84 | 85 | debug@^3.1.0: 86 | version "3.1.0" 87 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 88 | dependencies: 89 | ms "2.0.0" 90 | 91 | decamelize@^1.1.1: 92 | version "1.2.0" 93 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 94 | 95 | escape-string-regexp@^1.0.5: 96 | version "1.0.5" 97 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 98 | 99 | execa@^0.7.0: 100 | version "0.7.0" 101 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 102 | dependencies: 103 | cross-spawn "^5.0.1" 104 | get-stream "^3.0.0" 105 | is-stream "^1.1.0" 106 | npm-run-path "^2.0.0" 107 | p-finally "^1.0.0" 108 | signal-exit "^3.0.0" 109 | strip-eof "^1.0.0" 110 | 111 | find-up@^2.1.0: 112 | version "2.1.0" 113 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 114 | dependencies: 115 | locate-path "^2.0.0" 116 | 117 | follow-redirects@^1.2.5: 118 | version "1.2.6" 119 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.2.6.tgz#4dcdc7e4ab3dd6765a97ff89c3b4c258117c79bf" 120 | dependencies: 121 | debug "^3.1.0" 122 | 123 | get-caller-file@^1.0.1: 124 | version "1.0.2" 125 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" 126 | 127 | get-stream@^3.0.0: 128 | version "3.0.0" 129 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 130 | 131 | has-flag@^2.0.0: 132 | version "2.0.0" 133 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" 134 | 135 | invert-kv@^1.0.0: 136 | version "1.0.0" 137 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 138 | 139 | is-buffer@^1.1.5: 140 | version "1.1.6" 141 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 142 | 143 | is-fullwidth-code-point@^1.0.0: 144 | version "1.0.0" 145 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 146 | dependencies: 147 | number-is-nan "^1.0.0" 148 | 149 | is-fullwidth-code-point@^2.0.0: 150 | version "2.0.0" 151 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 152 | 153 | is-stream@^1.1.0: 154 | version "1.1.0" 155 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 156 | 157 | isexe@^2.0.0: 158 | version "2.0.0" 159 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 160 | 161 | lcid@^1.0.0: 162 | version "1.0.0" 163 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 164 | dependencies: 165 | invert-kv "^1.0.0" 166 | 167 | locate-path@^2.0.0: 168 | version "2.0.0" 169 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 170 | dependencies: 171 | p-locate "^2.0.0" 172 | path-exists "^3.0.0" 173 | 174 | lru-cache@^4.0.1: 175 | version "4.1.1" 176 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" 177 | dependencies: 178 | pseudomap "^1.0.2" 179 | yallist "^2.1.2" 180 | 181 | mem@^1.1.0: 182 | version "1.1.0" 183 | resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" 184 | dependencies: 185 | mimic-fn "^1.0.0" 186 | 187 | mimic-fn@^1.0.0: 188 | version "1.1.0" 189 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" 190 | 191 | ms@2.0.0: 192 | version "2.0.0" 193 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 194 | 195 | npm-run-path@^2.0.0: 196 | version "2.0.2" 197 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 198 | dependencies: 199 | path-key "^2.0.0" 200 | 201 | number-is-nan@^1.0.0: 202 | version "1.0.1" 203 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 204 | 205 | object-assign@^4.1.0: 206 | version "4.1.1" 207 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 208 | 209 | os-locale@^2.0.0: 210 | version "2.1.0" 211 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" 212 | dependencies: 213 | execa "^0.7.0" 214 | lcid "^1.0.0" 215 | mem "^1.1.0" 216 | 217 | p-finally@^1.0.0: 218 | version "1.0.0" 219 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 220 | 221 | p-limit@^1.1.0: 222 | version "1.1.0" 223 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" 224 | 225 | p-locate@^2.0.0: 226 | version "2.0.0" 227 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 228 | dependencies: 229 | p-limit "^1.1.0" 230 | 231 | path-exists@^3.0.0: 232 | version "3.0.0" 233 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 234 | 235 | path-key@^2.0.0: 236 | version "2.0.1" 237 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 238 | 239 | pseudomap@^1.0.2: 240 | version "1.0.2" 241 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 242 | 243 | require-directory@^2.1.1: 244 | version "2.1.1" 245 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 246 | 247 | require-main-filename@^1.0.1: 248 | version "1.0.1" 249 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 250 | 251 | set-blocking@^2.0.0: 252 | version "2.0.0" 253 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 254 | 255 | shebang-command@^1.2.0: 256 | version "1.2.0" 257 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 258 | dependencies: 259 | shebang-regex "^1.0.0" 260 | 261 | shebang-regex@^1.0.0: 262 | version "1.0.0" 263 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 264 | 265 | signal-exit@^3.0.0: 266 | version "3.0.2" 267 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 268 | 269 | string-width@^1.0.1: 270 | version "1.0.2" 271 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 272 | dependencies: 273 | code-point-at "^1.0.0" 274 | is-fullwidth-code-point "^1.0.0" 275 | strip-ansi "^3.0.0" 276 | 277 | string-width@^2.0.0, string-width@^2.1.1: 278 | version "2.1.1" 279 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 280 | dependencies: 281 | is-fullwidth-code-point "^2.0.0" 282 | strip-ansi "^4.0.0" 283 | 284 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 285 | version "3.0.1" 286 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 287 | dependencies: 288 | ansi-regex "^2.0.0" 289 | 290 | strip-ansi@^4.0.0: 291 | version "4.0.0" 292 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 293 | dependencies: 294 | ansi-regex "^3.0.0" 295 | 296 | strip-eof@^1.0.0: 297 | version "1.0.0" 298 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 299 | 300 | supports-color@^4.0.0: 301 | version "4.5.0" 302 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" 303 | dependencies: 304 | has-flag "^2.0.0" 305 | 306 | which-module@^2.0.0: 307 | version "2.0.0" 308 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 309 | 310 | which@^1.2.9: 311 | version "1.3.0" 312 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" 313 | dependencies: 314 | isexe "^2.0.0" 315 | 316 | wrap-ansi@^2.0.0: 317 | version "2.1.0" 318 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 319 | dependencies: 320 | string-width "^1.0.1" 321 | strip-ansi "^3.0.1" 322 | 323 | y18n@^3.2.1: 324 | version "3.2.1" 325 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 326 | 327 | yallist@^2.1.2: 328 | version "2.1.2" 329 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 330 | 331 | yargs-parser@^8.0.0: 332 | version "8.1.0" 333 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" 334 | dependencies: 335 | camelcase "^4.1.0" 336 | 337 | yargs@^10.0.3: 338 | version "10.0.3" 339 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz#6542debd9080ad517ec5048fb454efe9e4d4aaae" 340 | dependencies: 341 | cliui "^3.2.0" 342 | decamelize "^1.1.1" 343 | find-up "^2.1.0" 344 | get-caller-file "^1.0.1" 345 | os-locale "^2.0.0" 346 | require-directory "^2.1.1" 347 | require-main-filename "^1.0.1" 348 | set-blocking "^2.0.0" 349 | string-width "^2.0.0" 350 | which-module "^2.0.0" 351 | y18n "^3.2.1" 352 | yargs-parser "^8.0.0" 353 | --------------------------------------------------------------------------------