├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── README.md ├── appveyor.yml ├── index.js ├── lib ├── index.js ├── mock.js ├── summarize-process.js └── write-error.js ├── mock.js ├── package.json ├── tests ├── helpers │ └── build-error.js └── unit │ ├── index-test.js │ ├── summarize-process-test.js │ └── write-error-test.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "6" 4 | - "8" 5 | - "10" 6 | - "11" 7 | 8 | cache: 9 | yarn: true 10 | 11 | before_install: 12 | - curl -o- -L https://yarnpkg.com/install.sh | bash 13 | - export PATH=$HOME/.yarn/bin:$PATH 14 | 15 | install: 16 | - yarn install --no-lockfile 17 | 18 | script: 19 | - yarn test 20 | 21 | deploy: 22 | provider: npm 23 | email: stefan.penner+ember-cli@gmail.com 24 | api_key: 25 | secure: JW22glZPT//0Ds4FQw0o2G25QJjwwfkmpRBYG0xPb7f4VxRN11jMCLrBzFAgjb7dLOb9qpiDXFgYp2mFnAJPyohwzaQu6tooTl5h7GijOqx1oWpDkq76VhHIDmypy+l9GaVszKLUXEw8sav1caEyOixZz+scCtBMiLINmXhV7SIjIbO36nX4/YbKX0qedf6GOVrNpHkeeHsw5faCIO9PENO/BZSNP/YNx2z5mhrl7tyCpvPyI7X+FsdOUgZAcKt5ocQi6TNp6MtHmHT/WytNPzzgXeZK4Gd9O8/wGcWbDl38/LId8MNaUMbX4mqPh8wIEZhVACsvHmX2LsjnTn31pOObEFvcvXTBaCTuL5v9f8KqKJpz9vgnpWEWAst3U7ffuscip0dcRaBIQJ8FvoM7T9RQulc2RzK+uWn3DTiWLpnUwqwN6XjSUTXthRtydaetxsZ9yizFkDEPDOHN+B1cbqdEkqj1An1K6OKXXiv1WgcC5MfIwdMCP6ybt7yogruBlFDe1X4mjh3B/nWdi9jZkUiUbsqAjr0x+rSWFUCQe3N/8iL9j+HIoAgMCJqPnibwGAZ9VGZA1qJNyGaKUGxpmNYDgDkDmNndzIssy/9fl1C+fmGQL18P4ViaDhKYhi7Dnrvk+VjUx2sBbfIIhBstiLRqEH5Y2QK5XcTpahz74pc= 26 | on: 27 | tags: true 28 | repo: ember-cli/console-ui 29 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## v3.1.2 (2020-11-03) 2 | 3 | #### :bug: Bug Fix 4 | * [#125](https://github.com/ember-cli/console-ui/pull/125) Spinner should respect errorStream option ([@ef4](https://github.com/ef4)) 5 | 6 | #### Committers: 1 7 | - Edward Faulkner ([@ef4](https://github.com/ef4)) 8 | 9 | 10 | ## v3.1.1 (2019-06-27) 11 | 12 | #### :bug: Bug Fix 13 | * [#80](https://github.com/ember-cli/console-ui/pull/80) Fix `TypeError: Cannot read property stack of undefined` ([@astronomersiva](https://github.com/astronomersiva)) 14 | 15 | #### Committers: 1 16 | - Sivasubramanyam A ([@astronomersiva](https://github.com/astronomersiva)) 17 | 18 | 19 | ## v3.1.0 (2019-06-10) 20 | 21 | #### :rocket: Enhancement 22 | * [#77](https://github.com/ember-cli/console-ui/pull/77) add ui.writeErrorLine ([@stefanpenner](https://github.com/stefanpenner)) 23 | 24 | #### Committers: 1 25 | - Stefan Penner ([@stefanpenner](https://github.com/stefanpenner)) 26 | 27 | 28 | ## v3.0.4 (2019-05-02) 29 | 30 | #### :bug: Bug Fix 31 | 32 | * Fix spinner toggling 33 | 34 | ## v3.0.3 (2019-05-02) 35 | 36 | #### :bug: Bug Fix 37 | * [#75](https://github.com/ember-cli/console-ui/pull/75) Ensure we resume an active spinner after we write or writeLine ([@stefanpenner](https://github.com/stefanpenner)) 38 | 39 | #### Committers: 1 40 | - Stefan Penner ([@stefanpenner](https://github.com/stefanpenner)) 41 | 42 | ## v3.0.2 (2019-04-03) 43 | 44 | #### :bug: Bug Fix 45 | * [#68](https://github.com/ember-cli/console-ui/pull/68) [fix] fixes an issue with through2 not returning the stream by calling async callback ([@gabrielcsapo](https://github.com/gabrielcsapo)) 46 | 47 | #### Committers: 1 48 | - Gabriel Csapo ([@gabrielcsapo](https://github.com/gabrielcsapo)) 49 | 50 | ## v3.0.1 (2019-03-29) 51 | 52 | #### :rocket: Enhancement 53 | * [#65](https://github.com/ember-cli/console-ui/pull/65) [feature] use through2 instead of through ([@gabrielcsapo](https://github.com/gabrielcsapo)) 54 | 55 | #### Committers: 1 56 | - Gabriel Csapo ([@gabrielcsapo](https://github.com/gabrielcsapo)) 57 | 58 | ## v3.0.0 (2019-01-08) 59 | 60 | #### :boom: Breaking Change 61 | * [#51](https://github.com/ember-cli/console-ui/pull/51) chore(ci): Drop Node 4 support. ([@rwjblue](https://github.com/rwjblue)) 62 | 63 | #### :rocket: Enhancement 64 | * [#56](https://github.com/ember-cli/console-ui/pull/56) Add lerna-changelog for changelog generation. ([@rwjblue](https://github.com/rwjblue)) 65 | 66 | #### :house: Internal 67 | * [#54](https://github.com/ember-cli/console-ui/pull/54) chore(ci): Migrate to using Yarn. ([@rwjblue](https://github.com/rwjblue)) 68 | * [#53](https://github.com/ember-cli/console-ui/pull/53) chore(ES6): Refactor to ES Classes ([@rwjblue](https://github.com/rwjblue)) 69 | * [#52](https://github.com/ember-cli/console-ui/pull/52) chore(deps): Remove user-info dependency. ([@rwjblue](https://github.com/rwjblue)) 70 | 71 | #### Committers: 1 72 | - Robert Jackson ([@rwjblue](https://github.com/rwjblue)) 73 | 74 | ## v2.2.3 (2019-01-04) 75 | 76 | #### :rocket: Enhancement 77 | * [#49](https://github.com/ember-cli/console-ui/pull/49) Ensure error.code is preserved from build errors ([@stefanpenner](https://github.com/stefanpenner)) 78 | 79 | #### :memo: Documentation 80 | * [#32](https://github.com/ember-cli/console-ui/pull/32) Fix typo ([@quajo](https://github.com/quajo)) 81 | 82 | #### :house: Internal 83 | * [#47](https://github.com/ember-cli/console-ui/pull/47) TravisCI: Remove deprecated `sudo: false` option ([@Turbo87](https://github.com/Turbo87)) 84 | 85 | #### Committers: 4 86 | - Robert Jackson ([@rwjblue](https://github.com/rwjblue)) 87 | - Selase Krakani ([@quajo](https://github.com/quajo)) 88 | - Stefan Penner ([@stefanpenner](https://github.com/stefanpenner)) 89 | - Tobias Bieniek ([@Turbo87](https://github.com/Turbo87)) 90 | 91 | 92 | ## v2.2.2 (2018-02-22) 93 | 94 | #### :bug: Bug Fix 95 | * [#30](https://github.com/ember-cli/console-ui/pull/30) Revert "fix(package): update inquirer to version 5.0.0" ([@Turbo87](https://github.com/Turbo87)) 96 | 97 | #### Committers: 1 98 | - Tobias Bieniek ([@Turbo87](https://github.com/Turbo87)) 99 | 100 | 101 | ## v2.2.0 (2018-02-21) 102 | 103 | #### :rocket: Enhancement 104 | * [#28](https://github.com/ember-cli/console-ui/pull/28) Print error details directly in CI mode ([@Turbo87](https://github.com/Turbo87)) 105 | 106 | #### Committers: 1 107 | - Tobias Bieniek ([@Turbo87](https://github.com/Turbo87)) 108 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # console-ui 2 | 3 | [![Build Status](https://travis-ci.org/ember-cli/console-ui.svg?branch=master)](https://travis-ci.org/ember-cli/console-ui) 4 | [![Build status](https://ci.appveyor.com/api/projects/status/38tkats2frmmxt2f/branch/master?svg=true)](https://ci.appveyor.com/project/embercli/console-ui/branch/master) 5 | 6 | The goal of this library is to declare a common interface that various 7 | node_modules can utilize allowing their UI interactions to be well 8 | coordinated and interoperable. This repo provides reference UI 9 | and test mock implementations. In theory, an alternate implementation abiding 10 | by the describe API could be provided, and the system and all participating 11 | libraries would continue to function correctly. 12 | 13 | Features: 14 | 15 | * unified and pluggable input/output streams for all participants 16 | * system wide writeLevels enabling ability to easily silence/warn/debug print 17 | while abiding by shared configuration 18 | * unified progress 19 | * unified CI state (to disable CI unfriendly features such as progress spinners) 20 | * simple 21 | * test mock 22 | 23 | ## Usage 24 | 25 | ```js 26 | const UI = require('console-ui') 27 | const ui = new UI({ 28 | inputStream: process.stdin, 29 | outputStream: process.stdout, 30 | errorStream: process.stderr, 31 | writeLevel: 'DEBUG' | 'INFO' | 'WARNING' | 'ERROR', 32 | ci: true | false 33 | }); 34 | ``` 35 | 36 | available write levels: 37 | * DEBUG (outputStream) 38 | * INFO (outputStream) 39 | * WARNING (errorStream) 40 | * ERROR (errorStream) 41 | 42 | write to output: 43 | 44 | ```js 45 | ui.write('message'); 46 | ui.write('message', 'ERROR'); // specify writelevel 47 | ``` 48 | 49 | 50 | write + newline to output: 51 | 52 | ```js 53 | ui.writeLine('message'); 54 | ui.writeLine('message', 'ERROR'); // specify writelevel 55 | ``` 56 | 57 | write + newline to stderr; 58 | 59 | ```js 60 | ui.writeErrorLine('message'); 61 | ``` 62 | 63 | write with DEBUG writeLevel 64 | 65 | ```js 66 | ui.writeDebugLine('message'); 67 | ``` 68 | 69 | write with INFO writeLevel 70 | 71 | ```js 72 | ui.writeInfoLine('message'); 73 | ``` 74 | 75 | write with WARN writeLevel 76 | 77 | ```js 78 | ui.writeWarnLine('message'); 79 | ``` 80 | 81 | write a message related to a deprecation 82 | 83 | ```js 84 | ui.writeDeprecateLine('some message', true | false); // pass boolean as second argument indicating if deprecated or not 85 | ``` 86 | 87 | write an error nicely (in red) to the console: 88 | 89 | * if error.file || error.filename, nicely print the file name 90 | * if error.line also nicely print file + line 91 | * if error.col also nicely print file + line + col 92 | 93 | * if error.message, nicely print it 94 | * if error.stack, nicely print it 95 | 96 | ```js 97 | ui.writeError(error); 98 | ``` 99 | 100 | to adjust the writeLevel on the fly: 101 | 102 | ```js 103 | ui.setWriteLevel('DEBUG' || 'INFO' || 'WARNING' || 'ERROR'); 104 | ``` 105 | 106 | 107 | to begin progress spinner \w message (only if INFO writeLevel is visible) 108 | 109 | ```js 110 | ui.startProgress('building...'); 111 | ``` 112 | 113 | to end progress spinner 114 | 115 | ```js 116 | ui.stopProgress(); 117 | ``` 118 | 119 | to prompt a user, via [inquirer](https://www.npmjs.com/package/inquirer) 120 | 121 | ```js 122 | ui.prompt(queryForInquirer, callback); 123 | ``` 124 | 125 | to query if a given `writeLevel` is visible: 126 | 127 | ```js 128 | ui.writeLevelVisible('DEBUG' || 'INFO' || 'WARNING' || 'ERROR'); // => true | false 129 | ``` 130 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | # https://www.appveyor.com/docs/appveyor-yml/ 2 | 3 | # Test against these versions of Node.js. 4 | environment: 5 | MOCHA_REPORTER: "mocha-appveyor-reporter" 6 | matrix: 7 | - nodejs_version: "6" 8 | - nodejs_version: "8" 9 | - nodejs_version: "10" 10 | - nodejs_version: "11" 11 | 12 | # Install scripts. (runs after repo cloning) 13 | install: 14 | - git rev-parse HEAD 15 | # Get the latest stable version of Node 0.STABLE.latest 16 | - ps: Install-Product node $env:nodejs_version 17 | - appveyor-retry yarn 18 | - appveyor-retry yarn add mocha-appveyor-reporter # must be installed locally. 19 | 20 | cache: 21 | - '%LOCALAPPDATA%\Yarn' 22 | 23 | # Post-install test scripts. 24 | test_script: 25 | - cmd: yarn test 26 | 27 | # Don't actually build. 28 | build: off 29 | 30 | # Set build version format here instead of in the admin panel. 31 | version: "{build}" 32 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./lib/index'); 2 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const ora = require('ora'); 4 | const EOL = require('os').EOL; 5 | const chalk = require('chalk'); 6 | const writeError = require('./write-error'); 7 | const tmpdir = require('os').tmpdir(); 8 | const crypto = require('crypto'); 9 | const fs = require('fs'); 10 | const through = require('through2'); 11 | 12 | const DEFAULT_WRITE_LEVEL = 'INFO'; 13 | 14 | /** 15 | The UI provides the CLI with a unified mechanism for providing output and 16 | requesting input from the user. This becomes useful when wanting to adjust 17 | logLevels, or mock input/output for tests. 18 | 19 | @class UI 20 | @constructor 21 | @param {Object} options Configuration options 22 | 23 | @example 24 | ```js 25 | new UI({ 26 | inputStream: process.stdin, 27 | outputStream: process.stdout, 28 | writeLevel: 'DEBUG' | 'INFO' | 'WARNING' | 'ERROR', 29 | ci: true | false 30 | }); 31 | ``` 32 | */ 33 | class UI { 34 | constructor(_options) { 35 | let options = _options || {}; 36 | let errorStream = this.errorStream = options.errorStream || process.stderr; 37 | let spinner = this.spinner = ora({ color: 'green', stream: errorStream }); 38 | // Output stream 39 | this.progress = false; 40 | this.actualOutputStream = options.outputStream || process.stdout; 41 | this.outputStream = through((data, enc, callback) => { 42 | if (this.progress) { 43 | spinner.stop(); 44 | } 45 | 46 | callback(null, data); 47 | 48 | if (this.progress) { 49 | spinner.start(); 50 | } 51 | }); 52 | this.outputStream.setMaxListeners(0); 53 | this.outputStream.pipe(this.actualOutputStream); 54 | this.inputStream = options.inputStream || process.stdin; 55 | this.errorLog = options.errorLog || []; 56 | this.writeLevel = options.writeLevel || DEFAULT_WRITE_LEVEL; 57 | this.errorReport = null; 58 | this.ci = !!options.ci; 59 | } 60 | /** 61 | Unified mechanism to write a string to the console. 62 | Optionally include a writeLevel, this is used to decide if the specific 63 | logging mechanism should or should not be printed. 64 | 65 | @method write 66 | @param {String} data 67 | @param {String} [writeLevel='INFO'] 68 | */ 69 | write(data, writeLevel) { 70 | if (writeLevel === 'ERROR' || writeLevel === 'WARNING') { 71 | this.errorStream.write(data); 72 | } else if (this.writeLevelVisible(writeLevel)) { 73 | this.outputStream.write(data); 74 | } 75 | } 76 | /** 77 | Unified mechanism to write a string and new line to the console. 78 | Optionally include a writeLevel, this is used to decide if the specific 79 | logging mechanism should or should not be printed. 80 | @method writeLine 81 | @param {String} data 82 | @param {String} [writeLevel='INFO'] 83 | */ 84 | writeLine(data, writeLevel) { 85 | this.write(data + EOL, writeLevel); 86 | } 87 | 88 | /** 89 | Helper method to write to stderr 90 | @method writeErrorLine 91 | @param {String} data 92 | */ 93 | writeErrorLine(data) { 94 | this.writeLine(data, 'ERROR'); 95 | } 96 | 97 | /** 98 | Helper method to write a string with the DEBUG writeLevel and gray chalk 99 | @method writeDebugLine 100 | @param {String} data 101 | */ 102 | writeDebugLine(data) { 103 | this.writeLine(chalk.gray(data), 'DEBUG'); 104 | } 105 | /** 106 | Helper method to write a string with the INFO writeLevel and cyan chalk 107 | @method writeInfoLine 108 | @param {String} data 109 | */ 110 | writeInfoLine(data) { 111 | this.writeLine(chalk.cyan(data), 'INFO'); 112 | } 113 | /** 114 | Helper method to write a string with the WARNING writeLevel and yellow chalk. 115 | Optionally include a test. If falsy, the warning will be printed. By default, warnings 116 | will be prepended with WARNING text when printed. 117 | @method writeWarnLine 118 | @param {String} data 119 | @param {Boolean} test 120 | @param {Boolean} prepend 121 | */ 122 | writeWarnLine(data, test, prepend) { 123 | if (test) { 124 | return; 125 | } 126 | 127 | data = this.prependLine('WARNING', data, prepend); 128 | this.writeLine(chalk.yellow(data), 'WARNING', test); 129 | } 130 | /** 131 | Helper method to write a string with the WARNING writeLevel and yellow chalk. 132 | Optionally include a test. If falsy, the deprecation will be printed. By default deprecations 133 | will be prepended with DEPRECATION text when printed. 134 | @method writeDeprecateLine 135 | @param {String} data 136 | @param {Boolean} test 137 | @param {Boolean} prepend 138 | */ 139 | writeDeprecateLine(data, test, prepend) { 140 | data = this.prependLine('DEPRECATION', data, prepend); 141 | this.writeWarnLine(data, test, false); 142 | } 143 | 144 | /** 145 | Utility method to prepend a line with a flag-like string (i.e., WARNING). 146 | @method prependLine 147 | @param {String} prependData 148 | @param {String} data 149 | @param {Boolean} prepend 150 | */ 151 | prependLine(prependData, data, prepend) { 152 | if (typeof prepend === 'undefined' || prepend) { 153 | data = prependData + ': ' + data; 154 | } 155 | 156 | return data; 157 | } 158 | 159 | /** 160 | Unified mechanism to an Error to the console. 161 | This will occure at a writeLevel of ERROR 162 | 163 | @method writeError 164 | @param {Error} error 165 | */ 166 | writeError(error) { 167 | const report = writeError(this, error); 168 | if (report === null) { 169 | return; 170 | } 171 | 172 | if (typeof error === 'object' && error !== null && !error.isSilentError) { 173 | if (process.env.CI) { 174 | // In CI mode we print the error details to the console directly 175 | this.writeLine(report, 'ERROR'); 176 | } else { 177 | // In non-CI mode we write the error details to a file that can be read later 178 | const md5 = crypto.createHash('md5').update(report).digest("hex"); 179 | const filepath = `${tmpdir}/error.dump.${md5}.log`; 180 | fs.writeFileSync(filepath, report); 181 | this.writeLine(chalk.red(`\nStack Trace and Error Report: ${filepath}`), 'ERROR'); 182 | } 183 | } 184 | } 185 | 186 | /** 187 | Sets the write level for the UI. Valid write levels are 'DEBUG', 'INFO', 188 | 'WARNING', and 'ERROR'. 189 | 190 | @method setWriteLevel 191 | @param {String} level 192 | */ 193 | setWriteLevel(level) { 194 | if (Object.keys(this.WRITE_LEVELS).indexOf(level) === -1) { 195 | throw new Error('Unknown write level. Valid values are \'DEBUG\', \'INFO\', \'WARNING\', and \'ERROR\'.'); 196 | } 197 | 198 | this.writeLevel = level; 199 | } 200 | 201 | startProgress(message /*, stepString*/) { 202 | if (this.writeLevelVisible('INFO')) { 203 | if (this.ci) { 204 | this.writeLine(message); 205 | } else { 206 | this.progress = true; 207 | this.spinner.text = message; 208 | this.spinner.start(); 209 | } 210 | } 211 | } 212 | 213 | stopProgress() { 214 | this.progress = false; 215 | if (this.writeLevelVisible('INFO') && !this.ci) { 216 | this.spinner.stop(); 217 | } 218 | } 219 | 220 | /** 221 | Launch the prompt interface (inquiry session) with (Array of Questions || Question) 222 | 223 | See [Inquirer.js#question](https://github.com/SBoudrias/Inquirer.js#question) for Question {Object} properties 224 | 225 | @method prompt 226 | @param {Object} questions 227 | @param {Function} [callback] 228 | @return {Promise} 229 | 230 | */ 231 | prompt(questions, callback) { 232 | let inquirer = require('inquirer'); 233 | return inquirer.prompt(questions).then(function (answer) { 234 | if (callback) { 235 | callback(answer); 236 | } 237 | 238 | return answer; 239 | }); 240 | } 241 | /** 242 | Whether or not the specified write level should be printed by this UI. 243 | 244 | @method writeLevelVisible 245 | @private 246 | @param {String} writeLevel 247 | @return {Boolean} 248 | */ 249 | writeLevelVisible(writeLevel) { 250 | let levels = this.WRITE_LEVELS; 251 | writeLevel = writeLevel || DEFAULT_WRITE_LEVEL; 252 | return levels[writeLevel] >= levels[this.writeLevel]; 253 | } 254 | } 255 | 256 | /** 257 | @property WRITE_LEVELS 258 | @private 259 | @type Object 260 | */ 261 | UI.prototype.WRITE_LEVELS = { 262 | 'DEBUG': 1, 263 | 'INFO': 2, 264 | 'WARNING': 3, 265 | 'ERROR': 4 266 | }; 267 | 268 | // Note: You should use `ui.outputStream`, `ui.inputStream` and `ui.write()` 269 | // instead of `process.stdout` and `console.log`. 270 | // Thus the pleasant progress indicator automatically gets 271 | // interrupted and doesn't mess up the output! -> Convenience :P 272 | module.exports = UI; 273 | -------------------------------------------------------------------------------- /lib/mock.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const UI = require('./'); 4 | const through = require('through2'); 5 | 6 | module.exports = class MockUI extends UI { 7 | constructor(options) { 8 | super({ 9 | inputStream: through(), 10 | outputStream: through((data, enc, callback) => { 11 | if (options && options.outputStream) { 12 | options.outputStream.push(data); 13 | } 14 | 15 | this.output += data; 16 | 17 | callback(); 18 | }), 19 | errorStream: through((data, enc, callback) => { 20 | this.errors += data; 21 | 22 | callback(); 23 | }) 24 | }); 25 | 26 | this.output = ''; 27 | this.errors = ''; 28 | this.errorReport = ''; 29 | this.errorLog = options && options.errorLog || []; 30 | } 31 | 32 | clear() { 33 | this.output = ''; 34 | this.errors = ''; 35 | this.errorLog = []; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /lib/summarize-process.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const os = require('os'); 4 | 5 | module.exports = function summarizeProcess(process) { 6 | let PATH = []; 7 | if (process.env && process.env.PATH) { 8 | PATH = process.env.PATH.split(/:/); 9 | } 10 | 11 | return` 12 | TIME: ${new Date()} 13 | TITLE: ${process.title || ''} 14 | ARGV:${arr(process.argv || [])} 15 | EXEC_PATH: ${process.execPath || ''} 16 | TMPDIR: ${os.tmpdir()} 17 | SHELL: ${os.userInfo().shell} 18 | PATH:${arr(PATH)} 19 | PLATFORM: ${process.platform || ''} ${process.arch || ''} 20 | FREEMEM: ${os.freemem()} 21 | TOTALMEM: ${os.totalmem()} 22 | UPTIME: ${os.uptime()} 23 | LOADAVG: ${os.loadavg()} 24 | CPUS:${arr(os.cpus().map(cpu => '' + cpu.model + ' - ' + cpu.speed))} 25 | ENDIANNESS: ${os.endianness()} 26 | VERSIONS:${obj(process.versions)} 27 | `; 28 | } 29 | 30 | module.exports.obj = obj; 31 | function obj(o) { 32 | if (o === undefined) { return ''; } 33 | let depth; 34 | 35 | if (arguments.length < 2) { 36 | depth = 0; 37 | } else { 38 | depth = arguments[1]; 39 | } 40 | 41 | let indent = ' '; 42 | for (let i = 0; i < depth; i++){ 43 | indent += ' '; 44 | } 45 | 46 | let result = Object.keys(o).sort().reduce((acc, key) => { 47 | let value = o[key]; 48 | 49 | if (value === undefined) { 50 | acc += `\n${indent}- ${key}: [undefined]` 51 | return acc; 52 | } else if (value === null) { 53 | acc += `\n${indent}- ${key}: [null]` 54 | return acc; 55 | } 56 | 57 | if (Array.isArray(value)) { 58 | acc += `\n${indent}- ${key}:`; 59 | acc += `${arr(value, depth + 1)}` 60 | } else if (typeof value === 'object') { 61 | acc += `\n${indent}- ${key}:` 62 | acc += obj(value, depth + 1); 63 | } else { 64 | acc += `\n${indent}- ${key}: ${value}`; 65 | } 66 | 67 | return acc; 68 | }, ''); 69 | 70 | if (result === '') { 71 | return `\n${indent}- { }`; 72 | } 73 | return result; 74 | } 75 | 76 | module.exports.arr = arr; 77 | function arr(array) { 78 | let depth = arguments.length < 2 ? ' ' : arguments[1]; 79 | 80 | let indent = ' '; 81 | for (let i = 0; i < depth; i++){ 82 | indent += ' '; 83 | } 84 | return array.reduce((acc, entry) => { 85 | if (typeof entry === 'object') { 86 | if (entry === null) { 87 | acc += `\n${indent}- [null]`; 88 | } else { 89 | acc += `${obj(entry, depth )}`; 90 | } 91 | } else { 92 | acc += `\n${indent}- ${entry}` 93 | } 94 | return acc; 95 | }, ''); 96 | } 97 | 98 | -------------------------------------------------------------------------------- /lib/write-error.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const chalk = require('chalk'); 3 | const fs = require('fs'); 4 | const summarizeProcess = require('./summarize-process'); 5 | 6 | function extractBroccoliError(error) { 7 | let broccoliPayload = error.broccoliPayload || { error: {} }; 8 | let broccoliBuilderError = broccoliPayload.error || {}; 9 | let broccoliNode = broccoliPayload.broccoliNode || {}; 10 | 11 | let defaultLocation = { 12 | file: error.file || error.filename, // Uglify errors have `filename` instead 13 | line: error.line, 14 | column: error.col 15 | }; 16 | 17 | return { 18 | name: error.name, 19 | code: error.code, 20 | message: error.message, 21 | stack: error.stack, 22 | broccoliBuilderErrorStack: broccoliBuilderError.stack, 23 | errorMessage: error.message, 24 | originalErrorMessage: broccoliBuilderError.message, 25 | codeFrame: broccoliBuilderError.codeFrame, 26 | nodeName: broccoliNode.nodeName, 27 | nodeAnnotation: broccoliNode.nodeAnnotation, 28 | errorType: broccoliBuilderError.errorType, 29 | location: broccoliBuilderError.location || defaultLocation 30 | }; 31 | } 32 | 33 | // Removes temp folder path from the file name 34 | function cleanupFileName(fileName) { 35 | if (!fileName) { 36 | return; 37 | } 38 | 39 | let tmpPosition = fileName.indexOf('.tmp/'); 40 | 41 | if (tmpPosition !== -1) { 42 | return fileName.substring(tmpPosition + 5); 43 | } 44 | 45 | return fileName; 46 | } 47 | 48 | module.exports = function writeError(ui, error) { 49 | if (!error) { 50 | return null; 51 | } 52 | 53 | let extracted = extractBroccoliError(error); 54 | let stack = extracted.stack; 55 | let location = extracted.location; 56 | let codeFrame = extracted.codeFrame; 57 | let originalErrorMessage = extracted.originalErrorMessage; 58 | let errorType = extracted.errorType; 59 | let nodeName = extracted.nodeName; 60 | let errorMessage = extracted.errorMessage; 61 | 62 | let fileName = cleanupFileName(location.file); 63 | if (fileName) { 64 | if (location.line) { 65 | fileName += typeof location.column !== 'undefined' 66 | ? ':' + location.line + ':' + location.column 67 | : ':' + location.line; 68 | } 69 | } 70 | 71 | let title = ''; 72 | if (errorType) { 73 | title = errorType 74 | 75 | if (nodeName) { 76 | title += ` (${nodeName})`; 77 | } 78 | } 79 | 80 | if (fileName) { 81 | if (title !== '') { 82 | title += ` in ${fileName}`; 83 | } else { 84 | title = `File: ${fileName}` 85 | } 86 | } 87 | 88 | if (title) { 89 | ui.writeLine(chalk.red(title), 'ERROR'); 90 | ui.writeLine('', 'ERROR'); // Empty line 91 | } 92 | 93 | if (codeFrame) { 94 | if (originalErrorMessage && originalErrorMessage !== codeFrame) { 95 | ui.writeLine(chalk.red(originalErrorMessage), 'ERROR'); 96 | ui.writeLine('', 'ERROR'); // Empty line 97 | } 98 | 99 | ui.writeLine(chalk.red(codeFrame), 'ERROR'); 100 | } else if (errorMessage) { 101 | ui.writeLine(chalk.red(errorMessage), 'ERROR'); 102 | } else { 103 | ui.writeLine(chalk.red(error), 'ERROR'); 104 | } 105 | ui.writeLine('', 'ERROR'); // Empty line 106 | 107 | if (stack) { 108 | ui.writeLine(stack, 'DEBUG'); 109 | } 110 | 111 | return `================================================================================= 112 | 113 | ENV Summary: 114 | ${summarizeProcess(process)} 115 | ERROR Summary: 116 | ${summarizeProcess.obj(extracted)} 117 | 118 | ================================================================================= 119 | `; 120 | } 121 | -------------------------------------------------------------------------------- /mock.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./lib/mock'); 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "console-ui", 3 | "version": "3.1.2", 4 | "description": "common interface for abstracting a console ui", 5 | "homepage": "https://github.com/ember-cli/console-ui#readme", 6 | "bugs": { 7 | "url": "https://github.com/ember-cli/console-ui/issues" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/ember-cli/console-ui.git" 12 | }, 13 | "license": "ISC", 14 | "author": "Stefan Penner ", 15 | "main": "index.js", 16 | "scripts": { 17 | "changelog": "lerna-changelog", 18 | "test": "mocha tests/**/*-test.js", 19 | "test:debug": "mocha debug tests/**/*-test.js" 20 | }, 21 | "dependencies": { 22 | "chalk": "^2.1.0", 23 | "inquirer": "^6", 24 | "json-stable-stringify": "^1.0.1", 25 | "ora": "^3.4.0", 26 | "through2": "^3.0.1" 27 | }, 28 | "devDependencies": { 29 | "chai": "^4.3.4", 30 | "lerna-changelog": "^0.8.3", 31 | "mocha": "^6.2.2" 32 | }, 33 | "engines": { 34 | "node": "6.* || 8.* || >= 10.*" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /tests/helpers/build-error.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = BuildError; 4 | 5 | function BuildError(input) { 6 | Error.call(this); 7 | this.message = input.message; 8 | this.file = input.file; 9 | this.filename = input.filename; // For testing errors from Uglify 10 | this.line = input.line; 11 | this.col = input.col; 12 | this.stack = input.stack; 13 | this.broccoliPayload = input.broccoliPayload; 14 | } 15 | 16 | BuildError.prototype = Object.create(Error.prototype); 17 | -------------------------------------------------------------------------------- /tests/unit/index-test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const expect = require('chai').expect; 4 | const MockUI = require('../../lib/mock'); 5 | const EOL = require('os').EOL; 6 | const chalk = require('chalk'); 7 | const fs = require('fs'); 8 | 9 | function errorLogToReportPath(log) { 10 | return log.match(/([^\s]+error\.dump\.\w+\.log)/)[0]; 11 | } 12 | 13 | describe('UI', function() { 14 | let ui; 15 | 16 | beforeEach(function() { 17 | ui = new MockUI(); 18 | }); 19 | 20 | describe('writeLine', function() { 21 | it('writes normally', function() { 22 | ui.writeLine('foo'); 23 | expect(ui.output).to.equal('foo' + EOL); 24 | }); 25 | 26 | it('writes in the correct chalk', function() { 27 | const message = chalk.gray('foo') 28 | ui.writeLine(message); 29 | expect(ui.output).to.equal(message + EOL); 30 | }); 31 | }); 32 | 33 | 34 | describe('writeErrorLine', function() { 35 | it('writes to error line', function() { 36 | ui.writeErrorLine('foo'); 37 | expect(ui.output).to.equal(''); 38 | expect(ui.errors).to.equal('foo' + EOL); 39 | }); 40 | }); 41 | 42 | describe('writeDebugLine', function() { 43 | it('does not write at the default level', function() { 44 | ui.writeDebugLine('foo'); 45 | expect(ui.output).to.equal(''); 46 | }); 47 | 48 | it('writes in the correct chalk', function() { 49 | ui.writeLevel = 'DEBUG'; 50 | ui.writeDebugLine('foo'); 51 | expect(ui.output).to.equal(chalk.gray('foo') + EOL); 52 | }); 53 | }); 54 | 55 | describe('writeInfoLine', function() { 56 | it('writes in the correct chalk', function() { 57 | ui.writeInfoLine('foo'); 58 | expect(ui.output).to.equal(chalk.cyan('foo') + EOL); 59 | }); 60 | }); 61 | 62 | describe('writeWarningLine', function() { 63 | it('does not write when the test is truthy', function() { 64 | ui.writeWarnLine('foo', true); 65 | expect(ui.errors).to.equal(''); 66 | }); 67 | 68 | it('writes a prepended message when the test is falsy', function() { 69 | ui.writeWarnLine('foo', false); 70 | expect(ui.errors).to.equal(chalk.yellow('WARNING: foo') + EOL); 71 | }); 72 | 73 | it('writes an un-prepended message if prepend is false', function() { 74 | ui.writeWarnLine('foo', false, false); 75 | expect(ui.errors).to.equal(chalk.yellow('foo') + EOL); 76 | }); 77 | 78 | it('writes to errorStream', function() { 79 | ui.writeWarnLine('foo', false, false); 80 | expect(ui.output).to.be.empty; 81 | expect(ui.errors).to.equal(chalk.yellow('foo') + EOL); 82 | }); 83 | }); 84 | 85 | describe('writeDeprecateLine', function() { 86 | it('does not write when the test is truthy', function() { 87 | ui.writeDeprecateLine('foo', true); 88 | expect(ui.errors).to.equal(''); 89 | }); 90 | 91 | it('writes a prepended message when the test is falsy', function() { 92 | ui.writeDeprecateLine('foo', false); 93 | expect(ui.errors).to.equal(chalk.yellow('DEPRECATION: foo') + EOL); 94 | }); 95 | 96 | it('writes an un-prepended message if prepend is false', function() { 97 | ui.writeDeprecateLine('foo', false, false); 98 | expect(ui.errors).to.equal(chalk.yellow('foo') + EOL); 99 | }); 100 | 101 | it('writes to errorStream', function() { 102 | ui.writeDeprecateLine('foo', false, false); 103 | expect(ui.output).to.be.empty; 104 | expect(ui.errors).to.equal(chalk.yellow('foo') + EOL); 105 | }); 106 | }); 107 | 108 | describe('prependLine', function() { 109 | it('prepends the data when prepend is undefined', function() { 110 | let result = ui.prependLine('foo', 'bar'); 111 | expect(result).to.equal('foo: bar'); 112 | }); 113 | 114 | it('prepends the data when prepend is true', function() { 115 | let result = ui.prependLine('foo', 'bar', true); 116 | expect(result).to.equal('foo: bar'); 117 | }); 118 | 119 | it('returns the original data when prepend is falsy (but not undefined)', function() { 120 | let result = ui.prependLine('foo', 'bar', false); 121 | expect(result).to.equal('bar'); 122 | }); 123 | }); 124 | 125 | describe('writeError', function() { 126 | let originalCI; 127 | 128 | beforeEach(function() { 129 | originalCI = process.env.CI; 130 | delete process.env.CI; 131 | }); 132 | 133 | afterEach(function() { 134 | process.env.CI = originalCI; 135 | }); 136 | 137 | it('empty error', function() { 138 | ui.writeError({}); 139 | expect(ui.output).to.eql(''); 140 | expect(ui.errors).to.contain('[object Object]'); 141 | expect(ui.errors).to.contain('Stack Trace and Error Report'); 142 | expect(ui.errors).to.contain('error\.dump\.'); 143 | expect(ui.errorLog).to.deep.eql([]); 144 | 145 | const filepath = errorLogToReportPath(ui.errors); 146 | const report = fs.readFileSync(filepath, 'UTF8') 147 | 148 | expect(report).to.contain('ENV Summary:'); 149 | expect(report).to.contain('ERROR Summary:'); 150 | }); 151 | 152 | it('real error', function() { 153 | ui.writeError(new Error('I AM ERROR MESSAGE')); 154 | expect(ui.output).to.eql(''); 155 | expect(ui.errors).to.contain('I AM ERROR MESSAGE'); 156 | expect(ui.errors).to.contain('Stack Trace and Error Report'); 157 | expect(ui.errors).to.contain('error\.dump\.'); 158 | expect(ui.errorLog).to.deep.eql([]); 159 | 160 | const filepath = errorLogToReportPath(ui.errors); 161 | const report = fs.readFileSync(filepath, 'UTF8') 162 | 163 | expect(report).to.contain('ENV Summary:'); 164 | expect(report).to.contain('ERROR Summary:'); 165 | expect(report).to.contain('I AM ERROR MESSAGE'); 166 | }); 167 | 168 | it('SilentError', function() { 169 | let e = new Error('I AM ERROR MESSAGE'); 170 | e.isSilentError = true; 171 | ui.writeError(e); 172 | expect(ui.output).to.eql(''); 173 | expect(ui.errors).to.contain('I AM ERROR MESSAGE'); 174 | expect(ui.errors).to.not.contain('Stack Trace and Error Report'); 175 | expect(ui.errors).to.not.contain('error\.dump\.'); 176 | expect(ui.errorLog).to.deep.eql([]); 177 | }); 178 | }); 179 | }); 180 | -------------------------------------------------------------------------------- /tests/unit/summarize-process-test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const summarizeProcess = require('../../lib/summarize-process'); 3 | const obj = summarizeProcess.obj; 4 | const expect = require('chai').expect; 5 | 6 | describe('summarizeProcess', function() { 7 | it('acceptance', function() { 8 | const summary = summarizeProcess(process).split(/\n/); 9 | 10 | expect(summary.shift()).to.match(/^$/); 11 | expect(summary.shift()).to.match(/^ TIME: (.*)$/); 12 | expect(summary.shift()).to.match(/^ TITLE: (.*)$/); 13 | expect(summary.shift()).to.match(/^ ARGV:$/); 14 | 15 | for (let x = 0 ; x < process.argv.length; x++) { 16 | expect(summary.shift()).to.match(/^ -.*/); 17 | } 18 | 19 | expect(summary.shift()).to.match(/^ EXEC_PATH: (.*)$/); 20 | expect(summary.shift()).to.match(/^ TMPDIR: (.*)$/); 21 | expect(summary.shift()).to.match(/^ SHELL: (.*)$/); 22 | expect(summary.shift()).to.match(/^ PATH:$/); 23 | 24 | for (let x = 0 ; x < process.env.PATH.split(':').length; x++) { 25 | expect(summary.shift()).to.match(/^ -.*/); 26 | } 27 | 28 | expect(summary.shift()).to.match(/^ PLATFORM: (.*)\s(.*)$/); 29 | expect(summary.shift()).to.match(/^ FREEMEM: \d+$/); 30 | expect(summary.shift()).to.match(/^ TOTALMEM: \d+$/); 31 | expect(summary.shift()).to.match(/^ UPTIME: \d+(\.\d+)?$/); 32 | expect(summary.shift()).to.match(/^ LOADAVG: \d+(\.\d+)?,\d+(\.\d+)?,\d+(\.\d+)?$/); 33 | expect(summary.shift()).to.match(/^ CPUS:$/); 34 | 35 | for (let i = 0; i < require('os').cpus().length; i++) { 36 | expect(summary.shift()).to.match(/^ - (.*)$/); 37 | } 38 | 39 | expect(summary.shift()).to.match(/^ ENDIANNESS: (.*)$/); 40 | expect(summary.shift()).to.match(/^ VERSIONS:$/); 41 | 42 | for (let x = 0 ; x < Object.keys(process.versions).length; x++) { 43 | expect(summary.shift()).to.match(/^ -.*/); 44 | } 45 | expect(summary.shift()).to.match(/^$/); 46 | expect(summary).to.be.empty; 47 | }); 48 | 49 | it('handles an unexpected empty process', function() { 50 | const process = {}; 51 | const summary = summarizeProcess(process).split(/\n/); 52 | // doesn't crash 53 | // 54 | // has expected: "shape" 55 | expect(summary.shift()).to.match(/^$/); 56 | expect(summary.shift()).to.match(/^ TIME: (.*)$/); 57 | expect(summary.shift()).to.match(/^ TITLE: $/); 58 | expect(summary.shift()).to.match(/^ ARGV:$/); 59 | 60 | expect(summary.shift()).to.match(/^ EXEC_PATH: $/); 61 | expect(summary.shift()).to.match(/^ TMPDIR: (.*)$/); 62 | expect(summary.shift()).to.match(/^ SHELL: (.*)$/); 63 | expect(summary.shift()).to.match(/^ PATH:$/); 64 | 65 | expect(summary.shift()).to.match(/^ PLATFORM: $/); 66 | expect(summary.shift()).to.match(/^ FREEMEM: \d+$/); 67 | expect(summary.shift()).to.match(/^ TOTALMEM: \d+$/); 68 | expect(summary.shift()).to.match(/^ UPTIME: \d+(\.\d+)?$/); 69 | expect(summary.shift()).to.match(/^ LOADAVG: \d+(\.\d+)?,\d+(\.\d+)?,\d+(\.\d+)?$/); 70 | expect(summary.shift()).to.match(/^ CPUS:$/); 71 | 72 | for (let i = 0; i < require('os').cpus().length; i++) { 73 | expect(summary.shift()).to.match(/^ - (.*)$/); 74 | } 75 | 76 | expect(summary.shift()).to.match(/^ ENDIANNESS: (.*)$/); 77 | expect(summary.shift()).to.match(/^ VERSIONS:$/); 78 | expect(summary.shift()).to.match(/^$/); 79 | expect(summary).to.be.empty; 80 | }); 81 | 82 | it('handles arch + platform', function() { 83 | const process = {}; 84 | const summary = summarizeProcess({ arch: 'the-arc', platform: 'the-plat'}).split(/\n/); 85 | // doesn't crash 86 | // 87 | // has expected: "shape" 88 | expect(summary.shift()).to.match(/^$/); 89 | expect(summary.shift()).to.match(/^ TIME: (.*)$/); 90 | expect(summary.shift()).to.match(/^ TITLE: $/); 91 | expect(summary.shift()).to.match(/^ ARGV:$/); 92 | 93 | expect(summary.shift()).to.match(/^ EXEC_PATH: $/); 94 | expect(summary.shift()).to.match(/^ TMPDIR: (.*)$/); 95 | expect(summary.shift()).to.match(/^ SHELL: (.*)$/); 96 | expect(summary.shift()).to.match(/^ PATH:$/); 97 | 98 | expect(summary.shift()).to.match(/^ PLATFORM: the-plat the-arc$/); 99 | expect(summary.shift()).to.match(/^ FREEMEM: \d+$/); 100 | expect(summary.shift()).to.match(/^ TOTALMEM: \d+$/); 101 | expect(summary.shift()).to.match(/^ UPTIME: \d+(\.\d+)?$/); 102 | expect(summary.shift()).to.match(/^ LOADAVG: \d+(\.\d+)?,\d+(\.\d+)?,\d+(\.\d+)?$/); 103 | expect(summary.shift()).to.match(/^ CPUS:$/); 104 | 105 | for (let i = 0; i < require('os').cpus().length; i++) { 106 | expect(summary.shift()).to.match(/^ - (.*)$/); 107 | } 108 | 109 | expect(summary.shift()).to.match(/^ ENDIANNESS: (.*)$/); 110 | expect(summary.shift()).to.match(/^ VERSIONS:$/); 111 | expect(summary.shift()).to.match(/^$/); 112 | expect(summary).to.be.empty; 113 | }); 114 | 115 | it('handles versions', function() { 116 | const process = {}; 117 | const summary = summarizeProcess({ 118 | versions: { 119 | o: 1, 120 | my: 2, 121 | gosh: 3, 122 | } 123 | }).split(/\n/); 124 | 125 | expect(summary.shift()).to.match(/^$/); 126 | expect(summary.shift()).to.match(/^ TIME: (.*)$/); 127 | expect(summary.shift()).to.match(/^ TITLE: $/); 128 | expect(summary.shift()).to.match(/^ ARGV:$/); 129 | 130 | expect(summary.shift()).to.match(/^ EXEC_PATH: $/); 131 | expect(summary.shift()).to.match(/^ TMPDIR: (.*)$/); 132 | expect(summary.shift()).to.match(/^ SHELL: (.*)$/); 133 | expect(summary.shift()).to.match(/^ PATH:$/); 134 | 135 | expect(summary.shift()).to.match(/^ PLATFORM: $/); 136 | 137 | expect(summary.shift()).to.match(/^ FREEMEM: \d+$/); 138 | expect(summary.shift()).to.match(/^ TOTALMEM: \d+$/); 139 | expect(summary.shift()).to.match(/^ UPTIME: \d+(\.\d+)?$/); 140 | expect(summary.shift()).to.match(/^ LOADAVG: \d+(\.\d+)?,\d+(\.\d+)?,\d+(\.\d+)?$/); 141 | expect(summary.shift()).to.match(/^ CPUS:$/); 142 | 143 | for (let i = 0; i < require('os').cpus().length; i++) { 144 | expect(summary.shift()).to.match(/^ - (.*)$/); 145 | } 146 | 147 | expect(summary.shift()).to.match(/^ ENDIANNESS: (.*)$/); 148 | 149 | expect(summary.shift()).to.match(/^ VERSIONS:$/); 150 | expect(summary.shift()).to.match(/^ - gosh: 3$/); 151 | expect(summary.shift()).to.match(/^ - my: 2$/); 152 | expect(summary.shift()).to.match(/^ - o: 1$/); 153 | expect(summary.shift()).to.match(/^$/); 154 | expect(summary).to.be.empty; 155 | }); 156 | 157 | it('handles PATH', function() { 158 | const process = {}; 159 | const summary = summarizeProcess({ 160 | env: { 161 | PATH: 'one:two:three' 162 | } 163 | }).split(/\n/); 164 | 165 | expect(summary.shift()).to.match(/^$/); 166 | expect(summary.shift()).to.match(/^ TIME: (.*)$/); 167 | expect(summary.shift()).to.match(/^ TITLE: $/); 168 | expect(summary.shift()).to.match(/^ ARGV:$/); 169 | 170 | expect(summary.shift()).to.match(/^ EXEC_PATH: $/); 171 | expect(summary.shift()).to.match(/^ TMPDIR: (.*)$/); 172 | expect(summary.shift()).to.match(/^ SHELL: (.*)$/); 173 | expect(summary.shift()).to.match(/^ PATH:$/); 174 | expect(summary.shift()).to.match(/^ - one$/); 175 | expect(summary.shift()).to.match(/^ - two$/); 176 | expect(summary.shift()).to.match(/^ - three$/); 177 | 178 | expect(summary.shift()).to.match(/^ PLATFORM: $/); 179 | expect(summary.shift()).to.match(/^ FREEMEM: \d+$/); 180 | expect(summary.shift()).to.match(/^ TOTALMEM: \d+$/); 181 | expect(summary.shift()).to.match(/^ UPTIME: \d+(\.\d+)?$/); 182 | expect(summary.shift()).to.match(/^ LOADAVG: \d+(\.\d+)?,\d+(\.\d+)?,\d+(\.\d+)?$/); 183 | expect(summary.shift()).to.match(/^ CPUS:$/); 184 | 185 | 186 | for (let i = 0; i < require('os').cpus().length; i++) { 187 | expect(summary.shift()).to.match(/^ - (.*)$/); 188 | } 189 | 190 | expect(summary.shift()).to.match(/^ ENDIANNESS: (.*)$/); 191 | 192 | expect(summary.shift()).to.match(/^ VERSIONS:$/); 193 | expect(summary.shift()).to.match(/^$/); 194 | expect(summary).to.be.empty; 195 | }); 196 | 197 | describe('obj', function() { 198 | it('nested obj', function() { 199 | expect(obj({ 200 | nested: { 201 | obj: { 202 | obj: { 203 | obj: { 204 | obj: 2 205 | } 206 | } 207 | } 208 | } 209 | })).to.eql(` 210 | - nested: 211 | - obj: 212 | - obj: 213 | - obj: 214 | - obj: 2` 215 | ); 216 | }); 217 | 218 | it('nested array', function() { 219 | expect(obj({ 220 | obj: { 221 | avalue: [1,2,3, { foo: 1}], 222 | bnested: { 223 | deeper: [1,2,3, { foo: 1}], 224 | }, 225 | } 226 | })).to.eql(` 227 | - obj: 228 | - avalue: 229 | - 1 230 | - 2 231 | - 3 232 | - foo: 1 233 | - bnested: 234 | - deeper: 235 | - 1 236 | - 2 237 | - 3 238 | - foo: 1`); 239 | }); 240 | 241 | it('complex', function() { 242 | expect(obj({ 243 | ARGV: [1,2,3, {}, null], 244 | ENV: null, 245 | title: 'hi', 246 | PATH: 'hi:hi:hi', 247 | nested: { 248 | obj: { 249 | obj: 2, 250 | } 251 | } 252 | })).to.eql(` 253 | - ARGV: 254 | - 1 255 | - 2 256 | - 3 257 | - { } 258 | - [null] 259 | - ENV: [null] 260 | - PATH: hi:hi:hi 261 | - nested: 262 | - obj: 263 | - obj: 2 264 | - title: hi` 265 | ); 266 | }); 267 | }); 268 | }); 269 | 270 | -------------------------------------------------------------------------------- /tests/unit/write-error-test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const expect = require('chai').expect; 4 | const writeError = require('../../lib/write-error'); 5 | const MockUI = require('../../lib/mock'); 6 | const BuildError = require('../helpers/build-error'); 7 | const EOL = require('os').EOL; 8 | const chalk = require('chalk'); 9 | 10 | describe('writeError', function() { 11 | let ui; 12 | 13 | beforeEach(function() { 14 | ui = new MockUI(); 15 | }); 16 | 17 | it('no error', function() { 18 | let report = writeError(ui); 19 | 20 | expect(ui.output).to.equal(''); 21 | expect(ui.errors).to.equal(''); 22 | expect(report).to.equal(null); 23 | }); 24 | 25 | it('error with message', function() { 26 | let report = writeError(ui, new BuildError({ 27 | message: 'build error' 28 | })); 29 | 30 | expect(ui.output).to.equal(''); 31 | expect(ui.errors).to.equal(chalk.red('build error') + EOL + EOL); 32 | 33 | expect(report).to.contain('ENV Summary:'); 34 | expect(report).to.contain('ERROR Summary:'); 35 | expect(report).to.contain('message: build error'); 36 | expect(report).to.contain('stack: [undefined]'); 37 | expect(report).to.contain('TIME: '); 38 | }); 39 | 40 | it('error with stack', function() { 41 | ui.setWriteLevel('DEBUG'); 42 | let report = writeError(ui, new BuildError({ 43 | stack: 'the stack' 44 | })); 45 | 46 | expect(ui.output).to.equal('the stack' + EOL); 47 | expect(ui.errors).to.equal(chalk.red('Error') + EOL + EOL); 48 | expect(report).to.contain('message: [undefined]'); 49 | expect(report).to.contain('stack: the stack'); 50 | }); 51 | 52 | it('error with file', function() { 53 | let report = writeError(ui, new BuildError({ 54 | file: 'the file' 55 | })); 56 | 57 | expect(ui.output).to.equal(''); 58 | expect(ui.errors).to.equal(chalk.red('File: the file') + EOL + EOL + chalk.red('Error') + EOL + EOL); 59 | 60 | expect(report).to.contain('file: the file'); 61 | }); 62 | 63 | it('error with code', function() { 64 | let error = new Error(); 65 | error.code = 'the code'; 66 | let report = writeError(ui, error); 67 | 68 | expect(ui.output).to.equal(''); 69 | expect(ui.errors).to.contain('Error'); 70 | 71 | expect(report).to.contain('code: the code'); 72 | }); 73 | 74 | it('error with filename (as from Uglify)', function() { 75 | let report = writeError(ui, new BuildError({ 76 | filename: 'the file' 77 | })); 78 | 79 | expect(ui.output).to.equal(''); 80 | expect(ui.errors).to.equal(chalk.red('File: the file') + EOL + EOL + chalk.red('Error') + EOL + EOL); 81 | expect(report).to.contain('file: the file'); 82 | }); 83 | 84 | it('error with file + line', function() { 85 | let report = writeError(ui, new BuildError({ 86 | file: 'the file', 87 | line: 'the line' 88 | })); 89 | 90 | expect(ui.output).to.equal(''); 91 | expect(ui.errors).to.equal(chalk.red('File: the file:the line') + EOL + EOL + chalk.red('Error') + EOL + EOL); 92 | expect(report).to.contain('file: the file'); 93 | expect(report).to.contain('line: the line'); 94 | }); 95 | 96 | it('error with file + col', function() { 97 | let report = writeError(ui, new BuildError({ 98 | file: 'the file', 99 | col: 'the col' 100 | })); 101 | 102 | expect(ui.output).to.equal(''); 103 | expect(ui.errors).to.equal(chalk.red('File: the file') + EOL + EOL + chalk.red('Error') + EOL + EOL); 104 | 105 | expect(report).to.contain('file: the file'); 106 | expect(report).to.contain('column: the col'); 107 | }); 108 | 109 | it('error with file + line + col', function() { 110 | let report = writeError(ui, new BuildError({ 111 | file: 'the file', 112 | line: 'the line', 113 | col: 'the col' 114 | })); 115 | 116 | expect(ui.output).to.equal(''); 117 | expect(ui.errors).to.equal(chalk.red('File: the file:the line:the col') + EOL + EOL + chalk.red('Error') + EOL + EOL); 118 | expect(report).to.contain('file: the file'); 119 | expect(report).to.contain('line: the line'); 120 | expect(report).to.contain('column: the col'); 121 | }); 122 | 123 | it('error title: file + line + column + errorType + nodeName', function() { 124 | let report = writeError(ui, new BuildError({ 125 | file: 'index.js', 126 | line: '10', 127 | col: '15', 128 | broccoliPayload: { 129 | broccoliNode: { 130 | nodeName: 'Babel' 131 | }, 132 | error: { 133 | errorType: 'Compile Error' 134 | } 135 | }, 136 | })); 137 | 138 | expect(ui.output).to.equal(''); 139 | expect(ui.errors).to.equal(chalk.red('Compile Error (Babel) in index.js:10:15') + EOL + EOL + chalk.red('Error') + EOL + EOL); 140 | 141 | 142 | expect(report).to.contain('file: index.js'); 143 | expect(report).to.contain('line: 10'); 144 | expect(report).to.contain('column: 15'); 145 | expect(report).to.contain('Babel'); 146 | expect(report).to.contain('Compile Error'); 147 | }); 148 | 149 | it('error title: errorType + nodeName', function() { 150 | let report = writeError(ui, new BuildError({ 151 | broccoliPayload: { 152 | broccoliNode: { 153 | nodeName: 'Babel' 154 | }, 155 | error: { 156 | errorType: 'Compile Error' 157 | } 158 | }, 159 | })); 160 | 161 | expect(ui.output).to.equal(''); 162 | expect(ui.errors).to.equal(chalk.red('Compile Error (Babel)') + EOL + EOL + chalk.red('Error') + EOL + EOL); 163 | 164 | expect(report).to.contain('Babel'); 165 | expect(report).to.contain('Compile Error'); 166 | }); 167 | 168 | it('error title: errorType', function() { 169 | let report = writeError(ui, new BuildError({ 170 | broccoliPayload: { 171 | error: { 172 | errorType: 'Compile Error' 173 | } 174 | }, 175 | })); 176 | 177 | expect(ui.output).to.equal(''); 178 | expect(ui.errors).to.equal(chalk.red('Compile Error') + EOL + EOL + chalk.red('Error') + EOL + EOL); 179 | 180 | expect(report).to.contain('Compile Error'); 181 | }); 182 | 183 | it('error codeFrame', function() { 184 | let report = writeError(ui, new BuildError({ 185 | broccoliPayload: { 186 | error: { 187 | errorType: 'Compile Error', 188 | codeFrame: 'codeFrame' 189 | } 190 | }, 191 | })); 192 | 193 | expect(ui.output).to.equal(''); 194 | expect(ui.errors).to.equal( 195 | chalk.red('Compile Error') + EOL + EOL + 196 | chalk.red('codeFrame') + EOL + EOL); 197 | 198 | expect(report).to.contain('Compile Error'); 199 | expect(report).to.contain('codeFrame'); 200 | }); 201 | 202 | it('error codeFrame with same error message', function() { 203 | let report = writeError(ui, new BuildError({ 204 | broccoliPayload: { 205 | error: { 206 | errorType: 'Compile Error', 207 | codeFrame: 'codeFrame', 208 | message: 'codeFrame' 209 | } 210 | }, 211 | })); 212 | 213 | expect(ui.output).to.equal(''); 214 | expect(ui.errors).to.equal( 215 | chalk.red('Compile Error') + EOL + EOL + 216 | chalk.red('codeFrame') + EOL + EOL); 217 | 218 | expect(report).to.contain('Compile Error'); 219 | expect(report).to.contain('codeFrame'); 220 | }); 221 | 222 | it('error codeFrame with different error message', function() { 223 | let report = writeError(ui, new BuildError({ 224 | broccoliPayload: { 225 | error: { 226 | errorType: 'Compile Error', 227 | codeFrame: 'codeFrame', 228 | message: 'broccoli error message' 229 | } 230 | }, 231 | })); 232 | 233 | expect(ui.output).to.equal(''); 234 | expect(ui.errors).to.equal( 235 | chalk.red('Compile Error') + EOL + EOL + 236 | chalk.red('broccoli error message') + EOL + EOL + 237 | chalk.red('codeFrame') + EOL + EOL); 238 | 239 | expect(report).to.contain('Compile Error'); 240 | expect(report).to.contain('codeFrame'); 241 | expect(report).to.contain('broccoli error message'); 242 | }); 243 | 244 | it('error with no payload', function() { 245 | writeError(ui, new BuildError({ 246 | broccoliPayload: {}, 247 | })); 248 | 249 | expect(ui.output).to.equal(''); 250 | expect(ui.errors).to.equal(chalk.red('Error') + EOL + EOL); 251 | }); 252 | }); 253 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/node@*": 6 | version "10.12.18" 7 | resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" 8 | integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== 9 | 10 | agent-base@4, agent-base@~4.2.0: 11 | version "4.2.1" 12 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" 13 | integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== 14 | dependencies: 15 | es6-promisify "^5.0.0" 16 | 17 | agent-base@^4.3.0: 18 | version "4.3.0" 19 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" 20 | integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== 21 | dependencies: 22 | es6-promisify "^5.0.0" 23 | 24 | agentkeepalive@^3.4.1: 25 | version "3.5.2" 26 | resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" 27 | integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== 28 | dependencies: 29 | humanize-ms "^1.2.1" 30 | 31 | ansi-colors@3.2.3: 32 | version "3.2.3" 33 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" 34 | integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== 35 | 36 | ansi-escapes@^3.2.0: 37 | version "3.2.0" 38 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 39 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== 40 | 41 | ansi-regex@^2.0.0: 42 | version "2.1.1" 43 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 44 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 45 | 46 | ansi-regex@^3.0.0: 47 | version "3.0.0" 48 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 49 | 50 | ansi-regex@^4.1.0: 51 | version "4.1.0" 52 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 53 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 54 | 55 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 56 | version "3.2.1" 57 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 58 | dependencies: 59 | color-convert "^1.9.0" 60 | 61 | any-promise@^1.0.0: 62 | version "1.3.0" 63 | resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" 64 | integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= 65 | 66 | aproba@^1.1.1: 67 | version "1.2.0" 68 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 69 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== 70 | 71 | argparse@^1.0.7: 72 | version "1.0.10" 73 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 74 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 75 | dependencies: 76 | sprintf-js "~1.0.2" 77 | 78 | assertion-error@^1.1.0: 79 | version "1.1.0" 80 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 81 | 82 | balanced-match@^1.0.0: 83 | version "1.0.0" 84 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 85 | 86 | bluebird@^3.5.5: 87 | version "3.7.1" 88 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" 89 | integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== 90 | 91 | brace-expansion@^1.1.7: 92 | version "1.1.8" 93 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 94 | dependencies: 95 | balanced-match "^1.0.0" 96 | concat-map "0.0.1" 97 | 98 | browser-stdout@1.3.1: 99 | version "1.3.1" 100 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 101 | 102 | buffer-from@^1.0.0: 103 | version "1.1.1" 104 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 105 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 106 | 107 | cacache@^12.0.0: 108 | version "12.0.3" 109 | resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" 110 | integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== 111 | dependencies: 112 | bluebird "^3.5.5" 113 | chownr "^1.1.1" 114 | figgy-pudding "^3.5.1" 115 | glob "^7.1.4" 116 | graceful-fs "^4.1.15" 117 | infer-owner "^1.0.3" 118 | lru-cache "^5.1.1" 119 | mississippi "^3.0.0" 120 | mkdirp "^0.5.1" 121 | move-concurrently "^1.0.1" 122 | promise-inflight "^1.0.1" 123 | rimraf "^2.6.3" 124 | ssri "^6.0.1" 125 | unique-filename "^1.1.1" 126 | y18n "^4.0.0" 127 | 128 | camelcase@^4.1.0: 129 | version "4.1.0" 130 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 131 | integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= 132 | 133 | camelcase@^5.0.0: 134 | version "5.0.0" 135 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" 136 | integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== 137 | 138 | chai@^4.3.4: 139 | version "4.3.4" 140 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" 141 | integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== 142 | dependencies: 143 | assertion-error "^1.1.0" 144 | check-error "^1.0.2" 145 | deep-eql "^3.0.1" 146 | get-func-name "^2.0.0" 147 | pathval "^1.1.1" 148 | type-detect "^4.0.5" 149 | 150 | chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: 151 | version "2.4.2" 152 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 153 | dependencies: 154 | ansi-styles "^3.2.1" 155 | escape-string-regexp "^1.0.5" 156 | supports-color "^5.3.0" 157 | 158 | chardet@^0.7.0: 159 | version "0.7.0" 160 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 161 | 162 | check-error@^1.0.2: 163 | version "1.0.2" 164 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 165 | 166 | chownr@^1.1.1: 167 | version "1.1.1" 168 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" 169 | integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== 170 | 171 | cli-cursor@^2.1.0: 172 | version "2.1.0" 173 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 174 | dependencies: 175 | restore-cursor "^2.0.0" 176 | 177 | cli-highlight@^1.2.3: 178 | version "1.2.3" 179 | resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-1.2.3.tgz#b200f97ed0e43d24633e89de0f489a48bb87d2bf" 180 | integrity sha512-cmc4Y2kJuEpT2KZd9pgWWskpDMMfJu2roIcY1Ya/aIItufF5FKsV/NtA6vvdhSUllR8KJfvQDNmIcskU+MKLDg== 181 | dependencies: 182 | chalk "^2.3.0" 183 | highlight.js "^9.6.0" 184 | mz "^2.4.0" 185 | parse5 "^3.0.3" 186 | yargs "^10.0.3" 187 | 188 | cli-spinners@^2.0.0: 189 | version "2.0.0" 190 | resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.0.0.tgz#4b078756fc17a8f72043fdc9f1f14bf4fa87e2df" 191 | integrity sha512-yiEBmhaKPPeBj7wWm4GEdtPZK940p9pl3EANIrnJ3JnvWyrPjcFcsEq6qRUuQ7fzB0+Y82ld3p6B34xo95foWw== 192 | 193 | cli-width@^2.0.0: 194 | version "2.2.0" 195 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 196 | 197 | cliui@^4.0.0: 198 | version "4.1.0" 199 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" 200 | integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== 201 | dependencies: 202 | string-width "^2.1.1" 203 | strip-ansi "^4.0.0" 204 | wrap-ansi "^2.0.0" 205 | 206 | cliui@^5.0.0: 207 | version "5.0.0" 208 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 209 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 210 | dependencies: 211 | string-width "^3.1.0" 212 | strip-ansi "^5.2.0" 213 | wrap-ansi "^5.1.0" 214 | 215 | clone@^1.0.2: 216 | version "1.0.3" 217 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" 218 | 219 | code-point-at@^1.0.0: 220 | version "1.1.0" 221 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 222 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 223 | 224 | color-convert@^1.9.0: 225 | version "1.9.0" 226 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" 227 | dependencies: 228 | color-name "^1.1.1" 229 | 230 | color-name@^1.1.1: 231 | version "1.1.3" 232 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 233 | 234 | concat-map@0.0.1: 235 | version "0.0.1" 236 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 237 | 238 | concat-stream@^1.5.0: 239 | version "1.6.2" 240 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 241 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== 242 | dependencies: 243 | buffer-from "^1.0.0" 244 | inherits "^2.0.3" 245 | readable-stream "^2.2.2" 246 | typedarray "^0.0.6" 247 | 248 | copy-concurrently@^1.0.0: 249 | version "1.0.5" 250 | resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" 251 | integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== 252 | dependencies: 253 | aproba "^1.1.1" 254 | fs-write-stream-atomic "^1.0.8" 255 | iferr "^0.1.5" 256 | mkdirp "^0.5.1" 257 | rimraf "^2.5.4" 258 | run-queue "^1.0.0" 259 | 260 | core-util-is@~1.0.0: 261 | version "1.0.2" 262 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 263 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 264 | 265 | cross-spawn@^5.0.1: 266 | version "5.1.0" 267 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 268 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 269 | dependencies: 270 | lru-cache "^4.0.1" 271 | shebang-command "^1.2.0" 272 | which "^1.2.9" 273 | 274 | cross-spawn@^6.0.0: 275 | version "6.0.5" 276 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 277 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 278 | dependencies: 279 | nice-try "^1.0.4" 280 | path-key "^2.0.1" 281 | semver "^5.5.0" 282 | shebang-command "^1.2.0" 283 | which "^1.2.9" 284 | 285 | cyclist@~0.2.2: 286 | version "0.2.2" 287 | resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" 288 | integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= 289 | 290 | debug@3.1.0: 291 | version "3.1.0" 292 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 293 | dependencies: 294 | ms "2.0.0" 295 | 296 | debug@3.2.6, debug@^3.1.0: 297 | version "3.2.6" 298 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 299 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 300 | dependencies: 301 | ms "^2.1.1" 302 | 303 | decamelize@^1.1.1, decamelize@^1.2.0: 304 | version "1.2.0" 305 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 306 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 307 | 308 | deep-eql@^3.0.1: 309 | version "3.0.1" 310 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 311 | dependencies: 312 | type-detect "^4.0.0" 313 | 314 | defaults@^1.0.3: 315 | version "1.0.3" 316 | resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" 317 | dependencies: 318 | clone "^1.0.2" 319 | 320 | define-properties@^1.1.2: 321 | version "1.1.3" 322 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 323 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 324 | dependencies: 325 | object-keys "^1.0.12" 326 | 327 | diff@3.5.0: 328 | version "3.5.0" 329 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 330 | 331 | duplexify@^3.4.2, duplexify@^3.6.0: 332 | version "3.6.1" 333 | resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" 334 | integrity sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA== 335 | dependencies: 336 | end-of-stream "^1.0.0" 337 | inherits "^2.0.1" 338 | readable-stream "^2.0.0" 339 | stream-shift "^1.0.0" 340 | 341 | emoji-regex@^7.0.1: 342 | version "7.0.3" 343 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 344 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 345 | 346 | encoding@^0.1.11: 347 | version "0.1.12" 348 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 349 | integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= 350 | dependencies: 351 | iconv-lite "~0.4.13" 352 | 353 | end-of-stream@^1.0.0, end-of-stream@^1.1.0: 354 | version "1.4.1" 355 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 356 | integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== 357 | dependencies: 358 | once "^1.4.0" 359 | 360 | err-code@^1.0.0: 361 | version "1.1.2" 362 | resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" 363 | integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= 364 | 365 | es-abstract@^1.5.1: 366 | version "1.13.0" 367 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" 368 | integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== 369 | dependencies: 370 | es-to-primitive "^1.2.0" 371 | function-bind "^1.1.1" 372 | has "^1.0.3" 373 | is-callable "^1.1.4" 374 | is-regex "^1.0.4" 375 | object-keys "^1.0.12" 376 | 377 | es-to-primitive@^1.2.0: 378 | version "1.2.0" 379 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" 380 | integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== 381 | dependencies: 382 | is-callable "^1.1.4" 383 | is-date-object "^1.0.1" 384 | is-symbol "^1.0.2" 385 | 386 | es6-promise@^4.0.3: 387 | version "4.2.5" 388 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054" 389 | integrity sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg== 390 | 391 | es6-promisify@^5.0.0: 392 | version "5.0.0" 393 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" 394 | integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= 395 | dependencies: 396 | es6-promise "^4.0.3" 397 | 398 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: 399 | version "1.0.5" 400 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 401 | 402 | esprima@^4.0.0: 403 | version "4.0.1" 404 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 405 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 406 | 407 | execa@^0.7.0: 408 | version "0.7.0" 409 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 410 | integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= 411 | dependencies: 412 | cross-spawn "^5.0.1" 413 | get-stream "^3.0.0" 414 | is-stream "^1.1.0" 415 | npm-run-path "^2.0.0" 416 | p-finally "^1.0.0" 417 | signal-exit "^3.0.0" 418 | strip-eof "^1.0.0" 419 | 420 | execa@^1.0.0: 421 | version "1.0.0" 422 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" 423 | integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== 424 | dependencies: 425 | cross-spawn "^6.0.0" 426 | get-stream "^4.0.0" 427 | is-stream "^1.1.0" 428 | npm-run-path "^2.0.0" 429 | p-finally "^1.0.0" 430 | signal-exit "^3.0.0" 431 | strip-eof "^1.0.0" 432 | 433 | external-editor@^3.0.3: 434 | version "3.0.3" 435 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" 436 | integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== 437 | dependencies: 438 | chardet "^0.7.0" 439 | iconv-lite "^0.4.24" 440 | tmp "^0.0.33" 441 | 442 | figgy-pudding@^3.5.1: 443 | version "3.5.2" 444 | resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" 445 | integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== 446 | 447 | figures@^2.0.0: 448 | version "2.0.0" 449 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 450 | dependencies: 451 | escape-string-regexp "^1.0.5" 452 | 453 | find-up@3.0.0, find-up@^3.0.0: 454 | version "3.0.0" 455 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 456 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 457 | dependencies: 458 | locate-path "^3.0.0" 459 | 460 | find-up@^2.1.0: 461 | version "2.1.0" 462 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 463 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 464 | dependencies: 465 | locate-path "^2.0.0" 466 | 467 | flat@^4.1.0: 468 | version "4.1.0" 469 | resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" 470 | integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== 471 | dependencies: 472 | is-buffer "~2.0.3" 473 | 474 | flush-write-stream@^1.0.0: 475 | version "1.0.3" 476 | resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" 477 | integrity sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw== 478 | dependencies: 479 | inherits "^2.0.1" 480 | readable-stream "^2.0.4" 481 | 482 | from2@^2.1.0: 483 | version "2.3.0" 484 | resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" 485 | integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= 486 | dependencies: 487 | inherits "^2.0.1" 488 | readable-stream "^2.0.0" 489 | 490 | fs-write-stream-atomic@^1.0.8: 491 | version "1.0.10" 492 | resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" 493 | integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= 494 | dependencies: 495 | graceful-fs "^4.1.2" 496 | iferr "^0.1.5" 497 | imurmurhash "^0.1.4" 498 | readable-stream "1 || 2" 499 | 500 | fs.realpath@^1.0.0: 501 | version "1.0.0" 502 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 503 | 504 | function-bind@^1.1.1: 505 | version "1.1.1" 506 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 507 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 508 | 509 | get-caller-file@^1.0.1: 510 | version "1.0.3" 511 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" 512 | integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== 513 | 514 | get-caller-file@^2.0.1: 515 | version "2.0.5" 516 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 517 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 518 | 519 | get-func-name@^2.0.0: 520 | version "2.0.0" 521 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 522 | 523 | get-stream@^3.0.0: 524 | version "3.0.0" 525 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 526 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 527 | 528 | get-stream@^4.0.0: 529 | version "4.1.0" 530 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 531 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 532 | dependencies: 533 | pump "^3.0.0" 534 | 535 | glob@7.1.3, glob@^7.1.3: 536 | version "7.1.3" 537 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 538 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 539 | dependencies: 540 | fs.realpath "^1.0.0" 541 | inflight "^1.0.4" 542 | inherits "2" 543 | minimatch "^3.0.4" 544 | once "^1.3.0" 545 | path-is-absolute "^1.0.0" 546 | 547 | glob@^7.1.4: 548 | version "7.1.6" 549 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 550 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 551 | dependencies: 552 | fs.realpath "^1.0.0" 553 | inflight "^1.0.4" 554 | inherits "2" 555 | minimatch "^3.0.4" 556 | once "^1.3.0" 557 | path-is-absolute "^1.0.0" 558 | 559 | graceful-fs@^4.1.15, graceful-fs@^4.1.2: 560 | version "4.1.15" 561 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" 562 | integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== 563 | 564 | growl@1.10.5: 565 | version "1.10.5" 566 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 567 | 568 | has-flag@^3.0.0: 569 | version "3.0.0" 570 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 571 | 572 | has-symbols@^1.0.0: 573 | version "1.0.0" 574 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" 575 | integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= 576 | 577 | has@^1.0.1, has@^1.0.3: 578 | version "1.0.3" 579 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 580 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 581 | dependencies: 582 | function-bind "^1.1.1" 583 | 584 | he@1.2.0: 585 | version "1.2.0" 586 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 587 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 588 | 589 | highlight.js@^9.6.0: 590 | version "9.18.5" 591 | resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.5.tgz#d18a359867f378c138d6819edfc2a8acd5f29825" 592 | integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA== 593 | 594 | http-cache-semantics@^3.8.1: 595 | version "3.8.1" 596 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" 597 | integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== 598 | 599 | http-proxy-agent@^2.1.0: 600 | version "2.1.0" 601 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" 602 | integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== 603 | dependencies: 604 | agent-base "4" 605 | debug "3.1.0" 606 | 607 | https-proxy-agent@^2.2.3: 608 | version "2.2.4" 609 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" 610 | integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== 611 | dependencies: 612 | agent-base "^4.3.0" 613 | debug "^3.1.0" 614 | 615 | humanize-ms@^1.2.1: 616 | version "1.2.1" 617 | resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" 618 | integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= 619 | dependencies: 620 | ms "^2.0.0" 621 | 622 | iconv-lite@^0.4.24, iconv-lite@~0.4.13: 623 | version "0.4.24" 624 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 625 | dependencies: 626 | safer-buffer ">= 2.1.2 < 3" 627 | 628 | iferr@^0.1.5: 629 | version "0.1.5" 630 | resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" 631 | integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= 632 | 633 | imurmurhash@^0.1.4: 634 | version "0.1.4" 635 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 636 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 637 | 638 | infer-owner@^1.0.3: 639 | version "1.0.4" 640 | resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" 641 | integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== 642 | 643 | inflight@^1.0.4: 644 | version "1.0.6" 645 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 646 | dependencies: 647 | once "^1.3.0" 648 | wrappy "1" 649 | 650 | inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: 651 | version "2.0.3" 652 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 653 | 654 | inquirer@^6: 655 | version "6.5.0" 656 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" 657 | integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== 658 | dependencies: 659 | ansi-escapes "^3.2.0" 660 | chalk "^2.4.2" 661 | cli-cursor "^2.1.0" 662 | cli-width "^2.0.0" 663 | external-editor "^3.0.3" 664 | figures "^2.0.0" 665 | lodash "^4.17.12" 666 | mute-stream "0.0.7" 667 | run-async "^2.2.0" 668 | rxjs "^6.4.0" 669 | string-width "^2.1.0" 670 | strip-ansi "^5.1.0" 671 | through "^2.3.6" 672 | 673 | invert-kv@^1.0.0: 674 | version "1.0.0" 675 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 676 | integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= 677 | 678 | ip@^1.1.5: 679 | version "1.1.5" 680 | resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" 681 | integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= 682 | 683 | is-buffer@~2.0.3: 684 | version "2.0.3" 685 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" 686 | integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== 687 | 688 | is-callable@^1.1.4: 689 | version "1.1.4" 690 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 691 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== 692 | 693 | is-date-object@^1.0.1: 694 | version "1.0.1" 695 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 696 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= 697 | 698 | is-fullwidth-code-point@^1.0.0: 699 | version "1.0.0" 700 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 701 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 702 | dependencies: 703 | number-is-nan "^1.0.0" 704 | 705 | is-fullwidth-code-point@^2.0.0: 706 | version "2.0.0" 707 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 708 | 709 | is-promise@^2.1.0: 710 | version "2.1.0" 711 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 712 | 713 | is-regex@^1.0.4: 714 | version "1.0.4" 715 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 716 | integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= 717 | dependencies: 718 | has "^1.0.1" 719 | 720 | is-stream@^1.1.0: 721 | version "1.1.0" 722 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 723 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 724 | 725 | is-symbol@^1.0.2: 726 | version "1.0.2" 727 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" 728 | integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== 729 | dependencies: 730 | has-symbols "^1.0.0" 731 | 732 | isarray@~1.0.0: 733 | version "1.0.0" 734 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 735 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 736 | 737 | isexe@^2.0.0: 738 | version "2.0.0" 739 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 740 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 741 | 742 | js-yaml@3.13.1: 743 | version "3.13.1" 744 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 745 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 746 | dependencies: 747 | argparse "^1.0.7" 748 | esprima "^4.0.0" 749 | 750 | json-parse-better-errors@^1.0.0: 751 | version "1.0.2" 752 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 753 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 754 | 755 | json-stable-stringify@^1.0.1: 756 | version "1.0.1" 757 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 758 | dependencies: 759 | jsonify "~0.0.0" 760 | 761 | jsonify@~0.0.0: 762 | version "0.0.0" 763 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 764 | 765 | lcid@^1.0.0: 766 | version "1.0.0" 767 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 768 | integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= 769 | dependencies: 770 | invert-kv "^1.0.0" 771 | 772 | lerna-changelog@^0.8.3: 773 | version "0.8.3" 774 | resolved "https://registry.yarnpkg.com/lerna-changelog/-/lerna-changelog-0.8.3.tgz#6aa494d7b486c27e8d5b5814a2b588f6e4b24aef" 775 | integrity sha512-0xRxR/J10cBdek2RjG+4eOpYr5UgxcHQr6BEXzPxQu4U7AD5k6ETU1S5QDyHel/lfSmTlwEEwWOqE4LBekFvAA== 776 | dependencies: 777 | chalk "^2.4.1" 778 | cli-highlight "^1.2.3" 779 | execa "^1.0.0" 780 | make-fetch-happen "^5.0.0" 781 | normalize-git-url "^3.0.2" 782 | p-map "^2.1.0" 783 | progress "^2.0.0" 784 | yargs "^11.0.0" 785 | 786 | locate-path@^2.0.0: 787 | version "2.0.0" 788 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 789 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 790 | dependencies: 791 | p-locate "^2.0.0" 792 | path-exists "^3.0.0" 793 | 794 | locate-path@^3.0.0: 795 | version "3.0.0" 796 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 797 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 798 | dependencies: 799 | p-locate "^3.0.0" 800 | path-exists "^3.0.0" 801 | 802 | lodash@^4.17.12, lodash@^4.17.15: 803 | version "4.17.21" 804 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 805 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 806 | 807 | log-symbols@2.2.0, log-symbols@^2.2.0: 808 | version "2.2.0" 809 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" 810 | dependencies: 811 | chalk "^2.0.1" 812 | 813 | lru-cache@^4.0.1: 814 | version "4.1.5" 815 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 816 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 817 | dependencies: 818 | pseudomap "^1.0.2" 819 | yallist "^2.1.2" 820 | 821 | lru-cache@^5.1.1: 822 | version "5.1.1" 823 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 824 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 825 | dependencies: 826 | yallist "^3.0.2" 827 | 828 | make-fetch-happen@^5.0.0: 829 | version "5.0.1" 830 | resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.1.tgz#fac65400ab5f7a9c001862a3e9b0f417f0840175" 831 | integrity sha512-b4dfaMvUDR67zxUq1+GN7Ke9rH5WvGRmoHuMH7l+gmUCR2tCXFP6mpeJ9Dp+jB6z8mShRopSf1vLRBhRs8Cu5w== 832 | dependencies: 833 | agentkeepalive "^3.4.1" 834 | cacache "^12.0.0" 835 | http-cache-semantics "^3.8.1" 836 | http-proxy-agent "^2.1.0" 837 | https-proxy-agent "^2.2.3" 838 | lru-cache "^5.1.1" 839 | mississippi "^3.0.0" 840 | node-fetch-npm "^2.0.2" 841 | promise-retry "^1.1.1" 842 | socks-proxy-agent "^4.0.0" 843 | ssri "^6.0.0" 844 | 845 | mem@^1.1.0: 846 | version "1.1.0" 847 | resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" 848 | integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= 849 | dependencies: 850 | mimic-fn "^1.0.0" 851 | 852 | mimic-fn@^1.0.0: 853 | version "1.1.0" 854 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" 855 | 856 | minimatch@3.0.4, minimatch@^3.0.4: 857 | version "3.0.4" 858 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 859 | dependencies: 860 | brace-expansion "^1.1.7" 861 | 862 | minimist@0.0.8: 863 | version "0.0.8" 864 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 865 | 866 | mississippi@^3.0.0: 867 | version "3.0.0" 868 | resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" 869 | integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== 870 | dependencies: 871 | concat-stream "^1.5.0" 872 | duplexify "^3.4.2" 873 | end-of-stream "^1.1.0" 874 | flush-write-stream "^1.0.0" 875 | from2 "^2.1.0" 876 | parallel-transform "^1.1.0" 877 | pump "^3.0.0" 878 | pumpify "^1.3.3" 879 | stream-each "^1.1.0" 880 | through2 "^2.0.0" 881 | 882 | mkdirp@0.5.1, mkdirp@^0.5.1: 883 | version "0.5.1" 884 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 885 | dependencies: 886 | minimist "0.0.8" 887 | 888 | mocha@^6.2.2: 889 | version "6.2.2" 890 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.2.tgz#5d8987e28940caf8957a7d7664b910dc5b2fea20" 891 | integrity sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A== 892 | dependencies: 893 | ansi-colors "3.2.3" 894 | browser-stdout "1.3.1" 895 | debug "3.2.6" 896 | diff "3.5.0" 897 | escape-string-regexp "1.0.5" 898 | find-up "3.0.0" 899 | glob "7.1.3" 900 | growl "1.10.5" 901 | he "1.2.0" 902 | js-yaml "3.13.1" 903 | log-symbols "2.2.0" 904 | minimatch "3.0.4" 905 | mkdirp "0.5.1" 906 | ms "2.1.1" 907 | node-environment-flags "1.0.5" 908 | object.assign "4.1.0" 909 | strip-json-comments "2.0.1" 910 | supports-color "6.0.0" 911 | which "1.3.1" 912 | wide-align "1.1.3" 913 | yargs "13.3.0" 914 | yargs-parser "13.1.1" 915 | yargs-unparser "1.6.0" 916 | 917 | move-concurrently@^1.0.1: 918 | version "1.0.1" 919 | resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" 920 | integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= 921 | dependencies: 922 | aproba "^1.1.1" 923 | copy-concurrently "^1.0.0" 924 | fs-write-stream-atomic "^1.0.8" 925 | mkdirp "^0.5.1" 926 | rimraf "^2.5.4" 927 | run-queue "^1.0.3" 928 | 929 | ms@2.0.0: 930 | version "2.0.0" 931 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 932 | 933 | ms@2.1.1, ms@^2.0.0, ms@^2.1.1: 934 | version "2.1.1" 935 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 936 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 937 | 938 | mute-stream@0.0.7: 939 | version "0.0.7" 940 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 941 | 942 | mz@^2.4.0: 943 | version "2.7.0" 944 | resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" 945 | integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== 946 | dependencies: 947 | any-promise "^1.0.0" 948 | object-assign "^4.0.1" 949 | thenify-all "^1.0.0" 950 | 951 | nice-try@^1.0.4: 952 | version "1.0.5" 953 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 954 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 955 | 956 | node-environment-flags@1.0.5: 957 | version "1.0.5" 958 | resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" 959 | integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== 960 | dependencies: 961 | object.getownpropertydescriptors "^2.0.3" 962 | semver "^5.7.0" 963 | 964 | node-fetch-npm@^2.0.2: 965 | version "2.0.2" 966 | resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" 967 | integrity sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw== 968 | dependencies: 969 | encoding "^0.1.11" 970 | json-parse-better-errors "^1.0.0" 971 | safe-buffer "^5.1.1" 972 | 973 | normalize-git-url@^3.0.2: 974 | version "3.0.2" 975 | resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4" 976 | integrity sha1-jl8Uvgva7bc+ByADEKpBbCc1D8Q= 977 | 978 | npm-run-path@^2.0.0: 979 | version "2.0.2" 980 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 981 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 982 | dependencies: 983 | path-key "^2.0.0" 984 | 985 | number-is-nan@^1.0.0: 986 | version "1.0.1" 987 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 988 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 989 | 990 | object-assign@^4.0.1: 991 | version "4.1.1" 992 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 993 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 994 | 995 | object-keys@^1.0.11: 996 | version "1.1.0" 997 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" 998 | integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== 999 | 1000 | object-keys@^1.0.12: 1001 | version "1.0.12" 1002 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" 1003 | integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== 1004 | 1005 | object.assign@4.1.0: 1006 | version "4.1.0" 1007 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 1008 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 1009 | dependencies: 1010 | define-properties "^1.1.2" 1011 | function-bind "^1.1.1" 1012 | has-symbols "^1.0.0" 1013 | object-keys "^1.0.11" 1014 | 1015 | object.getownpropertydescriptors@^2.0.3: 1016 | version "2.0.3" 1017 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" 1018 | integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= 1019 | dependencies: 1020 | define-properties "^1.1.2" 1021 | es-abstract "^1.5.1" 1022 | 1023 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1024 | version "1.4.0" 1025 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1026 | dependencies: 1027 | wrappy "1" 1028 | 1029 | onetime@^2.0.0: 1030 | version "2.0.1" 1031 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 1032 | dependencies: 1033 | mimic-fn "^1.0.0" 1034 | 1035 | ora@^3.4.0: 1036 | version "3.4.0" 1037 | resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" 1038 | integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== 1039 | dependencies: 1040 | chalk "^2.4.2" 1041 | cli-cursor "^2.1.0" 1042 | cli-spinners "^2.0.0" 1043 | log-symbols "^2.2.0" 1044 | strip-ansi "^5.2.0" 1045 | wcwidth "^1.0.1" 1046 | 1047 | os-locale@^2.0.0: 1048 | version "2.1.0" 1049 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" 1050 | integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== 1051 | dependencies: 1052 | execa "^0.7.0" 1053 | lcid "^1.0.0" 1054 | mem "^1.1.0" 1055 | 1056 | os-tmpdir@~1.0.2: 1057 | version "1.0.2" 1058 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1059 | 1060 | p-finally@^1.0.0: 1061 | version "1.0.0" 1062 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1063 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 1064 | 1065 | p-limit@^1.1.0: 1066 | version "1.3.0" 1067 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 1068 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 1069 | dependencies: 1070 | p-try "^1.0.0" 1071 | 1072 | p-limit@^2.0.0: 1073 | version "2.1.0" 1074 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.1.0.tgz#1d5a0d20fb12707c758a655f6bbc4386b5930d68" 1075 | integrity sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g== 1076 | dependencies: 1077 | p-try "^2.0.0" 1078 | 1079 | p-locate@^2.0.0: 1080 | version "2.0.0" 1081 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1082 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 1083 | dependencies: 1084 | p-limit "^1.1.0" 1085 | 1086 | p-locate@^3.0.0: 1087 | version "3.0.0" 1088 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1089 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1090 | dependencies: 1091 | p-limit "^2.0.0" 1092 | 1093 | p-map@^2.1.0: 1094 | version "2.1.0" 1095 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" 1096 | integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== 1097 | 1098 | p-try@^1.0.0: 1099 | version "1.0.0" 1100 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 1101 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 1102 | 1103 | p-try@^2.0.0: 1104 | version "2.0.0" 1105 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" 1106 | integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== 1107 | 1108 | parallel-transform@^1.1.0: 1109 | version "1.1.0" 1110 | resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" 1111 | integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= 1112 | dependencies: 1113 | cyclist "~0.2.2" 1114 | inherits "^2.0.3" 1115 | readable-stream "^2.1.5" 1116 | 1117 | parse5@^3.0.3: 1118 | version "3.0.3" 1119 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" 1120 | integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== 1121 | dependencies: 1122 | "@types/node" "*" 1123 | 1124 | path-exists@^3.0.0: 1125 | version "3.0.0" 1126 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1127 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1128 | 1129 | path-is-absolute@^1.0.0: 1130 | version "1.0.1" 1131 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1132 | 1133 | path-key@^2.0.0, path-key@^2.0.1: 1134 | version "2.0.1" 1135 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1136 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 1137 | 1138 | pathval@^1.1.1: 1139 | version "1.1.1" 1140 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" 1141 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 1142 | 1143 | process-nextick-args@~2.0.0: 1144 | version "2.0.0" 1145 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 1146 | integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== 1147 | 1148 | progress@^2.0.0: 1149 | version "2.0.3" 1150 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1151 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1152 | 1153 | promise-inflight@^1.0.1: 1154 | version "1.0.1" 1155 | resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" 1156 | integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= 1157 | 1158 | promise-retry@^1.1.1: 1159 | version "1.1.1" 1160 | resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" 1161 | integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= 1162 | dependencies: 1163 | err-code "^1.0.0" 1164 | retry "^0.10.0" 1165 | 1166 | pseudomap@^1.0.2: 1167 | version "1.0.2" 1168 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1169 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 1170 | 1171 | pump@^2.0.0: 1172 | version "2.0.1" 1173 | resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" 1174 | integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== 1175 | dependencies: 1176 | end-of-stream "^1.1.0" 1177 | once "^1.3.1" 1178 | 1179 | pump@^3.0.0: 1180 | version "3.0.0" 1181 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1182 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1183 | dependencies: 1184 | end-of-stream "^1.1.0" 1185 | once "^1.3.1" 1186 | 1187 | pumpify@^1.3.3: 1188 | version "1.5.1" 1189 | resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" 1190 | integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== 1191 | dependencies: 1192 | duplexify "^3.6.0" 1193 | inherits "^2.0.3" 1194 | pump "^2.0.0" 1195 | 1196 | "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@~2.3.6: 1197 | version "2.3.6" 1198 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 1199 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 1200 | dependencies: 1201 | core-util-is "~1.0.0" 1202 | inherits "~2.0.3" 1203 | isarray "~1.0.0" 1204 | process-nextick-args "~2.0.0" 1205 | safe-buffer "~5.1.1" 1206 | string_decoder "~1.1.1" 1207 | util-deprecate "~1.0.1" 1208 | 1209 | "readable-stream@2 || 3": 1210 | version "3.2.0" 1211 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d" 1212 | integrity sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw== 1213 | dependencies: 1214 | inherits "^2.0.3" 1215 | string_decoder "^1.1.1" 1216 | util-deprecate "^1.0.1" 1217 | 1218 | require-directory@^2.1.1: 1219 | version "2.1.1" 1220 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1221 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1222 | 1223 | require-main-filename@^1.0.1: 1224 | version "1.0.1" 1225 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 1226 | integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= 1227 | 1228 | require-main-filename@^2.0.0: 1229 | version "2.0.0" 1230 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1231 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1232 | 1233 | restore-cursor@^2.0.0: 1234 | version "2.0.0" 1235 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 1236 | dependencies: 1237 | onetime "^2.0.0" 1238 | signal-exit "^3.0.2" 1239 | 1240 | retry@^0.10.0: 1241 | version "0.10.1" 1242 | resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" 1243 | integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= 1244 | 1245 | rimraf@^2.5.4: 1246 | version "2.6.3" 1247 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1248 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1249 | dependencies: 1250 | glob "^7.1.3" 1251 | 1252 | rimraf@^2.6.3: 1253 | version "2.7.1" 1254 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 1255 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 1256 | dependencies: 1257 | glob "^7.1.3" 1258 | 1259 | run-async@^2.2.0: 1260 | version "2.3.0" 1261 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 1262 | dependencies: 1263 | is-promise "^2.1.0" 1264 | 1265 | run-queue@^1.0.0, run-queue@^1.0.3: 1266 | version "1.0.3" 1267 | resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" 1268 | integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= 1269 | dependencies: 1270 | aproba "^1.1.1" 1271 | 1272 | rxjs@^6.4.0: 1273 | version "6.4.0" 1274 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" 1275 | integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw== 1276 | dependencies: 1277 | tslib "^1.9.0" 1278 | 1279 | safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1280 | version "5.1.2" 1281 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1282 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1283 | 1284 | "safer-buffer@>= 2.1.2 < 3": 1285 | version "2.1.2" 1286 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1287 | 1288 | semver@^5.5.0: 1289 | version "5.6.0" 1290 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" 1291 | integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== 1292 | 1293 | semver@^5.7.0: 1294 | version "5.7.0" 1295 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" 1296 | integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== 1297 | 1298 | set-blocking@^2.0.0: 1299 | version "2.0.0" 1300 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1301 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1302 | 1303 | shebang-command@^1.2.0: 1304 | version "1.2.0" 1305 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1306 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1307 | dependencies: 1308 | shebang-regex "^1.0.0" 1309 | 1310 | shebang-regex@^1.0.0: 1311 | version "1.0.0" 1312 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1313 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1314 | 1315 | signal-exit@^3.0.0, signal-exit@^3.0.2: 1316 | version "3.0.2" 1317 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1318 | 1319 | smart-buffer@^4.0.1: 1320 | version "4.0.1" 1321 | resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.1.tgz#07ea1ca8d4db24eb4cac86537d7d18995221ace3" 1322 | integrity sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg== 1323 | 1324 | socks-proxy-agent@^4.0.0: 1325 | version "4.0.1" 1326 | resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz#5936bf8b707a993079c6f37db2091821bffa6473" 1327 | integrity sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw== 1328 | dependencies: 1329 | agent-base "~4.2.0" 1330 | socks "~2.2.0" 1331 | 1332 | socks@~2.2.0: 1333 | version "2.2.2" 1334 | resolved "https://registry.yarnpkg.com/socks/-/socks-2.2.2.tgz#f061219fc2d4d332afb4af93e865c84d3fa26e2b" 1335 | integrity sha512-g6wjBnnMOZpE0ym6e0uHSddz9p3a+WsBaaYQaBaSCJYvrC4IXykQR9MNGjLQf38e9iIIhp3b1/Zk8YZI3KGJ0Q== 1336 | dependencies: 1337 | ip "^1.1.5" 1338 | smart-buffer "^4.0.1" 1339 | 1340 | sprintf-js@~1.0.2: 1341 | version "1.0.3" 1342 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1343 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1344 | 1345 | ssri@^6.0.0, ssri@^6.0.1: 1346 | version "6.0.2" 1347 | resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" 1348 | integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== 1349 | dependencies: 1350 | figgy-pudding "^3.5.1" 1351 | 1352 | stream-each@^1.1.0: 1353 | version "1.2.3" 1354 | resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" 1355 | integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== 1356 | dependencies: 1357 | end-of-stream "^1.1.0" 1358 | stream-shift "^1.0.0" 1359 | 1360 | stream-shift@^1.0.0: 1361 | version "1.0.0" 1362 | resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" 1363 | integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= 1364 | 1365 | string-width@^1.0.1: 1366 | version "1.0.2" 1367 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1368 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 1369 | dependencies: 1370 | code-point-at "^1.0.0" 1371 | is-fullwidth-code-point "^1.0.0" 1372 | strip-ansi "^3.0.0" 1373 | 1374 | "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: 1375 | version "2.1.1" 1376 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1377 | dependencies: 1378 | is-fullwidth-code-point "^2.0.0" 1379 | strip-ansi "^4.0.0" 1380 | 1381 | string-width@^3.0.0, string-width@^3.1.0: 1382 | version "3.1.0" 1383 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1384 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1385 | dependencies: 1386 | emoji-regex "^7.0.1" 1387 | is-fullwidth-code-point "^2.0.0" 1388 | strip-ansi "^5.1.0" 1389 | 1390 | string_decoder@^1.1.1: 1391 | version "1.2.0" 1392 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" 1393 | integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== 1394 | dependencies: 1395 | safe-buffer "~5.1.0" 1396 | 1397 | string_decoder@~1.1.1: 1398 | version "1.1.1" 1399 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1400 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1401 | dependencies: 1402 | safe-buffer "~5.1.0" 1403 | 1404 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1405 | version "3.0.1" 1406 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1407 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 1408 | dependencies: 1409 | ansi-regex "^2.0.0" 1410 | 1411 | strip-ansi@^4.0.0: 1412 | version "4.0.0" 1413 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1414 | dependencies: 1415 | ansi-regex "^3.0.0" 1416 | 1417 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 1418 | version "5.2.0" 1419 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1420 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1421 | dependencies: 1422 | ansi-regex "^4.1.0" 1423 | 1424 | strip-eof@^1.0.0: 1425 | version "1.0.0" 1426 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 1427 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 1428 | 1429 | strip-json-comments@2.0.1: 1430 | version "2.0.1" 1431 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1432 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1433 | 1434 | supports-color@6.0.0: 1435 | version "6.0.0" 1436 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" 1437 | integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== 1438 | dependencies: 1439 | has-flag "^3.0.0" 1440 | 1441 | supports-color@^5.3.0: 1442 | version "5.5.0" 1443 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1444 | dependencies: 1445 | has-flag "^3.0.0" 1446 | 1447 | thenify-all@^1.0.0: 1448 | version "1.6.0" 1449 | resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" 1450 | integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= 1451 | dependencies: 1452 | thenify ">= 3.1.0 < 4" 1453 | 1454 | "thenify@>= 3.1.0 < 4": 1455 | version "3.3.1" 1456 | resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" 1457 | integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== 1458 | dependencies: 1459 | any-promise "^1.0.0" 1460 | 1461 | through2@^2.0.0: 1462 | version "2.0.5" 1463 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" 1464 | integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== 1465 | dependencies: 1466 | readable-stream "~2.3.6" 1467 | xtend "~4.0.1" 1468 | 1469 | through2@^3.0.1: 1470 | version "3.0.1" 1471 | resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" 1472 | integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== 1473 | dependencies: 1474 | readable-stream "2 || 3" 1475 | 1476 | through@^2.3.6: 1477 | version "2.3.8" 1478 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1479 | 1480 | tmp@^0.0.33: 1481 | version "0.0.33" 1482 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 1483 | dependencies: 1484 | os-tmpdir "~1.0.2" 1485 | 1486 | tslib@^1.9.0: 1487 | version "1.9.3" 1488 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" 1489 | 1490 | type-detect@^4.0.0, type-detect@^4.0.5: 1491 | version "4.0.8" 1492 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 1493 | 1494 | typedarray@^0.0.6: 1495 | version "0.0.6" 1496 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 1497 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 1498 | 1499 | unique-filename@^1.1.1: 1500 | version "1.1.1" 1501 | resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" 1502 | integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== 1503 | dependencies: 1504 | unique-slug "^2.0.0" 1505 | 1506 | unique-slug@^2.0.0: 1507 | version "2.0.1" 1508 | resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" 1509 | integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg== 1510 | dependencies: 1511 | imurmurhash "^0.1.4" 1512 | 1513 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 1514 | version "1.0.2" 1515 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1516 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1517 | 1518 | wcwidth@^1.0.1: 1519 | version "1.0.1" 1520 | resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" 1521 | dependencies: 1522 | defaults "^1.0.3" 1523 | 1524 | which-module@^2.0.0: 1525 | version "2.0.0" 1526 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 1527 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 1528 | 1529 | which@1.3.1, which@^1.2.9: 1530 | version "1.3.1" 1531 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1532 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1533 | dependencies: 1534 | isexe "^2.0.0" 1535 | 1536 | wide-align@1.1.3: 1537 | version "1.1.3" 1538 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1539 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 1540 | dependencies: 1541 | string-width "^1.0.2 || 2" 1542 | 1543 | wrap-ansi@^2.0.0: 1544 | version "2.1.0" 1545 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 1546 | integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= 1547 | dependencies: 1548 | string-width "^1.0.1" 1549 | strip-ansi "^3.0.1" 1550 | 1551 | wrap-ansi@^5.1.0: 1552 | version "5.1.0" 1553 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 1554 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 1555 | dependencies: 1556 | ansi-styles "^3.2.0" 1557 | string-width "^3.0.0" 1558 | strip-ansi "^5.0.0" 1559 | 1560 | wrappy@1: 1561 | version "1.0.2" 1562 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1563 | 1564 | xtend@~4.0.1: 1565 | version "4.0.1" 1566 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 1567 | integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= 1568 | 1569 | y18n@^3.2.1: 1570 | version "3.2.2" 1571 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" 1572 | integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== 1573 | 1574 | y18n@^4.0.0: 1575 | version "4.0.0" 1576 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 1577 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 1578 | 1579 | yallist@^2.1.2: 1580 | version "2.1.2" 1581 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 1582 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 1583 | 1584 | yallist@^3.0.2: 1585 | version "3.0.3" 1586 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" 1587 | integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== 1588 | 1589 | yargs-parser@13.1.1, yargs-parser@^13.1.1: 1590 | version "13.1.1" 1591 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" 1592 | integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== 1593 | dependencies: 1594 | camelcase "^5.0.0" 1595 | decamelize "^1.2.0" 1596 | 1597 | yargs-parser@^8.1.0: 1598 | version "8.1.0" 1599 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" 1600 | integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ== 1601 | dependencies: 1602 | camelcase "^4.1.0" 1603 | 1604 | yargs-parser@^9.0.2: 1605 | version "9.0.2" 1606 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" 1607 | integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= 1608 | dependencies: 1609 | camelcase "^4.1.0" 1610 | 1611 | yargs-unparser@1.6.0: 1612 | version "1.6.0" 1613 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" 1614 | integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== 1615 | dependencies: 1616 | flat "^4.1.0" 1617 | lodash "^4.17.15" 1618 | yargs "^13.3.0" 1619 | 1620 | yargs@13.3.0, yargs@^13.3.0: 1621 | version "13.3.0" 1622 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" 1623 | integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== 1624 | dependencies: 1625 | cliui "^5.0.0" 1626 | find-up "^3.0.0" 1627 | get-caller-file "^2.0.1" 1628 | require-directory "^2.1.1" 1629 | require-main-filename "^2.0.0" 1630 | set-blocking "^2.0.0" 1631 | string-width "^3.0.0" 1632 | which-module "^2.0.0" 1633 | y18n "^4.0.0" 1634 | yargs-parser "^13.1.1" 1635 | 1636 | yargs@^10.0.3: 1637 | version "10.1.2" 1638 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" 1639 | integrity sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig== 1640 | dependencies: 1641 | cliui "^4.0.0" 1642 | decamelize "^1.1.1" 1643 | find-up "^2.1.0" 1644 | get-caller-file "^1.0.1" 1645 | os-locale "^2.0.0" 1646 | require-directory "^2.1.1" 1647 | require-main-filename "^1.0.1" 1648 | set-blocking "^2.0.0" 1649 | string-width "^2.0.0" 1650 | which-module "^2.0.0" 1651 | y18n "^3.2.1" 1652 | yargs-parser "^8.1.0" 1653 | 1654 | yargs@^11.0.0: 1655 | version "11.1.0" 1656 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" 1657 | integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== 1658 | dependencies: 1659 | cliui "^4.0.0" 1660 | decamelize "^1.1.1" 1661 | find-up "^2.1.0" 1662 | get-caller-file "^1.0.1" 1663 | os-locale "^2.0.0" 1664 | require-directory "^2.1.1" 1665 | require-main-filename "^1.0.1" 1666 | set-blocking "^2.0.0" 1667 | string-width "^2.0.0" 1668 | which-module "^2.0.0" 1669 | y18n "^3.2.1" 1670 | yargs-parser "^9.0.2" 1671 | --------------------------------------------------------------------------------