Deployed the page to Github Pages.
This commit is contained in:
		
							parent
							
								
									1d79754e93
								
							
						
					
					
						commit
						2c89899458
					
				
					 62797 changed files with 6551425 additions and 15279 deletions
				
			
		
							
								
								
									
										22
									
								
								node_modules/inquirer/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								node_modules/inquirer/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
Copyright (c) 2012 Simon Boudrias
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person
 | 
			
		||||
obtaining a copy of this software and associated documentation
 | 
			
		||||
files (the "Software"), to deal in the Software without
 | 
			
		||||
restriction, including without limitation the rights to use,
 | 
			
		||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the
 | 
			
		||||
Software is furnished to do so, subject to the following
 | 
			
		||||
conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be
 | 
			
		||||
included in all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | 
			
		||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 | 
			
		||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 | 
			
		||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 | 
			
		||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 | 
			
		||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 | 
			
		||||
OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										455
									
								
								node_modules/inquirer/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										455
									
								
								node_modules/inquirer/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,455 @@
 | 
			
		|||
<img width="75px" height="75px" align="right" alt="Inquirer Logo" src="https://raw.githubusercontent.com/SBoudrias/Inquirer.js/master/assets/inquirer_readme.svg?sanitize=true" title="Inquirer.js"/>
 | 
			
		||||
 | 
			
		||||
# Compat Version #
 | 
			
		||||
 | 
			
		||||
This version is branched from Inquirer master branch to maintain support for Node 6.
 | 
			
		||||
 | 
			
		||||
See latest version release line at https://github.com/SBoudrias/Inquirer.js
 | 
			
		||||
 | 
			
		||||
# Inquirer.js
 | 
			
		||||
 | 
			
		||||
[](http://badge.fury.io/js/inquirer) [](http://travis-ci.org/SBoudrias/Inquirer.js) [](https://codecov.io/gh/SBoudrias/Inquirer.js) [](https://david-dm.org/SBoudrias/Inquirer.js)
 | 
			
		||||
 | 
			
		||||
A collection of common interactive command line user interfaces.
 | 
			
		||||
 | 
			
		||||
**Version 4.x** only supports Node 6 and over. For Node 4 support please use [version 3.x](https://github.com/SBoudrias/Inquirer.js/tree/v3.3.0).
 | 
			
		||||
 | 
			
		||||
## Table of Contents
 | 
			
		||||
 | 
			
		||||
1.  [Documentation](#documentation)
 | 
			
		||||
    1.  [Installation](#installation)
 | 
			
		||||
    2.  [Examples](#examples)
 | 
			
		||||
    3.  [Methods](#methods)
 | 
			
		||||
    4.  [Objects](#objects)
 | 
			
		||||
    5.  [Questions](#questions)
 | 
			
		||||
    6.  [Answers](#answers)
 | 
			
		||||
    7.  [Separator](#separator)
 | 
			
		||||
    8.  [Prompt Types](#prompt)
 | 
			
		||||
2.  [User Interfaces and Layouts](#layouts)
 | 
			
		||||
    1.  [Reactive Interface](#reactive)
 | 
			
		||||
3.  [Support](#support)
 | 
			
		||||
4.  [News](#news)
 | 
			
		||||
5.  [Contributing](#contributing)
 | 
			
		||||
6.  [License](#license)
 | 
			
		||||
7.  [Plugins](#plugins)
 | 
			
		||||
 | 
			
		||||
## Goal and Philosophy
 | 
			
		||||
 | 
			
		||||
**`Inquirer.js`** strives to be an easily embeddable and beautiful command line interface for [Node.js](https://nodejs.org/) (and perhaps the "CLI [Xanadu](https://en.wikipedia.org/wiki/Citizen_Kane)").
 | 
			
		||||
 | 
			
		||||
**`Inquirer.js`** should ease the process of
 | 
			
		||||
 | 
			
		||||
- providing _error feedback_
 | 
			
		||||
- _asking questions_
 | 
			
		||||
- _parsing_ input
 | 
			
		||||
- _validating_ answers
 | 
			
		||||
- managing _hierarchical prompts_
 | 
			
		||||
 | 
			
		||||
> **Note:** **`Inquirer.js`** provides the user interface and the inquiry session flow. If you're searching for a full blown command line program utility, then check out [commander](https://github.com/visionmedia/commander.js), [vorpal](https://github.com/dthree/vorpal) or [args](https://github.com/leo/args).
 | 
			
		||||
 | 
			
		||||
## [Documentation](#documentation)
 | 
			
		||||
 | 
			
		||||
<a name="documentation"></a>
 | 
			
		||||
 | 
			
		||||
### Installation
 | 
			
		||||
 | 
			
		||||
<a name="installation"></a>
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
npm install inquirer
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var inquirer = require('inquirer');
 | 
			
		||||
inquirer
 | 
			
		||||
  .prompt([
 | 
			
		||||
    /* Pass your questions in here */
 | 
			
		||||
  ])
 | 
			
		||||
  .then(answers => {
 | 
			
		||||
    // Use user feedback for... whatever!!
 | 
			
		||||
  });
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
<a name="examples"></a>
 | 
			
		||||
 | 
			
		||||
### Examples (Run it and see it)
 | 
			
		||||
 | 
			
		||||
Check out the [`packages/inquirer/examples/`](https://github.com/SBoudrias/Inquirer.js/tree/master/packages/inquirer/examples) folder for code and interface examples.
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
node packages/inquirer/examples/pizza.js
 | 
			
		||||
node packages/inquirer/examples/checkbox.js
 | 
			
		||||
# etc...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Methods
 | 
			
		||||
 | 
			
		||||
<a name="methods"></a>
 | 
			
		||||
 | 
			
		||||
#### `inquirer.prompt(questions) -> promise`
 | 
			
		||||
 | 
			
		||||
Launch the prompt interface (inquiry session)
 | 
			
		||||
 | 
			
		||||
- **questions** (Array) containing [Question Object](#question) (using the [reactive interface](#reactive-interface), you can also pass a `Rx.Observable` instance)
 | 
			
		||||
- returns a **Promise**
 | 
			
		||||
 | 
			
		||||
#### `inquirer.registerPrompt(name, prompt)`
 | 
			
		||||
 | 
			
		||||
Register prompt plugins under `name`.
 | 
			
		||||
 | 
			
		||||
- **name** (string) name of the this new prompt. (used for question `type`)
 | 
			
		||||
- **prompt** (object) the prompt object itself (the plugin)
 | 
			
		||||
 | 
			
		||||
#### `inquirer.createPromptModule() -> prompt function`
 | 
			
		||||
 | 
			
		||||
Create a self contained inquirer module. If you don't want to affect other libraries that also rely on inquirer when you overwrite or add new prompt types.
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
var prompt = inquirer.createPromptModule();
 | 
			
		||||
 | 
			
		||||
prompt(questions).then(/* ... */);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Objects
 | 
			
		||||
 | 
			
		||||
<a name="objects"></a>
 | 
			
		||||
 | 
			
		||||
#### Question
 | 
			
		||||
 | 
			
		||||
<a name="questions"></a>
 | 
			
		||||
A question object is a `hash` containing question related values:
 | 
			
		||||
 | 
			
		||||
- **type**: (String) Type of the prompt. Defaults: `input` - Possible values: `input`, `number`, `confirm`,
 | 
			
		||||
  `list`, `rawlist`, `expand`, `checkbox`, `password`, `editor`
 | 
			
		||||
- **name**: (String) The name to use when storing the answer in the answers hash. If the name contains periods, it will define a path in the answers hash.
 | 
			
		||||
- **message**: (String|Function) The question to print. If defined as a function, the first parameter will be the current inquirer session answers. Defaults to the value of `name` (followed by a colon).
 | 
			
		||||
- **default**: (String|Number|Boolean|Array|Function) Default value(s) to use if nothing is entered, or a function that returns the default value(s). If defined as a function, the first parameter will be the current inquirer session answers.
 | 
			
		||||
- **choices**: (Array|Function) Choices array or a function returning a choices array. If defined as a function, the first parameter will be the current inquirer session answers.
 | 
			
		||||
  Array values can be simple `numbers`, `strings`, or `objects` containing a `name` (to display in list), a `value` (to save in the answers hash) and a `short` (to display after selection) properties. The choices array can also contain [a `Separator`](#separator).
 | 
			
		||||
- **validate**: (Function) Receive the user input and answers hash. Should return `true` if the value is valid, and an error message (`String`) otherwise. If `false` is returned, a default error message is provided.
 | 
			
		||||
- **filter**: (Function) Receive the user input and return the filtered value to be used inside the program. The value returned will be added to the _Answers_ hash.
 | 
			
		||||
- **transformer**: (Function) Receive the user input, answers hash and option flags, and return a transformed value to display to the user. The transformation only impacts what is shown while editing. It does not modify the answers hash.
 | 
			
		||||
- **when**: (Function, Boolean) Receive the current user answers hash and should return `true` or `false` depending on whether or not this question should be asked. The value can also be a simple boolean.
 | 
			
		||||
- **pageSize**: (Number) Change the number of lines that will be rendered when using `list`, `rawList`, `expand` or `checkbox`.
 | 
			
		||||
- **prefix**: (String) Change the default _prefix_ message.
 | 
			
		||||
- **suffix**: (String) Change the default _suffix_ message.
 | 
			
		||||
 | 
			
		||||
`default`, `choices`(if defined as functions), `validate`, `filter` and `when` functions can be called asynchronously. Either return a promise or use `this.async()` to get a callback you'll call with the final value.
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
{
 | 
			
		||||
  /* Preferred way: with promise */
 | 
			
		||||
  filter() {
 | 
			
		||||
    return new Promise(/* etc... */);
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  /* Legacy way: with this.async */
 | 
			
		||||
  validate: function (input) {
 | 
			
		||||
    // Declare function as asynchronous, and save the done callback
 | 
			
		||||
    var done = this.async();
 | 
			
		||||
 | 
			
		||||
    // Do async stuff
 | 
			
		||||
    setTimeout(function() {
 | 
			
		||||
      if (typeof input !== 'number') {
 | 
			
		||||
        // Pass the return value in the done callback
 | 
			
		||||
        done('You need to provide a number');
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      // Pass the return value in the done callback
 | 
			
		||||
      done(null, true);
 | 
			
		||||
    }, 3000);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Answers
 | 
			
		||||
 | 
			
		||||
<a name="answers"></a>
 | 
			
		||||
A key/value hash containing the client answers in each prompt.
 | 
			
		||||
 | 
			
		||||
- **Key** The `name` property of the _question_ object
 | 
			
		||||
- **Value** (Depends on the prompt)
 | 
			
		||||
  - `confirm`: (Boolean)
 | 
			
		||||
  - `input` : User input (filtered if `filter` is defined) (String)
 | 
			
		||||
  - `number`: User input (filtered if `filter` is defined) (Number)
 | 
			
		||||
  - `rawlist`, `list` : Selected choice value (or name if no value specified) (String)
 | 
			
		||||
 | 
			
		||||
### Separator
 | 
			
		||||
 | 
			
		||||
<a name="separator"></a>
 | 
			
		||||
A separator can be added to any `choices` array:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
// In the question object
 | 
			
		||||
choices: [ "Choice A", new inquirer.Separator(), "choice B" ]
 | 
			
		||||
 | 
			
		||||
// Which'll be displayed this way
 | 
			
		||||
[?] What do you want to do?
 | 
			
		||||
 > Order a pizza
 | 
			
		||||
   Make a reservation
 | 
			
		||||
   --------
 | 
			
		||||
   Ask opening hours
 | 
			
		||||
   Talk to the receptionist
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The constructor takes a facultative `String` value that'll be use as the separator. If omitted, the separator will be `--------`.
 | 
			
		||||
 | 
			
		||||
Separator instances have a property `type` equal to `separator`. This should allow tools façading Inquirer interface from detecting separator types in lists.
 | 
			
		||||
 | 
			
		||||
<a name="prompt"></a>
 | 
			
		||||
 | 
			
		||||
### Prompt types
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
> **Note:**: _allowed options written inside square brackets (`[]`) are optional. Others are required._
 | 
			
		||||
 | 
			
		||||
#### List - `{type: 'list'}`
 | 
			
		||||
 | 
			
		||||
Take `type`, `name`, `message`, `choices`[, `default`, `filter`] properties. (Note that
 | 
			
		||||
default must be the choice `index` in the array or a choice `value`)
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### Raw List - `{type: 'rawlist'}`
 | 
			
		||||
 | 
			
		||||
Take `type`, `name`, `message`, `choices`[, `default`, `filter`] properties. (Note that
 | 
			
		||||
default must be the choice `index` in the array)
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### Expand - `{type: 'expand'}`
 | 
			
		||||
 | 
			
		||||
Take `type`, `name`, `message`, `choices`[, `default`] properties. (Note that
 | 
			
		||||
default must be the choice `index` in the array. If `default` key not provided, then `help` will be used as default choice)
 | 
			
		||||
 | 
			
		||||
Note that the `choices` object will take an extra parameter called `key` for the `expand` prompt. This parameter must be a single (lowercased) character. The `h` option is added by the prompt and shouldn't be defined by the user.
 | 
			
		||||
 | 
			
		||||
See `examples/expand.js` for a running example.
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### Checkbox - `{type: 'checkbox'}`
 | 
			
		||||
 | 
			
		||||
Take `type`, `name`, `message`, `choices`[, `filter`, `validate`, `default`] properties. `default` is expected to be an Array of the checked choices value.
 | 
			
		||||
 | 
			
		||||
Choices marked as `{checked: true}` will be checked by default.
 | 
			
		||||
 | 
			
		||||
Choices whose property `disabled` is truthy will be unselectable. If `disabled` is a string, then the string will be outputted next to the disabled choice, otherwise it'll default to `"Disabled"`. The `disabled` property can also be a synchronous function receiving the current answers as argument and returning a boolean or a string.
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### Confirm - `{type: 'confirm'}`
 | 
			
		||||
 | 
			
		||||
Take `type`, `name`, `message`, [`default`] properties. `default` is expected to be a boolean if used.
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### Input - `{type: 'input'}`
 | 
			
		||||
 | 
			
		||||
Take `type`, `name`, `message`[, `default`, `filter`, `validate`, `transformer`] properties.
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### Input - `{type: 'number'}`
 | 
			
		||||
 | 
			
		||||
Take `type`, `name`, `message`[, `default`, `filter`, `validate`, `transformer`] properties.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
#### Password - `{type: 'password'}`
 | 
			
		||||
 | 
			
		||||
Take `type`, `name`, `message`, `mask`,[, `default`, `filter`, `validate`] properties.
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
Note that `mask` is required to hide the actual user input.
 | 
			
		||||
 | 
			
		||||
#### Editor - `{type: 'editor'}`
 | 
			
		||||
 | 
			
		||||
Take `type`, `name`, `message`[, `default`, `filter`, `validate`] properties
 | 
			
		||||
 | 
			
		||||
Launches an instance of the users preferred editor on a temporary file. Once the user exits their editor, the contents of the temporary file are read in as the result. The editor to use is determined by reading the $VISUAL or $EDITOR environment variables. If neither of those are present, notepad (on Windows) or vim (Linux or Mac) is used.
 | 
			
		||||
 | 
			
		||||
<a name="layouts"></a>
 | 
			
		||||
 | 
			
		||||
## User Interfaces and layouts
 | 
			
		||||
 | 
			
		||||
Along with the prompts, Inquirer offers some basic text UI.
 | 
			
		||||
 | 
			
		||||
#### Bottom Bar - `inquirer.ui.BottomBar`
 | 
			
		||||
 | 
			
		||||
This UI present a fixed text at the bottom of a free text zone. This is useful to keep a message to the bottom of the screen while outputting command outputs on the higher section.
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var ui = new inquirer.ui.BottomBar();
 | 
			
		||||
 | 
			
		||||
// pipe a Stream to the log zone
 | 
			
		||||
outputStream.pipe(ui.log);
 | 
			
		||||
 | 
			
		||||
// Or simply write output
 | 
			
		||||
ui.log.write('something just happened.');
 | 
			
		||||
ui.log.write('Almost over, standby!');
 | 
			
		||||
 | 
			
		||||
// During processing, update the bottom bar content to display a loader
 | 
			
		||||
// or output a progress bar, etc
 | 
			
		||||
ui.updateBottomBar('new bottom bar content');
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
<a name="reactive"></a>
 | 
			
		||||
 | 
			
		||||
## Reactive interface
 | 
			
		||||
 | 
			
		||||
Internally, Inquirer uses the [JS reactive extension](https://github.com/ReactiveX/rxjs) to handle events and async flows.
 | 
			
		||||
 | 
			
		||||
This mean you can take advantage of this feature to provide more advanced flows. For example, you can dynamically add questions to be asked:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
var prompts = new Rx.Subject();
 | 
			
		||||
inquirer.prompt(prompts);
 | 
			
		||||
 | 
			
		||||
// At some point in the future, push new questions
 | 
			
		||||
prompts.next({
 | 
			
		||||
  /* question... */
 | 
			
		||||
});
 | 
			
		||||
prompts.next({
 | 
			
		||||
  /* question... */
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// When you're done
 | 
			
		||||
prompts.complete();
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
And using the return value `process` property, you can access more fine grained callbacks:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
inquirer.prompt(prompts).ui.process.subscribe(onEachAnswer, onError, onComplete);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Support (OS Terminals)
 | 
			
		||||
 | 
			
		||||
<a name="support"></a>
 | 
			
		||||
 | 
			
		||||
You should expect mostly good support for the CLI below. This does not mean we won't
 | 
			
		||||
look at issues found on other command line - feel free to report any!
 | 
			
		||||
 | 
			
		||||
- **Mac OS**:
 | 
			
		||||
  - Terminal.app
 | 
			
		||||
  - iTerm
 | 
			
		||||
- **Windows**:
 | 
			
		||||
  - [ConEmu](https://conemu.github.io/)
 | 
			
		||||
  - cmd.exe
 | 
			
		||||
  - Powershell
 | 
			
		||||
  - Cygwin
 | 
			
		||||
- **Linux (Ubuntu, openSUSE, Arch Linux, etc)**:
 | 
			
		||||
  - gnome-terminal (Terminal GNOME)
 | 
			
		||||
  - konsole
 | 
			
		||||
 | 
			
		||||
## News on the march (Release notes)
 | 
			
		||||
 | 
			
		||||
<a name="news"></a>
 | 
			
		||||
 | 
			
		||||
Please refer to the [Github releases section for the changelog](https://github.com/SBoudrias/Inquirer.js/releases)
 | 
			
		||||
 | 
			
		||||
## Contributing
 | 
			
		||||
 | 
			
		||||
<a name="contributing"></a>
 | 
			
		||||
 | 
			
		||||
**Unit test**
 | 
			
		||||
Unit test are written in [Mocha](https://mochajs.org/). Please add a unit test for every new feature or bug fix. `npm test` to run the test suite.
 | 
			
		||||
 | 
			
		||||
**Documentation**
 | 
			
		||||
Add documentation for every API change. Feel free to send typo fixes and better docs!
 | 
			
		||||
 | 
			
		||||
We're looking to offer good support for multiple prompts and environments. If you want to
 | 
			
		||||
help, we'd like to keep a list of testers for each terminal/OS so we can contact you and
 | 
			
		||||
get feedback before release. Let us know if you want to be added to the list (just tweet
 | 
			
		||||
to [@vaxilart](https://twitter.com/Vaxilart)) or just add your name to [the wiki](https://github.com/SBoudrias/Inquirer.js/wiki/Testers)
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
<a name="license"></a>
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2016 Simon Boudrias (twitter: [@vaxilart](https://twitter.com/Vaxilart))
 | 
			
		||||
Licensed under the MIT license.
 | 
			
		||||
 | 
			
		||||
## Plugins
 | 
			
		||||
 | 
			
		||||
<a name="plugins"></a>
 | 
			
		||||
 | 
			
		||||
### Prompts
 | 
			
		||||
 | 
			
		||||
[**autocomplete**](https://github.com/mokkabonna/inquirer-autocomplete-prompt)<br>
 | 
			
		||||
Presents a list of options as the user types, compatible with other packages such as fuzzy (for search)<br>
 | 
			
		||||
<br>
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
[**checkbox-plus**](https://github.com/faressoft/inquirer-checkbox-plus-prompt)<br>
 | 
			
		||||
Checkbox list with autocomplete and other additions<br>
 | 
			
		||||
<br>
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
[**datetime**](https://github.com/DerekTBrown/inquirer-datepicker-prompt)<br>
 | 
			
		||||
Customizable date/time selector using both number pad and arrow keys<br>
 | 
			
		||||
<br>
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
[**inquirer-select-line**](https://github.com/adam-golab/inquirer-select-line)<br>
 | 
			
		||||
Prompt for selecting index in array where add new element<br>
 | 
			
		||||
<br>
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
[**command**](https://github.com/sullof/inquirer-command-prompt)<br>
 | 
			
		||||
<br>
 | 
			
		||||
Simple prompt with command history and dynamic autocomplete
 | 
			
		||||
 | 
			
		||||
[**inquirer-fuzzy-path**](https://github.com/adelsz/inquirer-fuzzy-path)<br>
 | 
			
		||||
Prompt for fuzzy file/directory selection.<br>
 | 
			
		||||
<br>
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
[**inquirer-emoji**](https://github.com/tannerntannern/inquirer-emoji)<br>
 | 
			
		||||
Prompt for inputting emojis.<br>
 | 
			
		||||
<br>
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
[**inquirer-chalk-pipe**](https://github.com/LitoMore/inquirer-chalk-pipe)<br>
 | 
			
		||||
Prompt for input chalk-pipe style strings<br>
 | 
			
		||||
<br>
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
[**inquirer-search-checkbox**](https://github.com/clinyong/inquirer-search-checkbox)<br>
 | 
			
		||||
Searchable Inquirer checkbox<br>
 | 
			
		||||
 | 
			
		||||
[**inquirer-prompt-suggest**](https://github.com/olistic/inquirer-prompt-suggest)<br>
 | 
			
		||||
Inquirer prompt for your less creative users.
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
[**inquirer-s3**](https://github.com/HQarroum/inquirer-s3)<br>
 | 
			
		||||
An S3 object selector for Inquirer.
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
[**inquirer-autosubmit-prompt**](https://github.com/yaodingyd/inquirer-autosubmit-prompt)<br>
 | 
			
		||||
Auto submit based on your current input, saving one extra enter
 | 
			
		||||
 | 
			
		||||
[**inquirer-file-tree-selection-prompt**](https://github.com/anc95/inquirer-file-tree-selection)<br>
 | 
			
		||||
Inquirer prompt for to select a file or directory in file tree
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
							
								
								
									
										88
									
								
								node_modules/inquirer/lib/inquirer.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								node_modules/inquirer/lib/inquirer.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,88 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/**
 | 
			
		||||
 * Inquirer.js
 | 
			
		||||
 * A collection of common interactive command line user interfaces.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var inquirer = module.exports;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Client interfaces
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
inquirer.prompts = {};
 | 
			
		||||
 | 
			
		||||
inquirer.Separator = require('./objects/separator');
 | 
			
		||||
 | 
			
		||||
inquirer.ui = {
 | 
			
		||||
  BottomBar: require('./ui/bottom-bar'),
 | 
			
		||||
  Prompt: require('./ui/prompt')
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Create a new self-contained prompt module.
 | 
			
		||||
 */
 | 
			
		||||
inquirer.createPromptModule = function(opt) {
 | 
			
		||||
  var promptModule = function(questions) {
 | 
			
		||||
    var ui = new inquirer.ui.Prompt(promptModule.prompts, opt);
 | 
			
		||||
    var promise = ui.run(questions);
 | 
			
		||||
 | 
			
		||||
    // Monkey patch the UI on the promise object so
 | 
			
		||||
    // that it remains publicly accessible.
 | 
			
		||||
    promise.ui = ui;
 | 
			
		||||
 | 
			
		||||
    return promise;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  promptModule.prompts = {};
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Register a prompt type
 | 
			
		||||
   * @param {String} name     Prompt type name
 | 
			
		||||
   * @param {Function} prompt Prompt constructor
 | 
			
		||||
   * @return {inquirer}
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  promptModule.registerPrompt = function(name, prompt) {
 | 
			
		||||
    promptModule.prompts[name] = prompt;
 | 
			
		||||
    return this;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Register the defaults provider prompts
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  promptModule.restoreDefaultPrompts = function() {
 | 
			
		||||
    this.registerPrompt('list', require('./prompts/list'));
 | 
			
		||||
    this.registerPrompt('input', require('./prompts/input'));
 | 
			
		||||
    this.registerPrompt('number', require('./prompts/number'));
 | 
			
		||||
    this.registerPrompt('confirm', require('./prompts/confirm'));
 | 
			
		||||
    this.registerPrompt('rawlist', require('./prompts/rawlist'));
 | 
			
		||||
    this.registerPrompt('expand', require('./prompts/expand'));
 | 
			
		||||
    this.registerPrompt('checkbox', require('./prompts/checkbox'));
 | 
			
		||||
    this.registerPrompt('password', require('./prompts/password'));
 | 
			
		||||
    this.registerPrompt('editor', require('./prompts/editor'));
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  promptModule.restoreDefaultPrompts();
 | 
			
		||||
 | 
			
		||||
  return promptModule;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Public CLI helper interface
 | 
			
		||||
 * @param  {Array|Object|Rx.Observable} questions - Questions settings array
 | 
			
		||||
 * @param  {Function} cb - Callback being passed the user answers
 | 
			
		||||
 * @return {inquirer.ui.Prompt}
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
inquirer.prompt = inquirer.createPromptModule();
 | 
			
		||||
 | 
			
		||||
// Expose helper functions on the top level for easiest usage by common users
 | 
			
		||||
inquirer.registerPrompt = function(name, prompt) {
 | 
			
		||||
  inquirer.prompt.registerPrompt(name, prompt);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
inquirer.restoreDefaultPrompts = function() {
 | 
			
		||||
  inquirer.prompt.restoreDefaultPrompts();
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										37
									
								
								node_modules/inquirer/lib/objects/choice.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								node_modules/inquirer/lib/objects/choice.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Choice object
 | 
			
		||||
 * Normalize input as choice object
 | 
			
		||||
 * @constructor
 | 
			
		||||
 * @param {Number|String|Object} val  Choice value. If an object is passed, it should contains
 | 
			
		||||
 *                                    at least one of `value` or `name` property
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
module.exports = class Choice {
 | 
			
		||||
  constructor(val, answers) {
 | 
			
		||||
    // Don't process Choice and Separator object
 | 
			
		||||
    if (val instanceof Choice || val.type === 'separator') {
 | 
			
		||||
      return val;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (_.isString(val) || _.isNumber(val)) {
 | 
			
		||||
      this.name = String(val);
 | 
			
		||||
      this.value = val;
 | 
			
		||||
      this.short = String(val);
 | 
			
		||||
    } else {
 | 
			
		||||
      _.extend(this, val, {
 | 
			
		||||
        name: val.name || val.value,
 | 
			
		||||
        value: 'value' in val ? val.value : val.name,
 | 
			
		||||
        short: val.short || val.name || val.value
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (_.isFunction(val.disabled)) {
 | 
			
		||||
      this.disabled = val.disabled(answers);
 | 
			
		||||
    } else {
 | 
			
		||||
      this.disabled = val.disabled;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										116
									
								
								node_modules/inquirer/lib/objects/choices.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								node_modules/inquirer/lib/objects/choices.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,116 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
var assert = require('assert');
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
var Separator = require('./separator');
 | 
			
		||||
var Choice = require('./choice');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Choices collection
 | 
			
		||||
 * Collection of multiple `choice` object
 | 
			
		||||
 * @constructor
 | 
			
		||||
 * @param {Array} choices  All `choice` to keep in the collection
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
module.exports = class Choices {
 | 
			
		||||
  constructor(choices, answers) {
 | 
			
		||||
    this.choices = choices.map(val => {
 | 
			
		||||
      if (val.type === 'separator') {
 | 
			
		||||
        if (!(val instanceof Separator)) {
 | 
			
		||||
          val = new Separator(val.line);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return val;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return new Choice(val, answers);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    this.realChoices = this.choices
 | 
			
		||||
      .filter(Separator.exclude)
 | 
			
		||||
      .filter(item => !item.disabled);
 | 
			
		||||
 | 
			
		||||
    Object.defineProperty(this, 'length', {
 | 
			
		||||
      get() {
 | 
			
		||||
        return this.choices.length;
 | 
			
		||||
      },
 | 
			
		||||
      set(val) {
 | 
			
		||||
        this.choices.length = val;
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    Object.defineProperty(this, 'realLength', {
 | 
			
		||||
      get() {
 | 
			
		||||
        return this.realChoices.length;
 | 
			
		||||
      },
 | 
			
		||||
      set() {
 | 
			
		||||
        throw new Error('Cannot set `realLength` of a Choices collection');
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Get a valid choice from the collection
 | 
			
		||||
   * @param  {Number} selector  The selected choice index
 | 
			
		||||
   * @return {Choice|Undefined} Return the matched choice or undefined
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  getChoice(selector) {
 | 
			
		||||
    assert(_.isNumber(selector));
 | 
			
		||||
    return this.realChoices[selector];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Get a raw element from the collection
 | 
			
		||||
   * @param  {Number} selector  The selected index value
 | 
			
		||||
   * @return {Choice|Undefined} Return the matched choice or undefined
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  get(selector) {
 | 
			
		||||
    assert(_.isNumber(selector));
 | 
			
		||||
    return this.choices[selector];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Match the valid choices against a where clause
 | 
			
		||||
   * @param  {Object} whereClause Lodash `where` clause
 | 
			
		||||
   * @return {Array}              Matching choices or empty array
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  where(whereClause) {
 | 
			
		||||
    return _.filter(this.realChoices, whereClause);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Pluck a particular key from the choices
 | 
			
		||||
   * @param  {String} propertyName Property name to select
 | 
			
		||||
   * @return {Array}               Selected properties
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  pluck(propertyName) {
 | 
			
		||||
    return _.map(this.realChoices, propertyName);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Expose usual Array methods
 | 
			
		||||
  indexOf() {
 | 
			
		||||
    return this.choices.indexOf.apply(this.choices, arguments);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  forEach() {
 | 
			
		||||
    return this.choices.forEach.apply(this.choices, arguments);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  filter() {
 | 
			
		||||
    return this.choices.filter.apply(this.choices, arguments);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  find(func) {
 | 
			
		||||
    return _.find(this.choices, func);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  push() {
 | 
			
		||||
    var objs = _.map(arguments, val => new Choice(val));
 | 
			
		||||
    this.choices.push.apply(this.choices, objs);
 | 
			
		||||
    this.realChoices = this.choices.filter(Separator.exclude);
 | 
			
		||||
    return this.choices;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										37
									
								
								node_modules/inquirer/lib/objects/separator.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								node_modules/inquirer/lib/objects/separator.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
var chalk = require('chalk');
 | 
			
		||||
var figures = require('figures');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Separator object
 | 
			
		||||
 * Used to space/separate choices group
 | 
			
		||||
 * @constructor
 | 
			
		||||
 * @param {String} line   Separation line content (facultative)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
class Separator {
 | 
			
		||||
  constructor(line) {
 | 
			
		||||
    this.type = 'separator';
 | 
			
		||||
    this.line = chalk.dim(line || new Array(15).join(figures.line));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Stringify separator
 | 
			
		||||
   * @return {String} the separator display string
 | 
			
		||||
   */
 | 
			
		||||
  toString() {
 | 
			
		||||
    return this.line;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Helper function returning false if object is a separator
 | 
			
		||||
 * @param  {Object} obj object to test against
 | 
			
		||||
 * @return {Boolean}    `false` if object is a separator
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
Separator.exclude = function(obj) {
 | 
			
		||||
  return obj.type !== 'separator';
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = Separator;
 | 
			
		||||
							
								
								
									
										148
									
								
								node_modules/inquirer/lib/prompts/base.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								node_modules/inquirer/lib/prompts/base.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,148 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/**
 | 
			
		||||
 * Base prompt implementation
 | 
			
		||||
 * Should be extended by prompt types.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
var chalk = require('chalk');
 | 
			
		||||
var runAsync = require('run-async');
 | 
			
		||||
var { filter, flatMap, share, take, takeUntil } = require('rxjs/operators');
 | 
			
		||||
var Choices = require('../objects/choices');
 | 
			
		||||
var ScreenManager = require('../utils/screen-manager');
 | 
			
		||||
 | 
			
		||||
class Prompt {
 | 
			
		||||
  constructor(question, rl, answers) {
 | 
			
		||||
    // Setup instance defaults property
 | 
			
		||||
    _.assign(this, {
 | 
			
		||||
      answers: answers,
 | 
			
		||||
      status: 'pending'
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // Set defaults prompt options
 | 
			
		||||
    this.opt = _.defaults(_.clone(question), {
 | 
			
		||||
      validate: () => true,
 | 
			
		||||
      filter: val => val,
 | 
			
		||||
      when: () => true,
 | 
			
		||||
      suffix: '',
 | 
			
		||||
      prefix: chalk.green('?')
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // Make sure name is present
 | 
			
		||||
    if (!this.opt.name) {
 | 
			
		||||
      this.throwParamError('name');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Set default message if no message defined
 | 
			
		||||
    if (!this.opt.message) {
 | 
			
		||||
      this.opt.message = this.opt.name + ':';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Normalize choices
 | 
			
		||||
    if (Array.isArray(this.opt.choices)) {
 | 
			
		||||
      this.opt.choices = new Choices(this.opt.choices, answers);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.rl = rl;
 | 
			
		||||
    this.screen = new ScreenManager(this.rl);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Start the Inquiry session and manage output value filtering
 | 
			
		||||
   * @return {Promise}
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  run() {
 | 
			
		||||
    return new Promise(resolve => {
 | 
			
		||||
      this._run(value => resolve(value));
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Default noop (this one should be overwritten in prompts)
 | 
			
		||||
  _run(cb) {
 | 
			
		||||
    cb();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Throw an error telling a required parameter is missing
 | 
			
		||||
   * @param  {String} name Name of the missing param
 | 
			
		||||
   * @return {Throw Error}
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  throwParamError(name) {
 | 
			
		||||
    throw new Error('You must provide a `' + name + '` parameter');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Called when the UI closes. Override to do any specific cleanup necessary
 | 
			
		||||
   */
 | 
			
		||||
  close() {
 | 
			
		||||
    this.screen.releaseCursor();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Run the provided validation method each time a submit event occur.
 | 
			
		||||
   * @param  {Rx.Observable} submit - submit event flow
 | 
			
		||||
   * @return {Object}        Object containing two observables: `success` and `error`
 | 
			
		||||
   */
 | 
			
		||||
  handleSubmitEvents(submit) {
 | 
			
		||||
    var self = this;
 | 
			
		||||
    var validate = runAsync(this.opt.validate);
 | 
			
		||||
    var asyncFilter = runAsync(this.opt.filter);
 | 
			
		||||
    var validation = submit.pipe(
 | 
			
		||||
      flatMap(value =>
 | 
			
		||||
        asyncFilter(value, self.answers).then(
 | 
			
		||||
          filteredValue =>
 | 
			
		||||
            validate(filteredValue, self.answers).then(
 | 
			
		||||
              isValid => ({ isValid: isValid, value: filteredValue }),
 | 
			
		||||
              err => ({ isValid: err })
 | 
			
		||||
            ),
 | 
			
		||||
          err => ({ isValid: err })
 | 
			
		||||
        )
 | 
			
		||||
      ),
 | 
			
		||||
      share()
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    var success = validation.pipe(
 | 
			
		||||
      filter(state => state.isValid === true),
 | 
			
		||||
      take(1)
 | 
			
		||||
    );
 | 
			
		||||
    var error = validation.pipe(
 | 
			
		||||
      filter(state => state.isValid !== true),
 | 
			
		||||
      takeUntil(success)
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
      success: success,
 | 
			
		||||
      error: error
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Generate the prompt question string
 | 
			
		||||
   * @return {String} prompt question string
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  getQuestion() {
 | 
			
		||||
    var message =
 | 
			
		||||
      this.opt.prefix +
 | 
			
		||||
      ' ' +
 | 
			
		||||
      chalk.bold(this.opt.message) +
 | 
			
		||||
      this.opt.suffix +
 | 
			
		||||
      chalk.reset(' ');
 | 
			
		||||
 | 
			
		||||
    // Append the default if available, and if question isn't answered
 | 
			
		||||
    if (this.opt.default != null && this.status !== 'answered') {
 | 
			
		||||
      // If default password is supplied, hide it
 | 
			
		||||
      if (this.opt.type === 'password') {
 | 
			
		||||
        message += chalk.italic.dim('[hidden] ');
 | 
			
		||||
      } else {
 | 
			
		||||
        message += chalk.dim('(' + this.opt.default + ') ');
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return message;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = Prompt;
 | 
			
		||||
							
								
								
									
										254
									
								
								node_modules/inquirer/lib/prompts/checkbox.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										254
									
								
								node_modules/inquirer/lib/prompts/checkbox.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,254 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/**
 | 
			
		||||
 * `list` type prompt
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
var chalk = require('chalk');
 | 
			
		||||
var cliCursor = require('cli-cursor');
 | 
			
		||||
var figures = require('figures');
 | 
			
		||||
var { map, takeUntil } = require('rxjs/operators');
 | 
			
		||||
var Base = require('./base');
 | 
			
		||||
var observe = require('../utils/events');
 | 
			
		||||
var Paginator = require('../utils/paginator');
 | 
			
		||||
 | 
			
		||||
class CheckboxPrompt extends Base {
 | 
			
		||||
  constructor(questions, rl, answers) {
 | 
			
		||||
    super(questions, rl, answers);
 | 
			
		||||
 | 
			
		||||
    if (!this.opt.choices) {
 | 
			
		||||
      this.throwParamError('choices');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (_.isArray(this.opt.default)) {
 | 
			
		||||
      this.opt.choices.forEach(function(choice) {
 | 
			
		||||
        if (this.opt.default.indexOf(choice.value) >= 0) {
 | 
			
		||||
          choice.checked = true;
 | 
			
		||||
        }
 | 
			
		||||
      }, this);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.pointer = 0;
 | 
			
		||||
 | 
			
		||||
    // Make sure no default is set (so it won't be printed)
 | 
			
		||||
    this.opt.default = null;
 | 
			
		||||
 | 
			
		||||
    this.paginator = new Paginator(this.screen);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Start the Inquiry session
 | 
			
		||||
   * @param  {Function} cb      Callback when prompt is done
 | 
			
		||||
   * @return {this}
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  _run(cb) {
 | 
			
		||||
    this.done = cb;
 | 
			
		||||
 | 
			
		||||
    var events = observe(this.rl);
 | 
			
		||||
 | 
			
		||||
    var validation = this.handleSubmitEvents(
 | 
			
		||||
      events.line.pipe(map(this.getCurrentValue.bind(this)))
 | 
			
		||||
    );
 | 
			
		||||
    validation.success.forEach(this.onEnd.bind(this));
 | 
			
		||||
    validation.error.forEach(this.onError.bind(this));
 | 
			
		||||
 | 
			
		||||
    events.normalizedUpKey
 | 
			
		||||
      .pipe(takeUntil(validation.success))
 | 
			
		||||
      .forEach(this.onUpKey.bind(this));
 | 
			
		||||
    events.normalizedDownKey
 | 
			
		||||
      .pipe(takeUntil(validation.success))
 | 
			
		||||
      .forEach(this.onDownKey.bind(this));
 | 
			
		||||
    events.numberKey
 | 
			
		||||
      .pipe(takeUntil(validation.success))
 | 
			
		||||
      .forEach(this.onNumberKey.bind(this));
 | 
			
		||||
    events.spaceKey
 | 
			
		||||
      .pipe(takeUntil(validation.success))
 | 
			
		||||
      .forEach(this.onSpaceKey.bind(this));
 | 
			
		||||
    events.aKey.pipe(takeUntil(validation.success)).forEach(this.onAllKey.bind(this));
 | 
			
		||||
    events.iKey.pipe(takeUntil(validation.success)).forEach(this.onInverseKey.bind(this));
 | 
			
		||||
 | 
			
		||||
    // Init the prompt
 | 
			
		||||
    cliCursor.hide();
 | 
			
		||||
    this.render();
 | 
			
		||||
    this.firstRender = false;
 | 
			
		||||
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Render the prompt to screen
 | 
			
		||||
   * @return {CheckboxPrompt} self
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  render(error) {
 | 
			
		||||
    // Render question
 | 
			
		||||
    var message = this.getQuestion();
 | 
			
		||||
    var bottomContent = '';
 | 
			
		||||
 | 
			
		||||
    if (!this.spaceKeyPressed) {
 | 
			
		||||
      message +=
 | 
			
		||||
        '(Press ' +
 | 
			
		||||
        chalk.cyan.bold('<space>') +
 | 
			
		||||
        ' to select, ' +
 | 
			
		||||
        chalk.cyan.bold('<a>') +
 | 
			
		||||
        ' to toggle all, ' +
 | 
			
		||||
        chalk.cyan.bold('<i>') +
 | 
			
		||||
        ' to invert selection)';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Render choices or answer depending on the state
 | 
			
		||||
    if (this.status === 'answered') {
 | 
			
		||||
      message += chalk.cyan(this.selection.join(', '));
 | 
			
		||||
    } else {
 | 
			
		||||
      var choicesStr = renderChoices(this.opt.choices, this.pointer);
 | 
			
		||||
      var indexPosition = this.opt.choices.indexOf(
 | 
			
		||||
        this.opt.choices.getChoice(this.pointer)
 | 
			
		||||
      );
 | 
			
		||||
      message +=
 | 
			
		||||
        '\n' + this.paginator.paginate(choicesStr, indexPosition, this.opt.pageSize);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (error) {
 | 
			
		||||
      bottomContent = chalk.red('>> ') + error;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.screen.render(message, bottomContent);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press `enter` key
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  onEnd(state) {
 | 
			
		||||
    this.status = 'answered';
 | 
			
		||||
 | 
			
		||||
    // Rerender prompt (and clean subline error)
 | 
			
		||||
    this.render();
 | 
			
		||||
 | 
			
		||||
    this.screen.done();
 | 
			
		||||
    cliCursor.show();
 | 
			
		||||
    this.done(state.value);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onError(state) {
 | 
			
		||||
    this.render(state.isValid);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getCurrentValue() {
 | 
			
		||||
    var choices = this.opt.choices.filter(function(choice) {
 | 
			
		||||
      return Boolean(choice.checked) && !choice.disabled;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    this.selection = _.map(choices, 'short');
 | 
			
		||||
    return _.map(choices, 'value');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onUpKey() {
 | 
			
		||||
    var len = this.opt.choices.realLength;
 | 
			
		||||
    this.pointer = this.pointer > 0 ? this.pointer - 1 : len - 1;
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onDownKey() {
 | 
			
		||||
    var len = this.opt.choices.realLength;
 | 
			
		||||
    this.pointer = this.pointer < len - 1 ? this.pointer + 1 : 0;
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onNumberKey(input) {
 | 
			
		||||
    if (input <= this.opt.choices.realLength) {
 | 
			
		||||
      this.pointer = input - 1;
 | 
			
		||||
      this.toggleChoice(this.pointer);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onSpaceKey() {
 | 
			
		||||
    this.spaceKeyPressed = true;
 | 
			
		||||
    this.toggleChoice(this.pointer);
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onAllKey() {
 | 
			
		||||
    var shouldBeChecked = Boolean(
 | 
			
		||||
      this.opt.choices.find(function(choice) {
 | 
			
		||||
        return choice.type !== 'separator' && !choice.checked;
 | 
			
		||||
      })
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    this.opt.choices.forEach(function(choice) {
 | 
			
		||||
      if (choice.type !== 'separator') {
 | 
			
		||||
        choice.checked = shouldBeChecked;
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onInverseKey() {
 | 
			
		||||
    this.opt.choices.forEach(function(choice) {
 | 
			
		||||
      if (choice.type !== 'separator') {
 | 
			
		||||
        choice.checked = !choice.checked;
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  toggleChoice(index) {
 | 
			
		||||
    var item = this.opt.choices.getChoice(index);
 | 
			
		||||
    if (item !== undefined) {
 | 
			
		||||
      this.opt.choices.getChoice(index).checked = !item.checked;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Function for rendering checkbox choices
 | 
			
		||||
 * @param  {Number} pointer Position of the pointer
 | 
			
		||||
 * @return {String}         Rendered content
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
function renderChoices(choices, pointer) {
 | 
			
		||||
  var output = '';
 | 
			
		||||
  var separatorOffset = 0;
 | 
			
		||||
 | 
			
		||||
  choices.forEach(function(choice, i) {
 | 
			
		||||
    if (choice.type === 'separator') {
 | 
			
		||||
      separatorOffset++;
 | 
			
		||||
      output += ' ' + choice + '\n';
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (choice.disabled) {
 | 
			
		||||
      separatorOffset++;
 | 
			
		||||
      output += ' - ' + choice.name;
 | 
			
		||||
      output += ' (' + (_.isString(choice.disabled) ? choice.disabled : 'Disabled') + ')';
 | 
			
		||||
    } else {
 | 
			
		||||
      var line = getCheckbox(choice.checked) + ' ' + choice.name;
 | 
			
		||||
      if (i - separatorOffset === pointer) {
 | 
			
		||||
        output += chalk.cyan(figures.pointer + line);
 | 
			
		||||
      } else {
 | 
			
		||||
        output += ' ' + line;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    output += '\n';
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  return output.replace(/\n$/, '');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get the checkbox
 | 
			
		||||
 * @param  {Boolean} checked - add a X or not to the checkbox
 | 
			
		||||
 * @return {String} Composited checkbox string
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
function getCheckbox(checked) {
 | 
			
		||||
  return checked ? chalk.green(figures.radioOn) : figures.radioOff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = CheckboxPrompt;
 | 
			
		||||
							
								
								
									
										101
									
								
								node_modules/inquirer/lib/prompts/confirm.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								node_modules/inquirer/lib/prompts/confirm.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,101 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/**
 | 
			
		||||
 * `confirm` type prompt
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
var chalk = require('chalk');
 | 
			
		||||
var { take, takeUntil } = require('rxjs/operators');
 | 
			
		||||
var Base = require('./base');
 | 
			
		||||
var observe = require('../utils/events');
 | 
			
		||||
 | 
			
		||||
class ConfirmPrompt extends Base {
 | 
			
		||||
  constructor(questions, rl, answers) {
 | 
			
		||||
    super(questions, rl, answers);
 | 
			
		||||
 | 
			
		||||
    var rawDefault = true;
 | 
			
		||||
 | 
			
		||||
    _.extend(this.opt, {
 | 
			
		||||
      filter: function(input) {
 | 
			
		||||
        var value = rawDefault;
 | 
			
		||||
        if (input != null && input !== '') {
 | 
			
		||||
          value = /^y(es)?/i.test(input);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return value;
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    if (_.isBoolean(this.opt.default)) {
 | 
			
		||||
      rawDefault = this.opt.default;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.opt.default = rawDefault ? 'Y/n' : 'y/N';
 | 
			
		||||
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Start the Inquiry session
 | 
			
		||||
   * @param  {Function} cb   Callback when prompt is done
 | 
			
		||||
   * @return {this}
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  _run(cb) {
 | 
			
		||||
    this.done = cb;
 | 
			
		||||
 | 
			
		||||
    // Once user confirm (enter key)
 | 
			
		||||
    var events = observe(this.rl);
 | 
			
		||||
    events.keypress.pipe(takeUntil(events.line)).forEach(this.onKeypress.bind(this));
 | 
			
		||||
 | 
			
		||||
    events.line.pipe(take(1)).forEach(this.onEnd.bind(this));
 | 
			
		||||
 | 
			
		||||
    // Init
 | 
			
		||||
    this.render();
 | 
			
		||||
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Render the prompt to screen
 | 
			
		||||
   * @return {ConfirmPrompt} self
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  render(answer) {
 | 
			
		||||
    var message = this.getQuestion();
 | 
			
		||||
 | 
			
		||||
    if (typeof answer === 'boolean') {
 | 
			
		||||
      message += chalk.cyan(answer ? 'Yes' : 'No');
 | 
			
		||||
    } else {
 | 
			
		||||
      message += this.rl.line;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.screen.render(message);
 | 
			
		||||
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press `enter` key
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  onEnd(input) {
 | 
			
		||||
    this.status = 'answered';
 | 
			
		||||
 | 
			
		||||
    var output = this.opt.filter(input);
 | 
			
		||||
    this.render(output);
 | 
			
		||||
 | 
			
		||||
    this.screen.done();
 | 
			
		||||
    this.done(output);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press a key
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  onKeypress() {
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = ConfirmPrompt;
 | 
			
		||||
							
								
								
									
										100
									
								
								node_modules/inquirer/lib/prompts/editor.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								node_modules/inquirer/lib/prompts/editor.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,100 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/**
 | 
			
		||||
 * `editor` type prompt
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var chalk = require('chalk');
 | 
			
		||||
var editAsync = require('external-editor').editAsync;
 | 
			
		||||
var Base = require('./base');
 | 
			
		||||
var observe = require('../utils/events');
 | 
			
		||||
var { Subject } = require('rxjs');
 | 
			
		||||
 | 
			
		||||
class EditorPrompt extends Base {
 | 
			
		||||
  /**
 | 
			
		||||
   * Start the Inquiry session
 | 
			
		||||
   * @param  {Function} cb      Callback when prompt is done
 | 
			
		||||
   * @return {this}
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  _run(cb) {
 | 
			
		||||
    this.done = cb;
 | 
			
		||||
 | 
			
		||||
    this.editorResult = new Subject();
 | 
			
		||||
 | 
			
		||||
    // Open Editor on "line" (Enter Key)
 | 
			
		||||
    var events = observe(this.rl);
 | 
			
		||||
    this.lineSubscription = events.line.subscribe(this.startExternalEditor.bind(this));
 | 
			
		||||
 | 
			
		||||
    // Trigger Validation when editor closes
 | 
			
		||||
    var validation = this.handleSubmitEvents(this.editorResult);
 | 
			
		||||
    validation.success.forEach(this.onEnd.bind(this));
 | 
			
		||||
    validation.error.forEach(this.onError.bind(this));
 | 
			
		||||
 | 
			
		||||
    // Prevents default from being printed on screen (can look weird with multiple lines)
 | 
			
		||||
    this.currentText = this.opt.default;
 | 
			
		||||
    this.opt.default = null;
 | 
			
		||||
 | 
			
		||||
    // Init
 | 
			
		||||
    this.render();
 | 
			
		||||
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Render the prompt to screen
 | 
			
		||||
   * @return {EditorPrompt} self
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  render(error) {
 | 
			
		||||
    var bottomContent = '';
 | 
			
		||||
    var message = this.getQuestion();
 | 
			
		||||
 | 
			
		||||
    if (this.status === 'answered') {
 | 
			
		||||
      message += chalk.dim('Received');
 | 
			
		||||
    } else {
 | 
			
		||||
      message += chalk.dim('Press <enter> to launch your preferred editor.');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (error) {
 | 
			
		||||
      bottomContent = chalk.red('>> ') + error;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.screen.render(message, bottomContent);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Launch $EDITOR on user press enter
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  startExternalEditor() {
 | 
			
		||||
    // Pause Readline to prevent stdin and stdout from being modified while the editor is showing
 | 
			
		||||
    this.rl.pause();
 | 
			
		||||
    editAsync(this.currentText, this.endExternalEditor.bind(this));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  endExternalEditor(error, result) {
 | 
			
		||||
    this.rl.resume();
 | 
			
		||||
    if (error) {
 | 
			
		||||
      this.editorResult.error(error);
 | 
			
		||||
    } else {
 | 
			
		||||
      this.editorResult.next(result);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onEnd(state) {
 | 
			
		||||
    this.editorResult.unsubscribe();
 | 
			
		||||
    this.lineSubscription.unsubscribe();
 | 
			
		||||
    this.answer = state.value;
 | 
			
		||||
    this.status = 'answered';
 | 
			
		||||
    // Re-render prompt
 | 
			
		||||
    this.render();
 | 
			
		||||
    this.screen.done();
 | 
			
		||||
    this.done(this.answer);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onError(state) {
 | 
			
		||||
    this.render(state.isValid);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = EditorPrompt;
 | 
			
		||||
							
								
								
									
										276
									
								
								node_modules/inquirer/lib/prompts/expand.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										276
									
								
								node_modules/inquirer/lib/prompts/expand.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,276 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/**
 | 
			
		||||
 * `rawlist` type prompt
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
var chalk = require('chalk');
 | 
			
		||||
var { map, takeUntil } = require('rxjs/operators');
 | 
			
		||||
var Base = require('./base');
 | 
			
		||||
var Separator = require('../objects/separator');
 | 
			
		||||
var observe = require('../utils/events');
 | 
			
		||||
var Paginator = require('../utils/paginator');
 | 
			
		||||
 | 
			
		||||
class ExpandPrompt extends Base {
 | 
			
		||||
  constructor(questions, rl, answers) {
 | 
			
		||||
    super(questions, rl, answers);
 | 
			
		||||
 | 
			
		||||
    if (!this.opt.choices) {
 | 
			
		||||
      this.throwParamError('choices');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.validateChoices(this.opt.choices);
 | 
			
		||||
 | 
			
		||||
    // Add the default `help` (/expand) option
 | 
			
		||||
    this.opt.choices.push({
 | 
			
		||||
      key: 'h',
 | 
			
		||||
      name: 'Help, list all options',
 | 
			
		||||
      value: 'help'
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    this.opt.validate = choice => {
 | 
			
		||||
      if (choice == null) {
 | 
			
		||||
        return 'Please enter a valid command';
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return choice !== 'help';
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // Setup the default string (capitalize the default key)
 | 
			
		||||
    this.opt.default = this.generateChoicesString(this.opt.choices, this.opt.default);
 | 
			
		||||
 | 
			
		||||
    this.paginator = new Paginator(this.screen);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Start the Inquiry session
 | 
			
		||||
   * @param  {Function} cb      Callback when prompt is done
 | 
			
		||||
   * @return {this}
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  _run(cb) {
 | 
			
		||||
    this.done = cb;
 | 
			
		||||
 | 
			
		||||
    // Save user answer and update prompt to show selected option.
 | 
			
		||||
    var events = observe(this.rl);
 | 
			
		||||
    var validation = this.handleSubmitEvents(
 | 
			
		||||
      events.line.pipe(map(this.getCurrentValue.bind(this)))
 | 
			
		||||
    );
 | 
			
		||||
    validation.success.forEach(this.onSubmit.bind(this));
 | 
			
		||||
    validation.error.forEach(this.onError.bind(this));
 | 
			
		||||
    this.keypressObs = events.keypress
 | 
			
		||||
      .pipe(takeUntil(validation.success))
 | 
			
		||||
      .forEach(this.onKeypress.bind(this));
 | 
			
		||||
 | 
			
		||||
    // Init the prompt
 | 
			
		||||
    this.render();
 | 
			
		||||
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Render the prompt to screen
 | 
			
		||||
   * @return {ExpandPrompt} self
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  render(error, hint) {
 | 
			
		||||
    var message = this.getQuestion();
 | 
			
		||||
    var bottomContent = '';
 | 
			
		||||
 | 
			
		||||
    if (this.status === 'answered') {
 | 
			
		||||
      message += chalk.cyan(this.answer);
 | 
			
		||||
    } else if (this.status === 'expanded') {
 | 
			
		||||
      var choicesStr = renderChoices(this.opt.choices, this.selectedKey);
 | 
			
		||||
      message += this.paginator.paginate(choicesStr, this.selectedKey, this.opt.pageSize);
 | 
			
		||||
      message += '\n  Answer: ';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    message += this.rl.line;
 | 
			
		||||
 | 
			
		||||
    if (error) {
 | 
			
		||||
      bottomContent = chalk.red('>> ') + error;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (hint) {
 | 
			
		||||
      bottomContent = chalk.cyan('>> ') + hint;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.screen.render(message, bottomContent);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getCurrentValue(input) {
 | 
			
		||||
    if (!input) {
 | 
			
		||||
      input = this.rawDefault;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var selected = this.opt.choices.where({ key: input.toLowerCase().trim() })[0];
 | 
			
		||||
    if (!selected) {
 | 
			
		||||
      return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return selected.value;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Generate the prompt choices string
 | 
			
		||||
   * @return {String}  Choices string
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  getChoices() {
 | 
			
		||||
    var output = '';
 | 
			
		||||
 | 
			
		||||
    this.opt.choices.forEach(choice => {
 | 
			
		||||
      output += '\n  ';
 | 
			
		||||
 | 
			
		||||
      if (choice.type === 'separator') {
 | 
			
		||||
        output += ' ' + choice;
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      var choiceStr = choice.key + ') ' + choice.name;
 | 
			
		||||
      if (this.selectedKey === choice.key) {
 | 
			
		||||
        choiceStr = chalk.cyan(choiceStr);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      output += choiceStr;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    return output;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onError(state) {
 | 
			
		||||
    if (state.value === 'help') {
 | 
			
		||||
      this.selectedKey = '';
 | 
			
		||||
      this.status = 'expanded';
 | 
			
		||||
      this.render();
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.render(state.isValid);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press `enter` key
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  onSubmit(state) {
 | 
			
		||||
    this.status = 'answered';
 | 
			
		||||
    var choice = this.opt.choices.where({ value: state.value })[0];
 | 
			
		||||
    this.answer = choice.short || choice.name;
 | 
			
		||||
 | 
			
		||||
    // Re-render prompt
 | 
			
		||||
    this.render();
 | 
			
		||||
    this.screen.done();
 | 
			
		||||
    this.done(state.value);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press a key
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  onKeypress() {
 | 
			
		||||
    this.selectedKey = this.rl.line.toLowerCase();
 | 
			
		||||
    var selected = this.opt.choices.where({ key: this.selectedKey })[0];
 | 
			
		||||
    if (this.status === 'expanded') {
 | 
			
		||||
      this.render();
 | 
			
		||||
    } else {
 | 
			
		||||
      this.render(null, selected ? selected.name : null);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Validate the choices
 | 
			
		||||
   * @param {Array} choices
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  validateChoices(choices) {
 | 
			
		||||
    var formatError;
 | 
			
		||||
    var errors = [];
 | 
			
		||||
    var keymap = {};
 | 
			
		||||
    choices.filter(Separator.exclude).forEach(choice => {
 | 
			
		||||
      if (!choice.key || choice.key.length !== 1) {
 | 
			
		||||
        formatError = true;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (keymap[choice.key]) {
 | 
			
		||||
        errors.push(choice.key);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      keymap[choice.key] = true;
 | 
			
		||||
      choice.key = String(choice.key).toLowerCase();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    if (formatError) {
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        'Format error: `key` param must be a single letter and is required.'
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (keymap.h) {
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        'Reserved key error: `key` param cannot be `h` - this value is reserved.'
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (errors.length) {
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        'Duplicate key error: `key` param must be unique. Duplicates: ' +
 | 
			
		||||
          _.uniq(errors).join(', ')
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Generate a string out of the choices keys
 | 
			
		||||
   * @param  {Array}  choices
 | 
			
		||||
   * @param  {Number|String} default - the choice index or name to capitalize
 | 
			
		||||
   * @return {String} The rendered choices key string
 | 
			
		||||
   */
 | 
			
		||||
  generateChoicesString(choices, defaultChoice) {
 | 
			
		||||
    var defIndex = choices.realLength - 1;
 | 
			
		||||
    if (_.isNumber(defaultChoice) && this.opt.choices.getChoice(defaultChoice)) {
 | 
			
		||||
      defIndex = defaultChoice;
 | 
			
		||||
    } else if (_.isString(defaultChoice)) {
 | 
			
		||||
      let index = _.findIndex(
 | 
			
		||||
        choices.realChoices,
 | 
			
		||||
        ({ value }) => value === defaultChoice
 | 
			
		||||
      );
 | 
			
		||||
      defIndex = index === -1 ? defIndex : index;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var defStr = this.opt.choices.pluck('key');
 | 
			
		||||
    this.rawDefault = defStr[defIndex];
 | 
			
		||||
    defStr[defIndex] = String(defStr[defIndex]).toUpperCase();
 | 
			
		||||
    return defStr.join('');
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Function for rendering checkbox choices
 | 
			
		||||
 * @param  {String} pointer Selected key
 | 
			
		||||
 * @return {String}         Rendered content
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
function renderChoices(choices, pointer) {
 | 
			
		||||
  var output = '';
 | 
			
		||||
 | 
			
		||||
  choices.forEach(choice => {
 | 
			
		||||
    output += '\n  ';
 | 
			
		||||
 | 
			
		||||
    if (choice.type === 'separator') {
 | 
			
		||||
      output += ' ' + choice;
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var choiceStr = choice.key + ') ' + choice.name;
 | 
			
		||||
    if (pointer === choice.key) {
 | 
			
		||||
      choiceStr = chalk.cyan(choiceStr);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    output += choiceStr;
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  return output;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = ExpandPrompt;
 | 
			
		||||
							
								
								
									
										113
									
								
								node_modules/inquirer/lib/prompts/input.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								node_modules/inquirer/lib/prompts/input.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,113 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/**
 | 
			
		||||
 * `input` type prompt
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var chalk = require('chalk');
 | 
			
		||||
var { map, takeUntil } = require('rxjs/operators');
 | 
			
		||||
var Base = require('./base');
 | 
			
		||||
var observe = require('../utils/events');
 | 
			
		||||
 | 
			
		||||
class InputPrompt extends Base {
 | 
			
		||||
  /**
 | 
			
		||||
   * Start the Inquiry session
 | 
			
		||||
   * @param  {Function} cb      Callback when prompt is done
 | 
			
		||||
   * @return {this}
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  _run(cb) {
 | 
			
		||||
    this.done = cb;
 | 
			
		||||
 | 
			
		||||
    // Once user confirm (enter key)
 | 
			
		||||
    var events = observe(this.rl);
 | 
			
		||||
    var submit = events.line.pipe(map(this.filterInput.bind(this)));
 | 
			
		||||
 | 
			
		||||
    var validation = this.handleSubmitEvents(submit);
 | 
			
		||||
    validation.success.forEach(this.onEnd.bind(this));
 | 
			
		||||
    validation.error.forEach(this.onError.bind(this));
 | 
			
		||||
 | 
			
		||||
    events.keypress
 | 
			
		||||
      .pipe(takeUntil(validation.success))
 | 
			
		||||
      .forEach(this.onKeypress.bind(this));
 | 
			
		||||
 | 
			
		||||
    // Init
 | 
			
		||||
    this.render();
 | 
			
		||||
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Render the prompt to screen
 | 
			
		||||
   * @return {InputPrompt} self
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  render(error) {
 | 
			
		||||
    var bottomContent = '';
 | 
			
		||||
    var appendContent = '';
 | 
			
		||||
    var message = this.getQuestion();
 | 
			
		||||
    var transformer = this.opt.transformer;
 | 
			
		||||
    var isFinal = this.status === 'answered';
 | 
			
		||||
 | 
			
		||||
    if (isFinal) {
 | 
			
		||||
      appendContent = this.answer;
 | 
			
		||||
    } else {
 | 
			
		||||
      appendContent = this.rl.line;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (transformer) {
 | 
			
		||||
      message += transformer(appendContent, this.answers, { isFinal });
 | 
			
		||||
    } else {
 | 
			
		||||
      message += isFinal ? chalk.cyan(appendContent) : appendContent;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (error) {
 | 
			
		||||
      bottomContent = chalk.red('>> ') + error;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.screen.render(message, bottomContent);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press `enter` key
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  filterInput(input) {
 | 
			
		||||
    if (!input) {
 | 
			
		||||
      return this.opt.default == null ? '' : this.opt.default;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return input;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onEnd(state) {
 | 
			
		||||
    this.answer = state.value;
 | 
			
		||||
    this.status = 'answered';
 | 
			
		||||
 | 
			
		||||
    // Re-render prompt
 | 
			
		||||
    this.render();
 | 
			
		||||
 | 
			
		||||
    this.screen.done();
 | 
			
		||||
    this.done(state.value);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onError(state) {
 | 
			
		||||
    this.rl.line += state.value;
 | 
			
		||||
    this.rl.cursor += state.value.length;
 | 
			
		||||
    this.render(state.isValid);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press a key
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  onKeypress() {
 | 
			
		||||
    // If user press a key, just clear the default value
 | 
			
		||||
    if (this.opt.default) {
 | 
			
		||||
      this.opt.default = undefined;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = InputPrompt;
 | 
			
		||||
							
								
								
									
										184
									
								
								node_modules/inquirer/lib/prompts/list.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								node_modules/inquirer/lib/prompts/list.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,184 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/**
 | 
			
		||||
 * `list` type prompt
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
var chalk = require('chalk');
 | 
			
		||||
var figures = require('figures');
 | 
			
		||||
var cliCursor = require('cli-cursor');
 | 
			
		||||
var runAsync = require('run-async');
 | 
			
		||||
var { flatMap, map, take, takeUntil } = require('rxjs/operators');
 | 
			
		||||
var Base = require('./base');
 | 
			
		||||
var observe = require('../utils/events');
 | 
			
		||||
var Paginator = require('../utils/paginator');
 | 
			
		||||
 | 
			
		||||
class ListPrompt extends Base {
 | 
			
		||||
  constructor(questions, rl, answers) {
 | 
			
		||||
    super(questions, rl, answers);
 | 
			
		||||
 | 
			
		||||
    if (!this.opt.choices) {
 | 
			
		||||
      this.throwParamError('choices');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.firstRender = true;
 | 
			
		||||
    this.selected = 0;
 | 
			
		||||
 | 
			
		||||
    var def = this.opt.default;
 | 
			
		||||
 | 
			
		||||
    // If def is a Number, then use as index. Otherwise, check for value.
 | 
			
		||||
    if (_.isNumber(def) && def >= 0 && def < this.opt.choices.realLength) {
 | 
			
		||||
      this.selected = def;
 | 
			
		||||
    } else if (!_.isNumber(def) && def != null) {
 | 
			
		||||
      let index = _.findIndex(this.opt.choices.realChoices, ({ value }) => value === def);
 | 
			
		||||
      this.selected = Math.max(index, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Make sure no default is set (so it won't be printed)
 | 
			
		||||
    this.opt.default = null;
 | 
			
		||||
 | 
			
		||||
    this.paginator = new Paginator(this.screen);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Start the Inquiry session
 | 
			
		||||
   * @param  {Function} cb      Callback when prompt is done
 | 
			
		||||
   * @return {this}
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  _run(cb) {
 | 
			
		||||
    this.done = cb;
 | 
			
		||||
 | 
			
		||||
    var self = this;
 | 
			
		||||
 | 
			
		||||
    var events = observe(this.rl);
 | 
			
		||||
    events.normalizedUpKey.pipe(takeUntil(events.line)).forEach(this.onUpKey.bind(this));
 | 
			
		||||
    events.normalizedDownKey
 | 
			
		||||
      .pipe(takeUntil(events.line))
 | 
			
		||||
      .forEach(this.onDownKey.bind(this));
 | 
			
		||||
    events.numberKey.pipe(takeUntil(events.line)).forEach(this.onNumberKey.bind(this));
 | 
			
		||||
    events.line
 | 
			
		||||
      .pipe(
 | 
			
		||||
        take(1),
 | 
			
		||||
        map(this.getCurrentValue.bind(this)),
 | 
			
		||||
        flatMap(value => runAsync(self.opt.filter)(value).catch(err => err))
 | 
			
		||||
      )
 | 
			
		||||
      .forEach(this.onSubmit.bind(this));
 | 
			
		||||
 | 
			
		||||
    // Init the prompt
 | 
			
		||||
    cliCursor.hide();
 | 
			
		||||
    this.render();
 | 
			
		||||
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Render the prompt to screen
 | 
			
		||||
   * @return {ListPrompt} self
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  render() {
 | 
			
		||||
    // Render question
 | 
			
		||||
    var message = this.getQuestion();
 | 
			
		||||
 | 
			
		||||
    if (this.firstRender) {
 | 
			
		||||
      message += chalk.dim('(Use arrow keys)');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Render choices or answer depending on the state
 | 
			
		||||
    if (this.status === 'answered') {
 | 
			
		||||
      message += chalk.cyan(this.opt.choices.getChoice(this.selected).short);
 | 
			
		||||
    } else {
 | 
			
		||||
      var choicesStr = listRender(this.opt.choices, this.selected);
 | 
			
		||||
      var indexPosition = this.opt.choices.indexOf(
 | 
			
		||||
        this.opt.choices.getChoice(this.selected)
 | 
			
		||||
      );
 | 
			
		||||
      message +=
 | 
			
		||||
        '\n' + this.paginator.paginate(choicesStr, indexPosition, this.opt.pageSize);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.firstRender = false;
 | 
			
		||||
 | 
			
		||||
    this.screen.render(message);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press `enter` key
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  onSubmit(value) {
 | 
			
		||||
    this.status = 'answered';
 | 
			
		||||
 | 
			
		||||
    // Rerender prompt
 | 
			
		||||
    this.render();
 | 
			
		||||
 | 
			
		||||
    this.screen.done();
 | 
			
		||||
    cliCursor.show();
 | 
			
		||||
    this.done(value);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getCurrentValue() {
 | 
			
		||||
    return this.opt.choices.getChoice(this.selected).value;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press a key
 | 
			
		||||
   */
 | 
			
		||||
  onUpKey() {
 | 
			
		||||
    var len = this.opt.choices.realLength;
 | 
			
		||||
    this.selected = this.selected > 0 ? this.selected - 1 : len - 1;
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onDownKey() {
 | 
			
		||||
    var len = this.opt.choices.realLength;
 | 
			
		||||
    this.selected = this.selected < len - 1 ? this.selected + 1 : 0;
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onNumberKey(input) {
 | 
			
		||||
    if (input <= this.opt.choices.realLength) {
 | 
			
		||||
      this.selected = input - 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Function for rendering list choices
 | 
			
		||||
 * @param  {Number} pointer Position of the pointer
 | 
			
		||||
 * @return {String}         Rendered content
 | 
			
		||||
 */
 | 
			
		||||
function listRender(choices, pointer) {
 | 
			
		||||
  var output = '';
 | 
			
		||||
  var separatorOffset = 0;
 | 
			
		||||
 | 
			
		||||
  choices.forEach((choice, i) => {
 | 
			
		||||
    if (choice.type === 'separator') {
 | 
			
		||||
      separatorOffset++;
 | 
			
		||||
      output += '  ' + choice + '\n';
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (choice.disabled) {
 | 
			
		||||
      separatorOffset++;
 | 
			
		||||
      output += '  - ' + choice.name;
 | 
			
		||||
      output += ' (' + (_.isString(choice.disabled) ? choice.disabled : 'Disabled') + ')';
 | 
			
		||||
      output += '\n';
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var isSelected = i - separatorOffset === pointer;
 | 
			
		||||
    var line = (isSelected ? figures.pointer + ' ' : '  ') + choice.name;
 | 
			
		||||
    if (isSelected) {
 | 
			
		||||
      line = chalk.cyan(line);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    output += line + ' \n';
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  return output.replace(/\n$/, '');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = ListPrompt;
 | 
			
		||||
							
								
								
									
										29
									
								
								node_modules/inquirer/lib/prompts/number.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								node_modules/inquirer/lib/prompts/number.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/**
 | 
			
		||||
 * `input` type prompt
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var Input = require('./input');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Extention of the Input prompt specifically for use with number inputs.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
class NumberPrompt extends Input {
 | 
			
		||||
  filterInput(input) {
 | 
			
		||||
    if (input && typeof input === 'string') {
 | 
			
		||||
      input = input.trim();
 | 
			
		||||
      // Match a number in the input
 | 
			
		||||
      let numberMatch = input.match(/(^-?\d+|^\d+\.\d*|^\d*\.\d+)(e\d+)?$/);
 | 
			
		||||
      // If a number is found, return that input.
 | 
			
		||||
      if (numberMatch) {
 | 
			
		||||
        return Number(numberMatch[0]);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // If the input was invalid return the default value.
 | 
			
		||||
    return this.opt.default == null ? NaN : this.opt.default;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = NumberPrompt;
 | 
			
		||||
							
								
								
									
										113
									
								
								node_modules/inquirer/lib/prompts/password.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								node_modules/inquirer/lib/prompts/password.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,113 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/**
 | 
			
		||||
 * `password` type prompt
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var chalk = require('chalk');
 | 
			
		||||
var { map, takeUntil } = require('rxjs/operators');
 | 
			
		||||
var Base = require('./base');
 | 
			
		||||
var observe = require('../utils/events');
 | 
			
		||||
 | 
			
		||||
function mask(input, maskChar) {
 | 
			
		||||
  input = String(input);
 | 
			
		||||
  maskChar = typeof maskChar === 'string' ? maskChar : '*';
 | 
			
		||||
  if (input.length === 0) {
 | 
			
		||||
    return '';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return new Array(input.length + 1).join(maskChar);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class PasswordPrompt extends Base {
 | 
			
		||||
  /**
 | 
			
		||||
   * Start the Inquiry session
 | 
			
		||||
   * @param  {Function} cb      Callback when prompt is done
 | 
			
		||||
   * @return {this}
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  _run(cb) {
 | 
			
		||||
    this.done = cb;
 | 
			
		||||
 | 
			
		||||
    var events = observe(this.rl);
 | 
			
		||||
 | 
			
		||||
    // Once user confirm (enter key)
 | 
			
		||||
    var submit = events.line.pipe(map(this.filterInput.bind(this)));
 | 
			
		||||
 | 
			
		||||
    var validation = this.handleSubmitEvents(submit);
 | 
			
		||||
    validation.success.forEach(this.onEnd.bind(this));
 | 
			
		||||
    validation.error.forEach(this.onError.bind(this));
 | 
			
		||||
 | 
			
		||||
    events.keypress
 | 
			
		||||
      .pipe(takeUntil(validation.success))
 | 
			
		||||
      .forEach(this.onKeypress.bind(this));
 | 
			
		||||
 | 
			
		||||
    // Init
 | 
			
		||||
    this.render();
 | 
			
		||||
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Render the prompt to screen
 | 
			
		||||
   * @return {PasswordPrompt} self
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  render(error) {
 | 
			
		||||
    var message = this.getQuestion();
 | 
			
		||||
    var bottomContent = '';
 | 
			
		||||
 | 
			
		||||
    if (this.status === 'answered') {
 | 
			
		||||
      message += this.opt.mask
 | 
			
		||||
        ? chalk.cyan(mask(this.answer, this.opt.mask))
 | 
			
		||||
        : chalk.italic.dim('[hidden]');
 | 
			
		||||
    } else if (this.opt.mask) {
 | 
			
		||||
      message += mask(this.rl.line || '', this.opt.mask);
 | 
			
		||||
    } else {
 | 
			
		||||
      message += chalk.italic.dim('[input is hidden] ');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (error) {
 | 
			
		||||
      bottomContent = '\n' + chalk.red('>> ') + error;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.screen.render(message, bottomContent);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press `enter` key
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  filterInput(input) {
 | 
			
		||||
    if (!input) {
 | 
			
		||||
      return this.opt.default == null ? '' : this.opt.default;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return input;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onEnd(state) {
 | 
			
		||||
    this.status = 'answered';
 | 
			
		||||
    this.answer = state.value;
 | 
			
		||||
 | 
			
		||||
    // Re-render prompt
 | 
			
		||||
    this.render();
 | 
			
		||||
 | 
			
		||||
    this.screen.done();
 | 
			
		||||
    this.done(state.value);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onError(state) {
 | 
			
		||||
    this.render(state.isValid);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onKeypress() {
 | 
			
		||||
    // If user press a key, just clear the default value
 | 
			
		||||
    if (this.opt.default) {
 | 
			
		||||
      this.opt.default = undefined;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = PasswordPrompt;
 | 
			
		||||
							
								
								
									
										216
									
								
								node_modules/inquirer/lib/prompts/rawlist.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										216
									
								
								node_modules/inquirer/lib/prompts/rawlist.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,216 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/**
 | 
			
		||||
 * `rawlist` type prompt
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
var chalk = require('chalk');
 | 
			
		||||
var { map, takeUntil } = require('rxjs/operators');
 | 
			
		||||
var Base = require('./base');
 | 
			
		||||
var Separator = require('../objects/separator');
 | 
			
		||||
var observe = require('../utils/events');
 | 
			
		||||
var Paginator = require('../utils/paginator');
 | 
			
		||||
 | 
			
		||||
class RawListPrompt extends Base {
 | 
			
		||||
  constructor(questions, rl, answers) {
 | 
			
		||||
    super(questions, rl, answers);
 | 
			
		||||
 | 
			
		||||
    if (!this.opt.choices) {
 | 
			
		||||
      this.throwParamError('choices');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.opt.validChoices = this.opt.choices.filter(Separator.exclude);
 | 
			
		||||
 | 
			
		||||
    this.selected = 0;
 | 
			
		||||
    this.rawDefault = 0;
 | 
			
		||||
 | 
			
		||||
    _.extend(this.opt, {
 | 
			
		||||
      validate: function(val) {
 | 
			
		||||
        return val != null;
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    var def = this.opt.default;
 | 
			
		||||
    if (_.isNumber(def) && def >= 0 && def < this.opt.choices.realLength) {
 | 
			
		||||
      this.selected = def;
 | 
			
		||||
      this.rawDefault = def;
 | 
			
		||||
    } else if (!_.isNumber(def) && def != null) {
 | 
			
		||||
      let index = _.findIndex(this.opt.choices.realChoices, ({ value }) => value === def);
 | 
			
		||||
      let safeIndex = Math.max(index, 0);
 | 
			
		||||
      this.selected = safeIndex;
 | 
			
		||||
      this.rawDefault = safeIndex;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Make sure no default is set (so it won't be printed)
 | 
			
		||||
    this.opt.default = null;
 | 
			
		||||
 | 
			
		||||
    this.paginator = new Paginator();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Start the Inquiry session
 | 
			
		||||
   * @param  {Function} cb      Callback when prompt is done
 | 
			
		||||
   * @return {this}
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  _run(cb) {
 | 
			
		||||
    this.done = cb;
 | 
			
		||||
 | 
			
		||||
    // Once user confirm (enter key)
 | 
			
		||||
    var events = observe(this.rl);
 | 
			
		||||
    var submit = events.line.pipe(map(this.getCurrentValue.bind(this)));
 | 
			
		||||
 | 
			
		||||
    var validation = this.handleSubmitEvents(submit);
 | 
			
		||||
    validation.success.forEach(this.onEnd.bind(this));
 | 
			
		||||
    validation.error.forEach(this.onError.bind(this));
 | 
			
		||||
 | 
			
		||||
    events.keypress
 | 
			
		||||
      .pipe(takeUntil(validation.success))
 | 
			
		||||
      .forEach(this.onKeypress.bind(this));
 | 
			
		||||
    events.normalizedUpKey.pipe(takeUntil(events.line)).forEach(this.onUpKey.bind(this));
 | 
			
		||||
    events.normalizedDownKey
 | 
			
		||||
      .pipe(takeUntil(events.line))
 | 
			
		||||
      .forEach(this.onDownKey.bind(this));
 | 
			
		||||
 | 
			
		||||
    // Init the prompt
 | 
			
		||||
    this.render();
 | 
			
		||||
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Render the prompt to screen
 | 
			
		||||
   * @return {RawListPrompt} self
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  render(error) {
 | 
			
		||||
    // Render question
 | 
			
		||||
    var message = this.getQuestion();
 | 
			
		||||
    var bottomContent = '';
 | 
			
		||||
 | 
			
		||||
    if (this.status === 'answered') {
 | 
			
		||||
      message += chalk.cyan(this.answer);
 | 
			
		||||
    } else {
 | 
			
		||||
      var choicesStr = renderChoices(this.opt.choices, this.selected);
 | 
			
		||||
      message +=
 | 
			
		||||
        '\n' + this.paginator.paginate(choicesStr, this.selected, this.opt.pageSize);
 | 
			
		||||
      message += '\n  Answer: ';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    message += this.rl.line;
 | 
			
		||||
 | 
			
		||||
    if (error) {
 | 
			
		||||
      bottomContent = '\n' + chalk.red('>> ') + error;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.screen.render(message, bottomContent);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press `enter` key
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  getCurrentValue(index) {
 | 
			
		||||
    if (index == null || index === '') {
 | 
			
		||||
      index = this.rawDefault;
 | 
			
		||||
    } else {
 | 
			
		||||
      index -= 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var choice = this.opt.choices.getChoice(index);
 | 
			
		||||
    return choice ? choice.value : null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onEnd(state) {
 | 
			
		||||
    this.status = 'answered';
 | 
			
		||||
    this.answer = state.value;
 | 
			
		||||
 | 
			
		||||
    // Re-render prompt
 | 
			
		||||
    this.render();
 | 
			
		||||
 | 
			
		||||
    this.screen.done();
 | 
			
		||||
    this.done(state.value);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onError() {
 | 
			
		||||
    this.render('Please enter a valid index');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press a key
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  onKeypress() {
 | 
			
		||||
    var index = this.rl.line.length ? Number(this.rl.line) - 1 : 0;
 | 
			
		||||
 | 
			
		||||
    if (this.opt.choices.getChoice(index)) {
 | 
			
		||||
      this.selected = index;
 | 
			
		||||
    } else {
 | 
			
		||||
      this.selected = undefined;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press up key
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  onUpKey() {
 | 
			
		||||
    this.onArrowKey('up');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press down key
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  onDownKey() {
 | 
			
		||||
    this.onArrowKey('down');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * When user press up or down key
 | 
			
		||||
   * @param {String} type Arrow type: up or down
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  onArrowKey(type) {
 | 
			
		||||
    var index = this.rl.line.length ? Number(this.rl.line) - 1 : 0;
 | 
			
		||||
    if (type === 'up') index = index === 0 ? this.opt.choices.length - 1 : index - 1;
 | 
			
		||||
    else index = index === this.opt.choices.length - 1 ? 0 : index + 1;
 | 
			
		||||
    this.rl.line = String(index + 1);
 | 
			
		||||
    this.onKeypress();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Function for rendering list choices
 | 
			
		||||
 * @param  {Number} pointer Position of the pointer
 | 
			
		||||
 * @return {String}         Rendered content
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
function renderChoices(choices, pointer) {
 | 
			
		||||
  var output = '';
 | 
			
		||||
  var separatorOffset = 0;
 | 
			
		||||
 | 
			
		||||
  choices.forEach(function(choice, i) {
 | 
			
		||||
    output += '\n  ';
 | 
			
		||||
 | 
			
		||||
    if (choice.type === 'separator') {
 | 
			
		||||
      separatorOffset++;
 | 
			
		||||
      output += ' ' + choice;
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var index = i - separatorOffset;
 | 
			
		||||
    var display = index + 1 + ') ' + choice.name;
 | 
			
		||||
    if (index === pointer) {
 | 
			
		||||
      display = chalk.cyan(display);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    output += display;
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  return output;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = RawListPrompt;
 | 
			
		||||
							
								
								
									
										83
									
								
								node_modules/inquirer/lib/ui/baseUI.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								node_modules/inquirer/lib/ui/baseUI.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,83 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
var MuteStream = require('mute-stream');
 | 
			
		||||
var readline = require('readline');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Base interface class other can inherits from
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
class UI {
 | 
			
		||||
  constructor(opt) {
 | 
			
		||||
    // Instantiate the Readline interface
 | 
			
		||||
    // @Note: Don't reassign if already present (allow test to override the Stream)
 | 
			
		||||
    if (!this.rl) {
 | 
			
		||||
      this.rl = readline.createInterface(setupReadlineOptions(opt));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.rl.resume();
 | 
			
		||||
 | 
			
		||||
    this.onForceClose = this.onForceClose.bind(this);
 | 
			
		||||
 | 
			
		||||
    // Make sure new prompt start on a newline when closing
 | 
			
		||||
    process.on('exit', this.onForceClose);
 | 
			
		||||
 | 
			
		||||
    // Terminate process on SIGINT (which will call process.on('exit') in return)
 | 
			
		||||
    this.rl.on('SIGINT', this.onForceClose);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Handle the ^C exit
 | 
			
		||||
   * @return {null}
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  onForceClose() {
 | 
			
		||||
    this.close();
 | 
			
		||||
    process.kill(process.pid, 'SIGINT');
 | 
			
		||||
    console.log('');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Close the interface and cleanup listeners
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  close() {
 | 
			
		||||
    // Remove events listeners
 | 
			
		||||
    this.rl.removeListener('SIGINT', this.onForceClose);
 | 
			
		||||
    process.removeListener('exit', this.onForceClose);
 | 
			
		||||
 | 
			
		||||
    this.rl.output.unmute();
 | 
			
		||||
 | 
			
		||||
    if (this.activePrompt && typeof this.activePrompt.close === 'function') {
 | 
			
		||||
      this.activePrompt.close();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Close the readline
 | 
			
		||||
    this.rl.output.end();
 | 
			
		||||
    this.rl.pause();
 | 
			
		||||
    this.rl.close();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function setupReadlineOptions(opt) {
 | 
			
		||||
  opt = opt || {};
 | 
			
		||||
 | 
			
		||||
  // Default `input` to stdin
 | 
			
		||||
  var input = opt.input || process.stdin;
 | 
			
		||||
 | 
			
		||||
  // Add mute capabilities to the output
 | 
			
		||||
  var ms = new MuteStream();
 | 
			
		||||
  ms.pipe(opt.output || process.stdout);
 | 
			
		||||
  var output = ms;
 | 
			
		||||
 | 
			
		||||
  return _.extend(
 | 
			
		||||
    {
 | 
			
		||||
      terminal: true,
 | 
			
		||||
      input: input,
 | 
			
		||||
      output: output
 | 
			
		||||
    },
 | 
			
		||||
    _.omit(opt, ['input', 'output'])
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = UI;
 | 
			
		||||
							
								
								
									
										100
									
								
								node_modules/inquirer/lib/ui/bottom-bar.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								node_modules/inquirer/lib/ui/bottom-bar.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,100 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/**
 | 
			
		||||
 * Sticky bottom bar user interface
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var through = require('through');
 | 
			
		||||
var Base = require('./baseUI');
 | 
			
		||||
var rlUtils = require('../utils/readline');
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
 | 
			
		||||
class BottomBar extends Base {
 | 
			
		||||
  constructor(opt) {
 | 
			
		||||
    opt = opt || {};
 | 
			
		||||
 | 
			
		||||
    super(opt);
 | 
			
		||||
 | 
			
		||||
    this.log = through(this.writeLog.bind(this));
 | 
			
		||||
    this.bottomBar = opt.bottomBar || '';
 | 
			
		||||
    this.render();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Render the prompt to screen
 | 
			
		||||
   * @return {BottomBar} self
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  render() {
 | 
			
		||||
    this.write(this.bottomBar);
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  clean() {
 | 
			
		||||
    rlUtils.clearLine(this.rl, this.bottomBar.split('\n').length);
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Update the bottom bar content and rerender
 | 
			
		||||
   * @param  {String} bottomBar Bottom bar content
 | 
			
		||||
   * @return {BottomBar}           self
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  updateBottomBar(bottomBar) {
 | 
			
		||||
    rlUtils.clearLine(this.rl, 1);
 | 
			
		||||
    this.rl.output.unmute();
 | 
			
		||||
    this.clean();
 | 
			
		||||
    this.bottomBar = bottomBar;
 | 
			
		||||
    this.render();
 | 
			
		||||
    this.rl.output.mute();
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Write out log data
 | 
			
		||||
   * @param {String} data - The log data to be output
 | 
			
		||||
   * @return {BottomBar} self
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  writeLog(data) {
 | 
			
		||||
    this.rl.output.unmute();
 | 
			
		||||
    this.clean();
 | 
			
		||||
    this.rl.output.write(this.enforceLF(data.toString()));
 | 
			
		||||
    this.render();
 | 
			
		||||
    this.rl.output.mute();
 | 
			
		||||
    return this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Make sure line end on a line feed
 | 
			
		||||
   * @param  {String} str Input string
 | 
			
		||||
   * @return {String}     The input string with a final line feed
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  enforceLF(str) {
 | 
			
		||||
    return str.match(/[\r\n]$/) ? str : str + '\n';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Helper for writing message in Prompt
 | 
			
		||||
   * @param {BottomBar} prompt  - The Prompt object that extends tty
 | 
			
		||||
   * @param {String} message - The message to be output
 | 
			
		||||
   */
 | 
			
		||||
  write(message) {
 | 
			
		||||
    var msgLines = message.split(/\n/);
 | 
			
		||||
    this.height = msgLines.length;
 | 
			
		||||
 | 
			
		||||
    // Write message to screen and setPrompt to control backspace
 | 
			
		||||
    this.rl.setPrompt(_.last(msgLines));
 | 
			
		||||
 | 
			
		||||
    if (this.rl.output.rows === 0 && this.rl.output.columns === 0) {
 | 
			
		||||
      /* When it's a tty through serial port there's no terminal info and the render will malfunction,
 | 
			
		||||
         so we need enforce the cursor to locate to the leftmost position for rendering. */
 | 
			
		||||
      rlUtils.left(this.rl, message.length + this.rl.line.length);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.rl.output.write(message);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = BottomBar;
 | 
			
		||||
							
								
								
									
										124
									
								
								node_modules/inquirer/lib/ui/prompt.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								node_modules/inquirer/lib/ui/prompt.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,124 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
var { defer, empty, from, of } = require('rxjs');
 | 
			
		||||
var { concatMap, filter, publish, reduce } = require('rxjs/operators');
 | 
			
		||||
var runAsync = require('run-async');
 | 
			
		||||
var utils = require('../utils/utils');
 | 
			
		||||
var Base = require('./baseUI');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Base interface class other can inherits from
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
class PromptUI extends Base {
 | 
			
		||||
  constructor(prompts, opt) {
 | 
			
		||||
    super(opt);
 | 
			
		||||
    this.prompts = prompts;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  run(questions) {
 | 
			
		||||
    // Keep global reference to the answers
 | 
			
		||||
    this.answers = {};
 | 
			
		||||
 | 
			
		||||
    // Make sure questions is an array.
 | 
			
		||||
    if (_.isPlainObject(questions)) {
 | 
			
		||||
      questions = [questions];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Create an observable, unless we received one as parameter.
 | 
			
		||||
    // Note: As this is a public interface, we cannot do an instanceof check as we won't
 | 
			
		||||
    // be using the exact same object in memory.
 | 
			
		||||
    var obs = _.isArray(questions) ? from(questions) : questions;
 | 
			
		||||
 | 
			
		||||
    this.process = obs.pipe(
 | 
			
		||||
      concatMap(this.processQuestion.bind(this)),
 | 
			
		||||
      publish() // Creates a hot Observable. It prevents duplicating prompts.
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    this.process.connect();
 | 
			
		||||
 | 
			
		||||
    return this.process
 | 
			
		||||
      .pipe(
 | 
			
		||||
        reduce((answers, answer) => {
 | 
			
		||||
          _.set(this.answers, answer.name, answer.answer);
 | 
			
		||||
          return this.answers;
 | 
			
		||||
        }, {})
 | 
			
		||||
      )
 | 
			
		||||
      .toPromise(Promise)
 | 
			
		||||
      .then(this.onCompletion.bind(this));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Once all prompt are over
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  onCompletion() {
 | 
			
		||||
    this.close();
 | 
			
		||||
 | 
			
		||||
    return this.answers;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  processQuestion(question) {
 | 
			
		||||
    question = _.clone(question);
 | 
			
		||||
    return defer(() => {
 | 
			
		||||
      var obs = of(question);
 | 
			
		||||
 | 
			
		||||
      return obs.pipe(
 | 
			
		||||
        concatMap(this.setDefaultType.bind(this)),
 | 
			
		||||
        concatMap(this.filterIfRunnable.bind(this)),
 | 
			
		||||
        concatMap(() =>
 | 
			
		||||
          utils.fetchAsyncQuestionProperty(question, 'message', this.answers)
 | 
			
		||||
        ),
 | 
			
		||||
        concatMap(() =>
 | 
			
		||||
          utils.fetchAsyncQuestionProperty(question, 'default', this.answers)
 | 
			
		||||
        ),
 | 
			
		||||
        concatMap(() =>
 | 
			
		||||
          utils.fetchAsyncQuestionProperty(question, 'choices', this.answers)
 | 
			
		||||
        ),
 | 
			
		||||
        concatMap(this.fetchAnswer.bind(this))
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  fetchAnswer(question) {
 | 
			
		||||
    var Prompt = this.prompts[question.type];
 | 
			
		||||
    this.activePrompt = new Prompt(question, this.rl, this.answers);
 | 
			
		||||
    return defer(() =>
 | 
			
		||||
      from(
 | 
			
		||||
        this.activePrompt.run().then(answer => ({ name: question.name, answer: answer }))
 | 
			
		||||
      )
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  setDefaultType(question) {
 | 
			
		||||
    // Default type to input
 | 
			
		||||
    if (!this.prompts[question.type]) {
 | 
			
		||||
      question.type = 'input';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return defer(() => of(question));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  filterIfRunnable(question) {
 | 
			
		||||
    if (question.when === false) {
 | 
			
		||||
      return empty();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!_.isFunction(question.when)) {
 | 
			
		||||
      return of(question);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var answers = this.answers;
 | 
			
		||||
    return defer(() =>
 | 
			
		||||
      from(
 | 
			
		||||
        runAsync(question.when)(answers).then(shouldRun => {
 | 
			
		||||
          if (shouldRun) {
 | 
			
		||||
            return question;
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
      ).pipe(filter(val => val != null))
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = PromptUI;
 | 
			
		||||
							
								
								
									
										53
									
								
								node_modules/inquirer/lib/utils/events.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								node_modules/inquirer/lib/utils/events.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,53 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
var { fromEvent } = require('rxjs');
 | 
			
		||||
var { filter, map, share } = require('rxjs/operators');
 | 
			
		||||
 | 
			
		||||
function normalizeKeypressEvents(value, key) {
 | 
			
		||||
  return { value: value, key: key || {} };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = function(rl) {
 | 
			
		||||
  var keypress = fromEvent(rl.input, 'keypress', normalizeKeypressEvents)
 | 
			
		||||
    // Ignore `enter` key. On the readline, we only care about the `line` event.
 | 
			
		||||
    .pipe(filter(({ key }) => key.name !== 'enter' && key.name !== 'return'));
 | 
			
		||||
 | 
			
		||||
  return {
 | 
			
		||||
    line: fromEvent(rl, 'line'),
 | 
			
		||||
    keypress: keypress,
 | 
			
		||||
 | 
			
		||||
    normalizedUpKey: keypress.pipe(
 | 
			
		||||
      filter(
 | 
			
		||||
        ({ key }) =>
 | 
			
		||||
          key.name === 'up' || key.name === 'k' || (key.name === 'p' && key.ctrl)
 | 
			
		||||
      ),
 | 
			
		||||
      share()
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
    normalizedDownKey: keypress.pipe(
 | 
			
		||||
      filter(
 | 
			
		||||
        ({ key }) =>
 | 
			
		||||
          key.name === 'down' || key.name === 'j' || (key.name === 'n' && key.ctrl)
 | 
			
		||||
      ),
 | 
			
		||||
      share()
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
    numberKey: keypress.pipe(
 | 
			
		||||
      filter(e => e.value && '123456789'.indexOf(e.value) >= 0),
 | 
			
		||||
      map(e => Number(e.value)),
 | 
			
		||||
      share()
 | 
			
		||||
    ),
 | 
			
		||||
 | 
			
		||||
    spaceKey: keypress.pipe(
 | 
			
		||||
      filter(({ key }) => key && key.name === 'space'),
 | 
			
		||||
      share()
 | 
			
		||||
    ),
 | 
			
		||||
    aKey: keypress.pipe(
 | 
			
		||||
      filter(({ key }) => key && key.name === 'a'),
 | 
			
		||||
      share()
 | 
			
		||||
    ),
 | 
			
		||||
    iKey: keypress.pipe(
 | 
			
		||||
      filter(({ key }) => key && key.name === 'i'),
 | 
			
		||||
      share()
 | 
			
		||||
    )
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								node_modules/inquirer/lib/utils/paginator.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								node_modules/inquirer/lib/utils/paginator.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,54 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
var chalk = require('chalk');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The paginator keeps track of a pointer index in a list and returns
 | 
			
		||||
 * a subset of the choices if the list is too long.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
class Paginator {
 | 
			
		||||
  constructor(screen) {
 | 
			
		||||
    this.pointer = 0;
 | 
			
		||||
    this.lastIndex = 0;
 | 
			
		||||
    this.screen = screen;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  paginate(output, active, pageSize) {
 | 
			
		||||
    pageSize = pageSize || 7;
 | 
			
		||||
    var middleOfList = Math.floor(pageSize / 2);
 | 
			
		||||
    var lines = output.split('\n');
 | 
			
		||||
 | 
			
		||||
    if (this.screen) {
 | 
			
		||||
      lines = this.screen.breakLines(lines);
 | 
			
		||||
      active = _.sum(lines.map(lineParts => lineParts.length).splice(0, active));
 | 
			
		||||
      lines = _.flatten(lines);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Make sure there's enough lines to paginate
 | 
			
		||||
    if (lines.length <= pageSize) {
 | 
			
		||||
      return output;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Move the pointer only when the user go down and limit it to the middle of the list
 | 
			
		||||
    if (
 | 
			
		||||
      this.pointer < middleOfList &&
 | 
			
		||||
      this.lastIndex < active &&
 | 
			
		||||
      active - this.lastIndex < pageSize
 | 
			
		||||
    ) {
 | 
			
		||||
      this.pointer = Math.min(middleOfList, this.pointer + active - this.lastIndex);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.lastIndex = active;
 | 
			
		||||
 | 
			
		||||
    // Duplicate the lines so it give an infinite list look
 | 
			
		||||
    var infinite = _.flatten([lines, lines, lines]);
 | 
			
		||||
    var topIndex = Math.max(0, active + lines.length - this.pointer);
 | 
			
		||||
 | 
			
		||||
    var section = infinite.splice(topIndex, pageSize).join('\n');
 | 
			
		||||
    return section + '\n' + chalk.dim('(Move up and down to reveal more choices)');
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = Paginator;
 | 
			
		||||
							
								
								
									
										51
									
								
								node_modules/inquirer/lib/utils/readline.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								node_modules/inquirer/lib/utils/readline.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
var ansiEscapes = require('ansi-escapes');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Move cursor left by `x`
 | 
			
		||||
 * @param  {Readline} rl - Readline instance
 | 
			
		||||
 * @param  {Number}   x  - How far to go left (default to 1)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
exports.left = function(rl, x) {
 | 
			
		||||
  rl.output.write(ansiEscapes.cursorBackward(x));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Move cursor right by `x`
 | 
			
		||||
 * @param  {Readline} rl - Readline instance
 | 
			
		||||
 * @param  {Number}   x  - How far to go left (default to 1)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
exports.right = function(rl, x) {
 | 
			
		||||
  rl.output.write(ansiEscapes.cursorForward(x));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Move cursor up by `x`
 | 
			
		||||
 * @param  {Readline} rl - Readline instance
 | 
			
		||||
 * @param  {Number}   x  - How far to go up (default to 1)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
exports.up = function(rl, x) {
 | 
			
		||||
  rl.output.write(ansiEscapes.cursorUp(x));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Move cursor down by `x`
 | 
			
		||||
 * @param  {Readline} rl - Readline instance
 | 
			
		||||
 * @param  {Number}   x  - How far to go down (default to 1)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
exports.down = function(rl, x) {
 | 
			
		||||
  rl.output.write(ansiEscapes.cursorDown(x));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Clear current line
 | 
			
		||||
 * @param  {Readline} rl  - Readline instance
 | 
			
		||||
 * @param  {Number}   len - number of line to delete
 | 
			
		||||
 */
 | 
			
		||||
exports.clearLine = function(rl, len) {
 | 
			
		||||
  rl.output.write(ansiEscapes.eraseLines(len));
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										142
									
								
								node_modules/inquirer/lib/utils/screen-manager.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								node_modules/inquirer/lib/utils/screen-manager.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,142 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
var util = require('./readline');
 | 
			
		||||
var cliWidth = require('cli-width');
 | 
			
		||||
var stripAnsi = require('strip-ansi');
 | 
			
		||||
var stringWidth = require('string-width');
 | 
			
		||||
 | 
			
		||||
function height(content) {
 | 
			
		||||
  return content.split('\n').length;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function lastLine(content) {
 | 
			
		||||
  return _.last(content.split('\n'));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class ScreenManager {
 | 
			
		||||
  constructor(rl) {
 | 
			
		||||
    // These variables are keeping information to allow correct prompt re-rendering
 | 
			
		||||
    this.height = 0;
 | 
			
		||||
    this.extraLinesUnderPrompt = 0;
 | 
			
		||||
 | 
			
		||||
    this.rl = rl;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  render(content, bottomContent) {
 | 
			
		||||
    this.rl.output.unmute();
 | 
			
		||||
    this.clean(this.extraLinesUnderPrompt);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Write message to screen and setPrompt to control backspace
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    var promptLine = lastLine(content);
 | 
			
		||||
    var rawPromptLine = stripAnsi(promptLine);
 | 
			
		||||
 | 
			
		||||
    // Remove the rl.line from our prompt. We can't rely on the content of
 | 
			
		||||
    // rl.line (mainly because of the password prompt), so just rely on it's
 | 
			
		||||
    // length.
 | 
			
		||||
    var prompt = rawPromptLine;
 | 
			
		||||
    if (this.rl.line.length) {
 | 
			
		||||
      prompt = prompt.slice(0, -this.rl.line.length);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.rl.setPrompt(prompt);
 | 
			
		||||
 | 
			
		||||
    // SetPrompt will change cursor position, now we can get correct value
 | 
			
		||||
    var cursorPos = this.rl._getCursorPos();
 | 
			
		||||
    var width = this.normalizedCliWidth();
 | 
			
		||||
 | 
			
		||||
    content = this.forceLineReturn(content, width);
 | 
			
		||||
    if (bottomContent) {
 | 
			
		||||
      bottomContent = this.forceLineReturn(bottomContent, width);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Manually insert an extra line if we're at the end of the line.
 | 
			
		||||
    // This prevent the cursor from appearing at the beginning of the
 | 
			
		||||
    // current line.
 | 
			
		||||
    if (rawPromptLine.length % width === 0) {
 | 
			
		||||
      content += '\n';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var fullContent = content + (bottomContent ? '\n' + bottomContent : '');
 | 
			
		||||
    this.rl.output.write(fullContent);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Re-adjust the cursor at the correct position.
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    // We need to consider parts of the prompt under the cursor as part of the bottom
 | 
			
		||||
    // content in order to correctly cleanup and re-render.
 | 
			
		||||
    var promptLineUpDiff = Math.floor(rawPromptLine.length / width) - cursorPos.rows;
 | 
			
		||||
    var bottomContentHeight =
 | 
			
		||||
      promptLineUpDiff + (bottomContent ? height(bottomContent) : 0);
 | 
			
		||||
    if (bottomContentHeight > 0) {
 | 
			
		||||
      util.up(this.rl, bottomContentHeight);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Reset cursor at the beginning of the line
 | 
			
		||||
    util.left(this.rl, stringWidth(lastLine(fullContent)));
 | 
			
		||||
 | 
			
		||||
    // Adjust cursor on the right
 | 
			
		||||
    if (cursorPos.cols > 0) {
 | 
			
		||||
      util.right(this.rl, cursorPos.cols);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set up state for next re-rendering
 | 
			
		||||
     */
 | 
			
		||||
    this.extraLinesUnderPrompt = bottomContentHeight;
 | 
			
		||||
    this.height = height(fullContent);
 | 
			
		||||
 | 
			
		||||
    this.rl.output.mute();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  clean(extraLines) {
 | 
			
		||||
    if (extraLines > 0) {
 | 
			
		||||
      util.down(this.rl, extraLines);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    util.clearLine(this.rl, this.height);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  done() {
 | 
			
		||||
    this.rl.setPrompt('');
 | 
			
		||||
    this.rl.output.unmute();
 | 
			
		||||
    this.rl.output.write('\n');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  releaseCursor() {
 | 
			
		||||
    if (this.extraLinesUnderPrompt > 0) {
 | 
			
		||||
      util.down(this.rl, this.extraLinesUnderPrompt);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  normalizedCliWidth() {
 | 
			
		||||
    var width = cliWidth({
 | 
			
		||||
      defaultWidth: 80,
 | 
			
		||||
      output: this.rl.output
 | 
			
		||||
    });
 | 
			
		||||
    return width;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  breakLines(lines, width) {
 | 
			
		||||
    // Break lines who're longer than the cli width so we can normalize the natural line
 | 
			
		||||
    // returns behavior across terminals.
 | 
			
		||||
    width = width || this.normalizedCliWidth();
 | 
			
		||||
    var regex = new RegExp('(?:(?:\\033[[0-9;]*m)*.?){1,' + width + '}', 'g');
 | 
			
		||||
    return lines.map(line => {
 | 
			
		||||
      var chunk = line.match(regex);
 | 
			
		||||
      // Last match is always empty
 | 
			
		||||
      chunk.pop();
 | 
			
		||||
      return chunk || '';
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  forceLineReturn(content, width) {
 | 
			
		||||
    width = width || this.normalizedCliWidth();
 | 
			
		||||
    return _.flatten(this.breakLines(content.split('\n'), width)).join('\n');
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = ScreenManager;
 | 
			
		||||
							
								
								
									
										26
									
								
								node_modules/inquirer/lib/utils/utils.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								node_modules/inquirer/lib/utils/utils.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
var _ = require('lodash');
 | 
			
		||||
var { from, of } = require('rxjs');
 | 
			
		||||
var runAsync = require('run-async');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Resolve a question property value if it is passed as a function.
 | 
			
		||||
 * This method will overwrite the property on the question object with the received value.
 | 
			
		||||
 * @param  {Object} question - Question object
 | 
			
		||||
 * @param  {String} prop     - Property to fetch name
 | 
			
		||||
 * @param  {Object} answers  - Answers object
 | 
			
		||||
 * @return {Rx.Observable}   - Observable emitting once value is known
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
exports.fetchAsyncQuestionProperty = function(question, prop, answers) {
 | 
			
		||||
  if (!_.isFunction(question[prop])) {
 | 
			
		||||
    return of(question);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return from(
 | 
			
		||||
    runAsync(question[prop])(answers).then(value => {
 | 
			
		||||
      question[prop] = value;
 | 
			
		||||
      return question;
 | 
			
		||||
    })
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										131
									
								
								node_modules/inquirer/node_modules/ansi-escapes/index.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								node_modules/inquirer/node_modules/ansi-escapes/index.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,131 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
const x = module.exports;
 | 
			
		||||
const ESC = '\u001B[';
 | 
			
		||||
const OSC = '\u001B]';
 | 
			
		||||
const BEL = '\u0007';
 | 
			
		||||
const SEP = ';';
 | 
			
		||||
const isTerminalApp = process.env.TERM_PROGRAM === 'Apple_Terminal';
 | 
			
		||||
 | 
			
		||||
x.cursorTo = (x, y) => {
 | 
			
		||||
	if (typeof x !== 'number') {
 | 
			
		||||
		throw new TypeError('The `x` argument is required');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (typeof y !== 'number') {
 | 
			
		||||
		return ESC + (x + 1) + 'G';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ESC + (y + 1) + ';' + (x + 1) + 'H';
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
x.cursorMove = (x, y) => {
 | 
			
		||||
	if (typeof x !== 'number') {
 | 
			
		||||
		throw new TypeError('The `x` argument is required');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	let ret = '';
 | 
			
		||||
 | 
			
		||||
	if (x < 0) {
 | 
			
		||||
		ret += ESC + (-x) + 'D';
 | 
			
		||||
	} else if (x > 0) {
 | 
			
		||||
		ret += ESC + x + 'C';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (y < 0) {
 | 
			
		||||
		ret += ESC + (-y) + 'A';
 | 
			
		||||
	} else if (y > 0) {
 | 
			
		||||
		ret += ESC + y + 'B';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
x.cursorUp = count => ESC + (typeof count === 'number' ? count : 1) + 'A';
 | 
			
		||||
x.cursorDown = count => ESC + (typeof count === 'number' ? count : 1) + 'B';
 | 
			
		||||
x.cursorForward = count => ESC + (typeof count === 'number' ? count : 1) + 'C';
 | 
			
		||||
x.cursorBackward = count => ESC + (typeof count === 'number' ? count : 1) + 'D';
 | 
			
		||||
 | 
			
		||||
x.cursorLeft = ESC + 'G';
 | 
			
		||||
x.cursorSavePosition = ESC + (isTerminalApp ? '7' : 's');
 | 
			
		||||
x.cursorRestorePosition = ESC + (isTerminalApp ? '8' : 'u');
 | 
			
		||||
x.cursorGetPosition = ESC + '6n';
 | 
			
		||||
x.cursorNextLine = ESC + 'E';
 | 
			
		||||
x.cursorPrevLine = ESC + 'F';
 | 
			
		||||
x.cursorHide = ESC + '?25l';
 | 
			
		||||
x.cursorShow = ESC + '?25h';
 | 
			
		||||
 | 
			
		||||
x.eraseLines = count => {
 | 
			
		||||
	let clear = '';
 | 
			
		||||
 | 
			
		||||
	for (let i = 0; i < count; i++) {
 | 
			
		||||
		clear += x.eraseLine + (i < count - 1 ? x.cursorUp() : '');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (count) {
 | 
			
		||||
		clear += x.cursorLeft;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return clear;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
x.eraseEndLine = ESC + 'K';
 | 
			
		||||
x.eraseStartLine = ESC + '1K';
 | 
			
		||||
x.eraseLine = ESC + '2K';
 | 
			
		||||
x.eraseDown = ESC + 'J';
 | 
			
		||||
x.eraseUp = ESC + '1J';
 | 
			
		||||
x.eraseScreen = ESC + '2J';
 | 
			
		||||
x.scrollUp = ESC + 'S';
 | 
			
		||||
x.scrollDown = ESC + 'T';
 | 
			
		||||
 | 
			
		||||
x.clearScreen = '\u001Bc';
 | 
			
		||||
 | 
			
		||||
x.clearTerminal = process.platform === 'win32' ?
 | 
			
		||||
	`${x.eraseScreen}${ESC}0f` :
 | 
			
		||||
	// 1. Erases the screen (Only done in case `2` is not supported)
 | 
			
		||||
	// 2. Erases the whole screen including scrollback buffer
 | 
			
		||||
	// 3. Moves cursor to the top-left position
 | 
			
		||||
	// More info: https://www.real-world-systems.com/docs/ANSIcode.html
 | 
			
		||||
	`${x.eraseScreen}${ESC}3J${ESC}H`;
 | 
			
		||||
 | 
			
		||||
x.beep = BEL;
 | 
			
		||||
 | 
			
		||||
x.link = (text, url) => {
 | 
			
		||||
	return [
 | 
			
		||||
		OSC,
 | 
			
		||||
		'8',
 | 
			
		||||
		SEP,
 | 
			
		||||
		SEP,
 | 
			
		||||
		url,
 | 
			
		||||
		BEL,
 | 
			
		||||
		text,
 | 
			
		||||
		OSC,
 | 
			
		||||
		'8',
 | 
			
		||||
		SEP,
 | 
			
		||||
		SEP,
 | 
			
		||||
		BEL
 | 
			
		||||
	].join('');
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
x.image = (buf, opts) => {
 | 
			
		||||
	opts = opts || {};
 | 
			
		||||
 | 
			
		||||
	let ret = OSC + '1337;File=inline=1';
 | 
			
		||||
 | 
			
		||||
	if (opts.width) {
 | 
			
		||||
		ret += `;width=${opts.width}`;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (opts.height) {
 | 
			
		||||
		ret += `;height=${opts.height}`;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (opts.preserveAspectRatio === false) {
 | 
			
		||||
		ret += ';preserveAspectRatio=0';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ret + ':' + buf.toString('base64') + BEL;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
x.iTerm = {};
 | 
			
		||||
 | 
			
		||||
x.iTerm.setCwd = cwd => OSC + '50;CurrentDir=' + (cwd || process.cwd()) + BEL;
 | 
			
		||||
							
								
								
									
										9
									
								
								node_modules/inquirer/node_modules/ansi-escapes/license
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								node_modules/inquirer/node_modules/ansi-escapes/license
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
MIT License
 | 
			
		||||
 | 
			
		||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										50
									
								
								node_modules/inquirer/node_modules/ansi-escapes/package.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								node_modules/inquirer/node_modules/ansi-escapes/package.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
{
 | 
			
		||||
	"name": "ansi-escapes",
 | 
			
		||||
	"version": "3.2.0",
 | 
			
		||||
	"description": "ANSI escape codes for manipulating the terminal",
 | 
			
		||||
	"license": "MIT",
 | 
			
		||||
	"repository": "sindresorhus/ansi-escapes",
 | 
			
		||||
	"author": {
 | 
			
		||||
		"name": "Sindre Sorhus",
 | 
			
		||||
		"email": "sindresorhus@gmail.com",
 | 
			
		||||
		"url": "sindresorhus.com"
 | 
			
		||||
	},
 | 
			
		||||
	"engines": {
 | 
			
		||||
		"node": ">=4"
 | 
			
		||||
	},
 | 
			
		||||
	"scripts": {
 | 
			
		||||
		"test": "xo && ava"
 | 
			
		||||
	},
 | 
			
		||||
	"files": [
 | 
			
		||||
		"index.js"
 | 
			
		||||
	],
 | 
			
		||||
	"keywords": [
 | 
			
		||||
		"ansi",
 | 
			
		||||
		"terminal",
 | 
			
		||||
		"console",
 | 
			
		||||
		"cli",
 | 
			
		||||
		"string",
 | 
			
		||||
		"tty",
 | 
			
		||||
		"escape",
 | 
			
		||||
		"escapes",
 | 
			
		||||
		"formatting",
 | 
			
		||||
		"shell",
 | 
			
		||||
		"xterm",
 | 
			
		||||
		"log",
 | 
			
		||||
		"logging",
 | 
			
		||||
		"command-line",
 | 
			
		||||
		"text",
 | 
			
		||||
		"vt100",
 | 
			
		||||
		"sequence",
 | 
			
		||||
		"control",
 | 
			
		||||
		"code",
 | 
			
		||||
		"codes",
 | 
			
		||||
		"cursor",
 | 
			
		||||
		"iterm",
 | 
			
		||||
		"iterm2"
 | 
			
		||||
	],
 | 
			
		||||
	"devDependencies": {
 | 
			
		||||
		"ava": "*",
 | 
			
		||||
		"xo": "*"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										184
									
								
								node_modules/inquirer/node_modules/ansi-escapes/readme.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								node_modules/inquirer/node_modules/ansi-escapes/readme.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,184 @@
 | 
			
		|||
# ansi-escapes [](https://travis-ci.org/sindresorhus/ansi-escapes)
 | 
			
		||||
 | 
			
		||||
> [ANSI escape codes](http://www.termsys.demon.co.uk/vtansi.htm) for manipulating the terminal
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Install
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ npm install ansi-escapes
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const ansiEscapes = require('ansi-escapes');
 | 
			
		||||
 | 
			
		||||
// Moves the cursor two rows up and to the left
 | 
			
		||||
process.stdout.write(ansiEscapes.cursorUp(2) + ansiEscapes.cursorLeft);
 | 
			
		||||
//=> '\u001B[2A\u001B[1000D'
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## API
 | 
			
		||||
 | 
			
		||||
### cursorTo(x, [y])
 | 
			
		||||
 | 
			
		||||
Set the absolute position of the cursor. `x0` `y0` is the top left of the screen.
 | 
			
		||||
 | 
			
		||||
### cursorMove(x, [y])
 | 
			
		||||
 | 
			
		||||
Set the position of the cursor relative to its current position.
 | 
			
		||||
 | 
			
		||||
### cursorUp(count)
 | 
			
		||||
 | 
			
		||||
Move cursor up a specific amount of rows. Default is `1`.
 | 
			
		||||
 | 
			
		||||
### cursorDown(count)
 | 
			
		||||
 | 
			
		||||
Move cursor down a specific amount of rows. Default is `1`.
 | 
			
		||||
 | 
			
		||||
### cursorForward(count)
 | 
			
		||||
 | 
			
		||||
Move cursor forward a specific amount of rows. Default is `1`.
 | 
			
		||||
 | 
			
		||||
### cursorBackward(count)
 | 
			
		||||
 | 
			
		||||
Move cursor backward a specific amount of rows. Default is `1`.
 | 
			
		||||
 | 
			
		||||
### cursorLeft
 | 
			
		||||
 | 
			
		||||
Move cursor to the left side.
 | 
			
		||||
 | 
			
		||||
### cursorSavePosition
 | 
			
		||||
 | 
			
		||||
Save cursor position.
 | 
			
		||||
 | 
			
		||||
### cursorRestorePosition
 | 
			
		||||
 | 
			
		||||
Restore saved cursor position.
 | 
			
		||||
 | 
			
		||||
### cursorGetPosition
 | 
			
		||||
 | 
			
		||||
Get cursor position.
 | 
			
		||||
 | 
			
		||||
### cursorNextLine
 | 
			
		||||
 | 
			
		||||
Move cursor to the next line.
 | 
			
		||||
 | 
			
		||||
### cursorPrevLine
 | 
			
		||||
 | 
			
		||||
Move cursor to the previous line.
 | 
			
		||||
 | 
			
		||||
### cursorHide
 | 
			
		||||
 | 
			
		||||
Hide cursor.
 | 
			
		||||
 | 
			
		||||
### cursorShow
 | 
			
		||||
 | 
			
		||||
Show cursor.
 | 
			
		||||
 | 
			
		||||
### eraseLines(count)
 | 
			
		||||
 | 
			
		||||
Erase from the current cursor position up the specified amount of rows.
 | 
			
		||||
 | 
			
		||||
### eraseEndLine
 | 
			
		||||
 | 
			
		||||
Erase from the current cursor position to the end of the current line.
 | 
			
		||||
 | 
			
		||||
### eraseStartLine
 | 
			
		||||
 | 
			
		||||
Erase from the current cursor position to the start of the current line.
 | 
			
		||||
 | 
			
		||||
### eraseLine
 | 
			
		||||
 | 
			
		||||
Erase the entire current line.
 | 
			
		||||
 | 
			
		||||
### eraseDown
 | 
			
		||||
 | 
			
		||||
Erase the screen from the current line down to the bottom of the screen.
 | 
			
		||||
 | 
			
		||||
### eraseUp
 | 
			
		||||
 | 
			
		||||
Erase the screen from the current line up to the top of the screen.
 | 
			
		||||
 | 
			
		||||
### eraseScreen
 | 
			
		||||
 | 
			
		||||
Erase the screen and move the cursor the top left position.
 | 
			
		||||
 | 
			
		||||
### scrollUp
 | 
			
		||||
 | 
			
		||||
Scroll display up one line.
 | 
			
		||||
 | 
			
		||||
### scrollDown
 | 
			
		||||
 | 
			
		||||
Scroll display down one line.
 | 
			
		||||
 | 
			
		||||
### clearScreen
 | 
			
		||||
 | 
			
		||||
Clear the terminal screen. (Viewport)
 | 
			
		||||
 | 
			
		||||
### clearTerminal
 | 
			
		||||
 | 
			
		||||
Clear the whole terminal, including scrollback buffer. (Not just the visible part of it)
 | 
			
		||||
 | 
			
		||||
### beep
 | 
			
		||||
 | 
			
		||||
Output a beeping sound.
 | 
			
		||||
 | 
			
		||||
### link(text, url)
 | 
			
		||||
 | 
			
		||||
Create a clickable link.
 | 
			
		||||
 | 
			
		||||
[Supported terminals.](https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda) Use [`supports-hyperlinks`](https://github.com/jamestalmage/supports-hyperlinks) to detect link support.
 | 
			
		||||
 | 
			
		||||
### image(input, [options])
 | 
			
		||||
 | 
			
		||||
Display an image.
 | 
			
		||||
 | 
			
		||||
*Currently only supported on iTerm2 >=3*
 | 
			
		||||
 | 
			
		||||
See [term-img](https://github.com/sindresorhus/term-img) for a higher-level module.
 | 
			
		||||
 | 
			
		||||
#### input
 | 
			
		||||
 | 
			
		||||
Type: `Buffer`
 | 
			
		||||
 | 
			
		||||
Buffer of an image. Usually read in with `fs.readFile()`.
 | 
			
		||||
 | 
			
		||||
#### options
 | 
			
		||||
 | 
			
		||||
##### width
 | 
			
		||||
##### height
 | 
			
		||||
 | 
			
		||||
Type: `string` `number`
 | 
			
		||||
 | 
			
		||||
The width and height are given as a number followed by a unit, or the word "auto".
 | 
			
		||||
 | 
			
		||||
- `N`: N character cells.
 | 
			
		||||
- `Npx`: N pixels.
 | 
			
		||||
- `N%`: N percent of the session's width or height.
 | 
			
		||||
- `auto`: The image's inherent size will be used to determine an appropriate dimension.
 | 
			
		||||
 | 
			
		||||
##### preserveAspectRatio
 | 
			
		||||
 | 
			
		||||
Type: `boolean`<br>
 | 
			
		||||
Default: `true`
 | 
			
		||||
 | 
			
		||||
### iTerm.setCwd([path])
 | 
			
		||||
 | 
			
		||||
Type: `string`<br>
 | 
			
		||||
Default: `process.cwd()`
 | 
			
		||||
 | 
			
		||||
[Inform iTerm2](https://www.iterm2.com/documentation-escape-codes.html) of the current directory to help semantic history and enable [Cmd-clicking relative paths](https://coderwall.com/p/b7e82q/quickly-open-files-in-iterm-with-cmd-click).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Related
 | 
			
		||||
 | 
			
		||||
- [ansi-styles](https://github.com/chalk/ansi-styles) - ANSI escape codes for styling strings in the terminal
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
MIT © [Sindre Sorhus](https://sindresorhus.com)
 | 
			
		||||
							
								
								
									
										14
									
								
								node_modules/inquirer/node_modules/ansi-regex/index.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								node_modules/inquirer/node_modules/ansi-regex/index.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
module.exports = options => {
 | 
			
		||||
	options = Object.assign({
 | 
			
		||||
		onlyFirst: false
 | 
			
		||||
	}, options);
 | 
			
		||||
 | 
			
		||||
	const pattern = [
 | 
			
		||||
		'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
 | 
			
		||||
		'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
 | 
			
		||||
	].join('|');
 | 
			
		||||
 | 
			
		||||
	return new RegExp(pattern, options.onlyFirst ? undefined : 'g');
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										9
									
								
								node_modules/inquirer/node_modules/ansi-regex/license
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								node_modules/inquirer/node_modules/ansi-regex/license
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
MIT License
 | 
			
		||||
 | 
			
		||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										53
									
								
								node_modules/inquirer/node_modules/ansi-regex/package.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								node_modules/inquirer/node_modules/ansi-regex/package.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,53 @@
 | 
			
		|||
{
 | 
			
		||||
	"name": "ansi-regex",
 | 
			
		||||
	"version": "4.1.1",
 | 
			
		||||
	"description": "Regular expression for matching ANSI escape codes",
 | 
			
		||||
	"license": "MIT",
 | 
			
		||||
	"repository": "chalk/ansi-regex",
 | 
			
		||||
	"author": {
 | 
			
		||||
		"name": "Sindre Sorhus",
 | 
			
		||||
		"email": "sindresorhus@gmail.com",
 | 
			
		||||
		"url": "sindresorhus.com"
 | 
			
		||||
	},
 | 
			
		||||
	"engines": {
 | 
			
		||||
		"node": ">=6"
 | 
			
		||||
	},
 | 
			
		||||
	"scripts": {
 | 
			
		||||
		"test": "xo && ava",
 | 
			
		||||
		"view-supported": "node fixtures/view-codes.js"
 | 
			
		||||
	},
 | 
			
		||||
	"files": [
 | 
			
		||||
		"index.js"
 | 
			
		||||
	],
 | 
			
		||||
	"keywords": [
 | 
			
		||||
		"ansi",
 | 
			
		||||
		"styles",
 | 
			
		||||
		"color",
 | 
			
		||||
		"colour",
 | 
			
		||||
		"colors",
 | 
			
		||||
		"terminal",
 | 
			
		||||
		"console",
 | 
			
		||||
		"cli",
 | 
			
		||||
		"string",
 | 
			
		||||
		"tty",
 | 
			
		||||
		"escape",
 | 
			
		||||
		"formatting",
 | 
			
		||||
		"rgb",
 | 
			
		||||
		"256",
 | 
			
		||||
		"shell",
 | 
			
		||||
		"xterm",
 | 
			
		||||
		"command-line",
 | 
			
		||||
		"text",
 | 
			
		||||
		"regex",
 | 
			
		||||
		"regexp",
 | 
			
		||||
		"re",
 | 
			
		||||
		"match",
 | 
			
		||||
		"test",
 | 
			
		||||
		"find",
 | 
			
		||||
		"pattern"
 | 
			
		||||
	],
 | 
			
		||||
	"devDependencies": {
 | 
			
		||||
		"ava": "^0.25.0",
 | 
			
		||||
		"xo": "^0.23.0"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										87
									
								
								node_modules/inquirer/node_modules/ansi-regex/readme.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								node_modules/inquirer/node_modules/ansi-regex/readme.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,87 @@
 | 
			
		|||
# ansi-regex [](https://travis-ci.org/chalk/ansi-regex)
 | 
			
		||||
 | 
			
		||||
> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
<div align="center">
 | 
			
		||||
	<b>
 | 
			
		||||
		<a href="https://tidelift.com/subscription/pkg/npm-ansi-regex?utm_source=npm-ansi-regex&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
 | 
			
		||||
	</b>
 | 
			
		||||
	<br>
 | 
			
		||||
	<sub>
 | 
			
		||||
		Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
 | 
			
		||||
	</sub>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Install
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ npm install ansi-regex
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const ansiRegex = require('ansi-regex');
 | 
			
		||||
 | 
			
		||||
ansiRegex().test('\u001B[4mcake\u001B[0m');
 | 
			
		||||
//=> true
 | 
			
		||||
 | 
			
		||||
ansiRegex().test('cake');
 | 
			
		||||
//=> false
 | 
			
		||||
 | 
			
		||||
'\u001B[4mcake\u001B[0m'.match(ansiRegex());
 | 
			
		||||
//=> ['\u001B[4m', '\u001B[0m']
 | 
			
		||||
 | 
			
		||||
'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
 | 
			
		||||
//=> ['\u001B[4m']
 | 
			
		||||
 | 
			
		||||
'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
 | 
			
		||||
//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## API
 | 
			
		||||
 | 
			
		||||
### ansiRegex([options])
 | 
			
		||||
 | 
			
		||||
Returns a regex for matching ANSI escape codes.
 | 
			
		||||
 | 
			
		||||
#### options
 | 
			
		||||
 | 
			
		||||
##### onlyFirst
 | 
			
		||||
 | 
			
		||||
Type: `boolean`<br>
 | 
			
		||||
Default: `false` *(Matches any ANSI escape codes in a string)*
 | 
			
		||||
 | 
			
		||||
Match only the first ANSI escape.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## FAQ
 | 
			
		||||
 | 
			
		||||
### Why do you test for codes not in the ECMA 48 standard?
 | 
			
		||||
 | 
			
		||||
Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
 | 
			
		||||
 | 
			
		||||
On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Security
 | 
			
		||||
 | 
			
		||||
To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Maintainers
 | 
			
		||||
 | 
			
		||||
- [Sindre Sorhus](https://github.com/sindresorhus)
 | 
			
		||||
- [Josh Junon](https://github.com/qix-)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
MIT
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/inquirer/node_modules/cli-width/.nyc_output/00ef1b3d-3687-482b-8d03-de2f76b58f54.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/inquirer/node_modules/cli-width/.nyc_output/00ef1b3d-3687-482b-8d03-de2f76b58f54.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
{"/Users/ilya/maintained/cli-width/index.js":{"path":"/Users/ilya/maintained/cli-width/index.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":36}},"1":{"start":{"line":6,"column":20},"end":{"line":10,"column":3}},"2":{"start":{"line":12,"column":2},"end":{"line":14,"column":3}},"3":{"start":{"line":13,"column":4},"end":{"line":13,"column":23}},"4":{"start":{"line":16,"column":2},"end":{"line":20,"column":5}},"5":{"start":{"line":17,"column":4},"end":{"line":19,"column":5}},"6":{"start":{"line":18,"column":6},"end":{"line":18,"column":38}},"7":{"start":{"line":22,"column":2},"end":{"line":22,"column":17}},"8":{"start":{"line":26,"column":13},"end":{"line":26,"column":35}},"9":{"start":{"line":28,"column":2},"end":{"line":30,"column":3}},"10":{"start":{"line":29,"column":4},"end":{"line":29,"column":63}},"11":{"start":{"line":32,"column":2},"end":{"line":34,"column":3}},"12":{"start":{"line":33,"column":4},"end":{"line":33,"column":60}},"13":{"start":{"line":36,"column":2},"end":{"line":38,"column":3}},"14":{"start":{"line":37,"column":4},"end":{"line":37,"column":31}},"15":{"start":{"line":40,"column":2},"end":{"line":46,"column":3}},"16":{"start":{"line":41,"column":16},"end":{"line":41,"column":51}},"17":{"start":{"line":43,"column":4},"end":{"line":45,"column":5}},"18":{"start":{"line":44,"column":6},"end":{"line":44,"column":19}},"19":{"start":{"line":48,"column":2},"end":{"line":48,"column":27}}},"fnMap":{"0":{"name":"normalizeOpts","decl":{"start":{"line":5,"column":9},"end":{"line":5,"column":22}},"loc":{"start":{"line":5,"column":32},"end":{"line":23,"column":1}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":16,"column":35},"end":{"line":16,"column":36}},"loc":{"start":{"line":16,"column":50},"end":{"line":20,"column":3}},"line":16},"2":{"name":"cliWidth","decl":{"start":{"line":25,"column":9},"end":{"line":25,"column":17}},"loc":{"start":{"line":25,"column":27},"end":{"line":49,"column":1}},"line":25}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":14,"column":3}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":14,"column":3}},{"start":{"line":12,"column":2},"end":{"line":14,"column":3}}],"line":12},"1":{"loc":{"start":{"line":17,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":17,"column":4},"end":{"line":19,"column":5}},{"start":{"line":17,"column":4},"end":{"line":19,"column":5}}],"line":17},"2":{"loc":{"start":{"line":28,"column":2},"end":{"line":30,"column":3}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":30,"column":3}},{"start":{"line":28,"column":2},"end":{"line":30,"column":3}}],"line":28},"3":{"loc":{"start":{"line":29,"column":11},"end":{"line":29,"column":62}},"type":"binary-expr","locations":[{"start":{"line":29,"column":11},"end":{"line":29,"column":41}},{"start":{"line":29,"column":45},"end":{"line":29,"column":62}}],"line":29},"4":{"loc":{"start":{"line":32,"column":2},"end":{"line":34,"column":3}},"type":"if","locations":[{"start":{"line":32,"column":2},"end":{"line":34,"column":3}},{"start":{"line":32,"column":2},"end":{"line":34,"column":3}}],"line":32},"5":{"loc":{"start":{"line":33,"column":11},"end":{"line":33,"column":59}},"type":"binary-expr","locations":[{"start":{"line":33,"column":11},"end":{"line":33,"column":38}},{"start":{"line":33,"column":42},"end":{"line":33,"column":59}}],"line":33},"6":{"loc":{"start":{"line":36,"column":2},"end":{"line":38,"column":3}},"type":"if","locations":[{"start":{"line":36,"column":2},"end":{"line":38,"column":3}},{"start":{"line":36,"column":2},"end":{"line":38,"column":3}}],"line":36},"7":{"loc":{"start":{"line":40,"column":2},"end":{"line":46,"column":3}},"type":"if","locations":[{"start":{"line":40,"column":2},"end":{"line":46,"column":3}},{"start":{"line":40,"column":2},"end":{"line":46,"column":3}}],"line":40},"8":{"loc":{"start":{"line":43,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":45,"column":5}},{"start":{"line":43,"column":4},"end":{"line":45,"column":5}}],"line":43},"9":{"loc":{"start":{"line":43,"column":8},"end":{"line":43,"column":36}},"type":"binary-expr","locations":[{"start":{"line":43,"column":8},"end":{"line":43,"column":21}},{"start":{"line":43,"column":25},"end":{"line":43,"column":36}}],"line":43}},"s":{"0":1,"1":11,"2":11,"3":5,"4":6,"5":18,"6":12,"7":6,"8":11,"9":11,"10":3,"11":8,"12":3,"13":5,"14":1,"15":4,"16":2,"17":2,"18":1,"19":3},"f":{"0":11,"1":18,"2":11},"b":{"0":[5,6],"1":[12,6],"2":[3,8],"3":[3,1],"4":[3,5],"5":[3,1],"6":[1,4],"7":[2,2],"8":[1,1],"9":[2,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"a4d7f0a30376f059a5bc5bb60422e8b1332adf0c","contentHash":"1ab1e2def09289f7630132524d4d3929b81fe2db9a3f07e64865500b9c42e817"}}
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/inquirer/node_modules/cli-width/.nyc_output/processinfo/00ef1b3d-3687-482b-8d03-de2f76b58f54.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/inquirer/node_modules/cli-width/.nyc_output/processinfo/00ef1b3d-3687-482b-8d03-de2f76b58f54.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
{"parent":null,"pid":4489,"argv":["/Users/ilya/.volta/tools/image/node/12.16.0/6.13.4/bin/node","/Users/ilya/maintained/cli-width/test"],"execArgv":[],"cwd":"/Users/ilya/maintained/cli-width","time":1586875876791,"ppid":4487,"coverageFilename":"/Users/ilya/maintained/cli-width/.nyc_output/00ef1b3d-3687-482b-8d03-de2f76b58f54.json","externalId":"","uuid":"00ef1b3d-3687-482b-8d03-de2f76b58f54","files":["/Users/ilya/maintained/cli-width/index.js"]}
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/inquirer/node_modules/cli-width/.nyc_output/processinfo/index.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/inquirer/node_modules/cli-width/.nyc_output/processinfo/index.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
{"processes":{"00ef1b3d-3687-482b-8d03-de2f76b58f54":{"parent":null,"children":[]}},"files":{"/Users/ilya/maintained/cli-width/index.js":["00ef1b3d-3687-482b-8d03-de2f76b58f54"]},"externalIds":{}}
 | 
			
		||||
							
								
								
									
										14
									
								
								node_modules/inquirer/node_modules/cli-width/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								node_modules/inquirer/node_modules/cli-width/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
language: node_js
 | 
			
		||||
node_js:
 | 
			
		||||
  - "0.10"
 | 
			
		||||
  - "0.11"
 | 
			
		||||
  - "0.12"
 | 
			
		||||
  - "iojs-1"
 | 
			
		||||
  - "iojs-2"
 | 
			
		||||
  - "iojs-3"
 | 
			
		||||
  - "4.0"
 | 
			
		||||
  - "8"
 | 
			
		||||
  - "10"
 | 
			
		||||
  - "12"
 | 
			
		||||
after_script:
 | 
			
		||||
  - npm run coveralls
 | 
			
		||||
							
								
								
									
										25
									
								
								node_modules/inquirer/node_modules/cli-width/CHANGELOG.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								node_modules/inquirer/node_modules/cli-width/CHANGELOG.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
# Changelog
 | 
			
		||||
 | 
			
		||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
 | 
			
		||||
 | 
			
		||||
### [2.2.1](https://github.com/knownasilya/cli-width/compare/v2.2.0...v2.2.1) (2020-04-14)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* add more node versions to travis ([f7bc148](https://github.com/knownasilya/cli-width/commit/f7bc14846c2547769681bfc56afed3d0b04aa11e))
 | 
			
		||||
* Reduce nesting in index.js and add package-lock.json ([#14](https://github.com/knownasilya/cli-width/issues/14)) ([92d8d6b](https://github.com/knownasilya/cli-width/commit/92d8d6b8e4ce3702b12356c5427723005fccf9b8))
 | 
			
		||||
* update deprecated deps and change coverage script ([db06065](https://github.com/knownasilya/cli-width/commit/db0606592f8347eb9f35abdf87c570e1d731463c))
 | 
			
		||||
 | 
			
		||||
<a name="2.2.0"></a>
 | 
			
		||||
# [2.2.0](https://github.com/knownasilya/cli-width/compare/v2.1.1...v2.2.0) (2017-08-22)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
 | 
			
		||||
* return default if env is 0 ([1833baf](https://github.com/knownasilya/cli-width/commit/1833baf)), closes [#9](https://github.com/knownasilya/cli-width/issues/9)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<a name="2.1.1"></a>
 | 
			
		||||
## [2.1.1](https://github.com/knownasilya/cli-width/compare/v2.1.0...v2.1.1) (2017-08-22)
 | 
			
		||||
							
								
								
									
										13
									
								
								node_modules/inquirer/node_modules/cli-width/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								node_modules/inquirer/node_modules/cli-width/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
Copyright (c) 2015, Ilya Radchenko <ilya@burstcreations.com>
 | 
			
		||||
 | 
			
		||||
Permission to use, copy, modify, and/or distribute this software for any
 | 
			
		||||
purpose with or without fee is hereby granted, provided that the above
 | 
			
		||||
copyright notice and this permission notice appear in all copies.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
			
		||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
			
		||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 | 
			
		||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
			
		||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | 
			
		||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 | 
			
		||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
							
								
								
									
										72
									
								
								node_modules/inquirer/node_modules/cli-width/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								node_modules/inquirer/node_modules/cli-width/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,72 @@
 | 
			
		|||
cli-width
 | 
			
		||||
=========
 | 
			
		||||
 | 
			
		||||
Get stdout window width, with four fallbacks, `tty`, `output.columns`, a custom environment variable and then a default.
 | 
			
		||||
 | 
			
		||||
[](http://badge.fury.io/js/cli-width)
 | 
			
		||||
[](https://travis-ci.org/knownasilya/cli-width)
 | 
			
		||||
[](https://coveralls.io/github/knownasilya/cli-width?branch=master)
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
npm install --save cli-width
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var cliWidth = require('cli-width');
 | 
			
		||||
 | 
			
		||||
cliWidth(); // maybe 204 :)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can also set the `CLI_WIDTH` environment variable.
 | 
			
		||||
 | 
			
		||||
If none of the methods are supported, and the environment variable isn't set,
 | 
			
		||||
the default width value is going to be `0`, that can be changed using the configurable `options`.
 | 
			
		||||
 | 
			
		||||
## API
 | 
			
		||||
 | 
			
		||||
### cliWidth([options])
 | 
			
		||||
 | 
			
		||||
`cliWidth` can be configured using an `options` parameter, the possible properties are:
 | 
			
		||||
 | 
			
		||||
- **defaultWidth**\<number\> Defines a default value to be used if none of the methods are available, defaults to `0`
 | 
			
		||||
- **output**\<object\> A stream to be used to read width values from, defaults to `process.stdout`
 | 
			
		||||
- **tty**\<object\> TTY module to try to read width from as a fallback, defaults to `require('tty')`
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Examples
 | 
			
		||||
 | 
			
		||||
Defining both a default width value and a stream output to try to read from:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
var cliWidth = require('cli-width');
 | 
			
		||||
var ttys = require('ttys');
 | 
			
		||||
 | 
			
		||||
cliWidth({
 | 
			
		||||
  defaultWidth: 80,
 | 
			
		||||
  output: ttys.output
 | 
			
		||||
});
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Defines a different tty module to read width from:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
var cliWidth = require('cli-width');
 | 
			
		||||
var ttys = require('ttys');
 | 
			
		||||
 | 
			
		||||
cliWidth({
 | 
			
		||||
  tty: ttys
 | 
			
		||||
});
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Tests
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
npm install
 | 
			
		||||
npm test
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Coverage can be generated with `npm run coverage`.
 | 
			
		||||
							
								
								
									
										49
									
								
								node_modules/inquirer/node_modules/cli-width/index.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								node_modules/inquirer/node_modules/cli-width/index.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,49 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
exports = module.exports = cliWidth;
 | 
			
		||||
 | 
			
		||||
function normalizeOpts(options) {
 | 
			
		||||
  var defaultOpts = {
 | 
			
		||||
    defaultWidth: 0,
 | 
			
		||||
    output: process.stdout,
 | 
			
		||||
    tty: require('tty')
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  if (!options) {
 | 
			
		||||
    return defaultOpts;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Object.keys(defaultOpts).forEach(function (key) {
 | 
			
		||||
    if (!options[key]) {
 | 
			
		||||
      options[key] = defaultOpts[key];
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  return options;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function cliWidth(options) {
 | 
			
		||||
  var opts = normalizeOpts(options);
 | 
			
		||||
 | 
			
		||||
  if (opts.output.getWindowSize) {
 | 
			
		||||
    return opts.output.getWindowSize()[0] || opts.defaultWidth;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (opts.tty.getWindowSize) {
 | 
			
		||||
    return opts.tty.getWindowSize()[1] || opts.defaultWidth;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (opts.output.columns) {
 | 
			
		||||
    return opts.output.columns;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (process.env.CLI_WIDTH) {
 | 
			
		||||
    var width = parseInt(process.env.CLI_WIDTH, 10);
 | 
			
		||||
 | 
			
		||||
    if (!isNaN(width) && width !== 0) {
 | 
			
		||||
      return width;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return opts.defaultWidth;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										29
									
								
								node_modules/inquirer/node_modules/cli-width/package.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								node_modules/inquirer/node_modules/cli-width/package.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
{
 | 
			
		||||
  "name": "cli-width",
 | 
			
		||||
  "version": "2.2.1",
 | 
			
		||||
  "description": "Get stdout window width, with two fallbacks, tty and then a default.",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "node test | tspec",
 | 
			
		||||
    "coverage": "nyc node test | tspec",
 | 
			
		||||
    "coveralls": "npm run coverage -s && coveralls < coverage/lcov.info",
 | 
			
		||||
    "release": "standard-version"
 | 
			
		||||
  },
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git@github.com:knownasilya/cli-width.git"
 | 
			
		||||
  },
 | 
			
		||||
  "author": "Ilya Radchenko <knownasilya@gmail.com>",
 | 
			
		||||
  "license": "ISC",
 | 
			
		||||
  "bugs": {
 | 
			
		||||
    "url": "https://github.com/knownasilya/cli-width/issues"
 | 
			
		||||
  },
 | 
			
		||||
  "homepage": "https://github.com/knownasilya/cli-width",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "coveralls": "^3.0.11",
 | 
			
		||||
    "nyc": "^15.0.1",
 | 
			
		||||
    "standard-version": "^7.1.0",
 | 
			
		||||
    "tap-spec": "^5.0.0",
 | 
			
		||||
    "tape": "^4.13.2"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/inquirer/node_modules/mute-stream/.nyc_output/33508.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/inquirer/node_modules/mute-stream/.nyc_output/33508.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
{}
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/inquirer/node_modules/mute-stream/.nyc_output/33510.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/inquirer/node_modules/mute-stream/.nyc_output/33510.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										9
									
								
								node_modules/inquirer/node_modules/mute-stream/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								node_modules/inquirer/node_modules/mute-stream/.travis.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
language: node_js
 | 
			
		||||
language: node_js
 | 
			
		||||
node_js:
 | 
			
		||||
  - '0.8'
 | 
			
		||||
  - '0.10'
 | 
			
		||||
  - '0.12'
 | 
			
		||||
  - 'iojs'
 | 
			
		||||
before_install:
 | 
			
		||||
  - npm install -g npm@latest
 | 
			
		||||
							
								
								
									
										15
									
								
								node_modules/inquirer/node_modules/mute-stream/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								node_modules/inquirer/node_modules/mute-stream/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
The ISC License
 | 
			
		||||
 | 
			
		||||
Copyright (c) Isaac Z. Schlueter and Contributors
 | 
			
		||||
 | 
			
		||||
Permission to use, copy, modify, and/or distribute this software for any
 | 
			
		||||
purpose with or without fee is hereby granted, provided that the above
 | 
			
		||||
copyright notice and this permission notice appear in all copies.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
			
		||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
			
		||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 | 
			
		||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
			
		||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | 
			
		||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
 | 
			
		||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
							
								
								
									
										68
									
								
								node_modules/inquirer/node_modules/mute-stream/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								node_modules/inquirer/node_modules/mute-stream/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,68 @@
 | 
			
		|||
# mute-stream
 | 
			
		||||
 | 
			
		||||
Bytes go in, but they don't come out (when muted).
 | 
			
		||||
 | 
			
		||||
This is a basic pass-through stream, but when muted, the bytes are
 | 
			
		||||
silently dropped, rather than being passed through.
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var MuteStream = require('mute-stream')
 | 
			
		||||
 | 
			
		||||
var ms = new MuteStream(options)
 | 
			
		||||
 | 
			
		||||
ms.pipe(process.stdout)
 | 
			
		||||
ms.write('foo') // writes 'foo' to stdout
 | 
			
		||||
ms.mute()
 | 
			
		||||
ms.write('bar') // does not write 'bar'
 | 
			
		||||
ms.unmute()
 | 
			
		||||
ms.write('baz') // writes 'baz' to stdout
 | 
			
		||||
 | 
			
		||||
// can also be used to mute incoming data
 | 
			
		||||
var ms = new MuteStream
 | 
			
		||||
input.pipe(ms)
 | 
			
		||||
 | 
			
		||||
ms.on('data', function (c) {
 | 
			
		||||
  console.log('data: ' + c)
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
input.emit('data', 'foo') // logs 'foo'
 | 
			
		||||
ms.mute()
 | 
			
		||||
input.emit('data', 'bar') // does not log 'bar'
 | 
			
		||||
ms.unmute()
 | 
			
		||||
input.emit('data', 'baz') // logs 'baz'
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Options
 | 
			
		||||
 | 
			
		||||
All options are optional.
 | 
			
		||||
 | 
			
		||||
* `replace` Set to a string to replace each character with the
 | 
			
		||||
  specified string when muted.  (So you can show `****` instead of the
 | 
			
		||||
  password, for example.)
 | 
			
		||||
 | 
			
		||||
* `prompt` If you are using a replacement char, and also using a
 | 
			
		||||
  prompt with a readline stream (as for a `Password: *****` input),
 | 
			
		||||
  then specify what the prompt is so that backspace will work
 | 
			
		||||
  properly.  Otherwise, pressing backspace will overwrite the prompt
 | 
			
		||||
  with the replacement character, which is weird.
 | 
			
		||||
 | 
			
		||||
## ms.mute()
 | 
			
		||||
 | 
			
		||||
Set `muted` to `true`.  Turns `.write()` into a no-op.
 | 
			
		||||
 | 
			
		||||
## ms.unmute()
 | 
			
		||||
 | 
			
		||||
Set `muted` to `false`
 | 
			
		||||
 | 
			
		||||
## ms.isTTY
 | 
			
		||||
 | 
			
		||||
True if the pipe destination is a TTY, or if the incoming pipe source is
 | 
			
		||||
a TTY.
 | 
			
		||||
 | 
			
		||||
## Other stream methods...
 | 
			
		||||
 | 
			
		||||
The other standard readable and writable stream methods are all
 | 
			
		||||
available.  The MuteStream object acts as a facade to its pipe source
 | 
			
		||||
and destination.
 | 
			
		||||
							
								
								
									
										93
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/__root__/index.html
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/__root__/index.html
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,93 @@
 | 
			
		|||
<!doctype html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <title>Code coverage report for __root__/</title>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <link rel="stylesheet" href="../prettify.css" />
 | 
			
		||||
    <link rel="stylesheet" href="../base.css" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
    <style type='text/css'>
 | 
			
		||||
        .coverage-summary .sorter {
 | 
			
		||||
            background-image: url(../sort-arrow-sprite.png);
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div class='wrapper'>
 | 
			
		||||
  <div class='pad1'>
 | 
			
		||||
    <h1>
 | 
			
		||||
      <a href="../index.html">all files</a> __root__/
 | 
			
		||||
    </h1>
 | 
			
		||||
    <div class='clearfix'>
 | 
			
		||||
      <div class='fl pad1y space-right2'>
 | 
			
		||||
        <span class="strong">77.03% </span>
 | 
			
		||||
        <span class="quiet">Statements</span>
 | 
			
		||||
        <span class='fraction'>57/74</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class='fl pad1y space-right2'>
 | 
			
		||||
        <span class="strong">57.14% </span>
 | 
			
		||||
        <span class="quiet">Branches</span>
 | 
			
		||||
        <span class='fraction'>28/49</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class='fl pad1y space-right2'>
 | 
			
		||||
        <span class="strong">93.33% </span>
 | 
			
		||||
        <span class="quiet">Functions</span>
 | 
			
		||||
        <span class='fraction'>14/15</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class='fl pad1y space-right2'>
 | 
			
		||||
        <span class="strong">79.1% </span>
 | 
			
		||||
        <span class="quiet">Lines</span>
 | 
			
		||||
        <span class='fraction'>53/67</span>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class='status-line medium'></div>
 | 
			
		||||
<div class="pad1">
 | 
			
		||||
<table class="coverage-summary">
 | 
			
		||||
<thead>
 | 
			
		||||
<tr>
 | 
			
		||||
   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
 | 
			
		||||
   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
 | 
			
		||||
   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
 | 
			
		||||
   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
 | 
			
		||||
   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
 | 
			
		||||
   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
 | 
			
		||||
   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
 | 
			
		||||
   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
 | 
			
		||||
   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
 | 
			
		||||
   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
 | 
			
		||||
</tr>
 | 
			
		||||
</thead>
 | 
			
		||||
<tbody><tr>
 | 
			
		||||
	<td class="file medium" data-value="mute.js"><a href="mute.js.html">mute.js</a></td>
 | 
			
		||||
	<td data-value="77.03" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 77%;"></div><div class="cover-empty" style="width:23%;"></div></div></td>
 | 
			
		||||
	<td data-value="77.03" class="pct medium">77.03%</td>
 | 
			
		||||
	<td data-value="74" class="abs medium">57/74</td>
 | 
			
		||||
	<td data-value="57.14" class="pct medium">57.14%</td>
 | 
			
		||||
	<td data-value="49" class="abs medium">28/49</td>
 | 
			
		||||
	<td data-value="93.33" class="pct high">93.33%</td>
 | 
			
		||||
	<td data-value="15" class="abs high">14/15</td>
 | 
			
		||||
	<td data-value="79.1" class="pct medium">79.1%</td>
 | 
			
		||||
	<td data-value="67" class="abs medium">53/67</td>
 | 
			
		||||
	</tr>
 | 
			
		||||
 | 
			
		||||
</tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div><div class='push'></div><!-- for sticky footer -->
 | 
			
		||||
</div><!-- /wrapper -->
 | 
			
		||||
<div class='footer quiet pad2 space-top1 center small'>
 | 
			
		||||
  Code coverage
 | 
			
		||||
  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Fri Feb 12 2016 22:19:00 GMT-0800 (PST)
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
<script src="../prettify.js"></script>
 | 
			
		||||
<script>
 | 
			
		||||
window.onload = function () {
 | 
			
		||||
        if (typeof prettyPrint === 'function') {
 | 
			
		||||
            prettyPrint();
 | 
			
		||||
        }
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<script src="../sorter.js"></script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										500
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/__root__/mute.js.html
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										500
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/__root__/mute.js.html
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,500 @@
 | 
			
		|||
<!doctype html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <title>Code coverage report for mute.js</title>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <link rel="stylesheet" href="../prettify.css" />
 | 
			
		||||
    <link rel="stylesheet" href="../base.css" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
    <style type='text/css'>
 | 
			
		||||
        .coverage-summary .sorter {
 | 
			
		||||
            background-image: url(../sort-arrow-sprite.png);
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div class='wrapper'>
 | 
			
		||||
  <div class='pad1'>
 | 
			
		||||
    <h1>
 | 
			
		||||
      <a href="../index.html">all files</a> / <a href="index.html">__root__/</a> mute.js
 | 
			
		||||
    </h1>
 | 
			
		||||
    <div class='clearfix'>
 | 
			
		||||
      <div class='fl pad1y space-right2'>
 | 
			
		||||
        <span class="strong">77.03% </span>
 | 
			
		||||
        <span class="quiet">Statements</span>
 | 
			
		||||
        <span class='fraction'>57/74</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class='fl pad1y space-right2'>
 | 
			
		||||
        <span class="strong">57.14% </span>
 | 
			
		||||
        <span class="quiet">Branches</span>
 | 
			
		||||
        <span class='fraction'>28/49</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class='fl pad1y space-right2'>
 | 
			
		||||
        <span class="strong">93.33% </span>
 | 
			
		||||
        <span class="quiet">Functions</span>
 | 
			
		||||
        <span class='fraction'>14/15</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class='fl pad1y space-right2'>
 | 
			
		||||
        <span class="strong">79.1% </span>
 | 
			
		||||
        <span class="quiet">Lines</span>
 | 
			
		||||
        <span class='fraction'>53/67</span>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class='status-line medium'></div>
 | 
			
		||||
<pre><table class="coverage">
 | 
			
		||||
<tr><td class="line-count quiet">1
 | 
			
		||||
2
 | 
			
		||||
3
 | 
			
		||||
4
 | 
			
		||||
5
 | 
			
		||||
6
 | 
			
		||||
7
 | 
			
		||||
8
 | 
			
		||||
9
 | 
			
		||||
10
 | 
			
		||||
11
 | 
			
		||||
12
 | 
			
		||||
13
 | 
			
		||||
14
 | 
			
		||||
15
 | 
			
		||||
16
 | 
			
		||||
17
 | 
			
		||||
18
 | 
			
		||||
19
 | 
			
		||||
20
 | 
			
		||||
21
 | 
			
		||||
22
 | 
			
		||||
23
 | 
			
		||||
24
 | 
			
		||||
25
 | 
			
		||||
26
 | 
			
		||||
27
 | 
			
		||||
28
 | 
			
		||||
29
 | 
			
		||||
30
 | 
			
		||||
31
 | 
			
		||||
32
 | 
			
		||||
33
 | 
			
		||||
34
 | 
			
		||||
35
 | 
			
		||||
36
 | 
			
		||||
37
 | 
			
		||||
38
 | 
			
		||||
39
 | 
			
		||||
40
 | 
			
		||||
41
 | 
			
		||||
42
 | 
			
		||||
43
 | 
			
		||||
44
 | 
			
		||||
45
 | 
			
		||||
46
 | 
			
		||||
47
 | 
			
		||||
48
 | 
			
		||||
49
 | 
			
		||||
50
 | 
			
		||||
51
 | 
			
		||||
52
 | 
			
		||||
53
 | 
			
		||||
54
 | 
			
		||||
55
 | 
			
		||||
56
 | 
			
		||||
57
 | 
			
		||||
58
 | 
			
		||||
59
 | 
			
		||||
60
 | 
			
		||||
61
 | 
			
		||||
62
 | 
			
		||||
63
 | 
			
		||||
64
 | 
			
		||||
65
 | 
			
		||||
66
 | 
			
		||||
67
 | 
			
		||||
68
 | 
			
		||||
69
 | 
			
		||||
70
 | 
			
		||||
71
 | 
			
		||||
72
 | 
			
		||||
73
 | 
			
		||||
74
 | 
			
		||||
75
 | 
			
		||||
76
 | 
			
		||||
77
 | 
			
		||||
78
 | 
			
		||||
79
 | 
			
		||||
80
 | 
			
		||||
81
 | 
			
		||||
82
 | 
			
		||||
83
 | 
			
		||||
84
 | 
			
		||||
85
 | 
			
		||||
86
 | 
			
		||||
87
 | 
			
		||||
88
 | 
			
		||||
89
 | 
			
		||||
90
 | 
			
		||||
91
 | 
			
		||||
92
 | 
			
		||||
93
 | 
			
		||||
94
 | 
			
		||||
95
 | 
			
		||||
96
 | 
			
		||||
97
 | 
			
		||||
98
 | 
			
		||||
99
 | 
			
		||||
100
 | 
			
		||||
101
 | 
			
		||||
102
 | 
			
		||||
103
 | 
			
		||||
104
 | 
			
		||||
105
 | 
			
		||||
106
 | 
			
		||||
107
 | 
			
		||||
108
 | 
			
		||||
109
 | 
			
		||||
110
 | 
			
		||||
111
 | 
			
		||||
112
 | 
			
		||||
113
 | 
			
		||||
114
 | 
			
		||||
115
 | 
			
		||||
116
 | 
			
		||||
117
 | 
			
		||||
118
 | 
			
		||||
119
 | 
			
		||||
120
 | 
			
		||||
121
 | 
			
		||||
122
 | 
			
		||||
123
 | 
			
		||||
124
 | 
			
		||||
125
 | 
			
		||||
126
 | 
			
		||||
127
 | 
			
		||||
128
 | 
			
		||||
129
 | 
			
		||||
130
 | 
			
		||||
131
 | 
			
		||||
132
 | 
			
		||||
133
 | 
			
		||||
134
 | 
			
		||||
135
 | 
			
		||||
136
 | 
			
		||||
137
 | 
			
		||||
138
 | 
			
		||||
139
 | 
			
		||||
140
 | 
			
		||||
141
 | 
			
		||||
142
 | 
			
		||||
143
 | 
			
		||||
144
 | 
			
		||||
145
 | 
			
		||||
146</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-yes">7×</span>
 | 
			
		||||
<span class="cline-any cline-yes">7×</span>
 | 
			
		||||
<span class="cline-any cline-yes">7×</span>
 | 
			
		||||
<span class="cline-any cline-yes">7×</span>
 | 
			
		||||
<span class="cline-any cline-yes">7×</span>
 | 
			
		||||
<span class="cline-any cline-yes">7×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">7×</span>
 | 
			
		||||
<span class="cline-any cline-yes">7×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-yes">10×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-yes">6×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-yes">5×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-yes">8×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-yes">2×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">5×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">5×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-yes">2×</span>
 | 
			
		||||
<span class="cline-any cline-yes">2×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-yes">2×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-yes">2×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-yes">25×</span>
 | 
			
		||||
<span class="cline-any cline-yes">13×</span>
 | 
			
		||||
<span class="cline-any cline-yes">8×</span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">8×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">8×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">20×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-yes">2×</span>
 | 
			
		||||
<span class="cline-any cline-yes">2×</span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">2×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">2×</span>
 | 
			
		||||
<span class="cline-any cline-yes">2×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">3×</span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-no"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-yes">1×</span>
 | 
			
		||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">var Stream = require('stream')
 | 
			
		||||
 
 | 
			
		||||
module.exports = MuteStream
 | 
			
		||||
 
 | 
			
		||||
// var out = new MuteStream(process.stdout)
 | 
			
		||||
// argument auto-pipes
 | 
			
		||||
function MuteStream (opts) {
 | 
			
		||||
  Stream.apply(this)
 | 
			
		||||
  opts = opts || {}
 | 
			
		||||
  this.writable = this.readable = true
 | 
			
		||||
  this.muted = false
 | 
			
		||||
  this.on('pipe', this._onpipe)
 | 
			
		||||
  this.replace = opts.replace
 | 
			
		||||
 
 | 
			
		||||
  // For readline-type situations
 | 
			
		||||
  // This much at the start of a line being redrawn after a ctrl char
 | 
			
		||||
  // is seen (such as backspace) won't be redrawn as the replacement
 | 
			
		||||
  this._prompt = opts.prompt || null
 | 
			
		||||
  this._hadControl = false
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
MuteStream.prototype = Object.create(Stream.prototype)
 | 
			
		||||
 
 | 
			
		||||
Object.defineProperty(MuteStream.prototype, 'constructor', {
 | 
			
		||||
  value: MuteStream,
 | 
			
		||||
  enumerable: false
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
MuteStream.prototype.mute = function () {
 | 
			
		||||
  this.muted = true
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
MuteStream.prototype.unmute = function () {
 | 
			
		||||
  this.muted = false
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
Object.defineProperty(MuteStream.prototype, '_onpipe', {
 | 
			
		||||
  value: onPipe,
 | 
			
		||||
  enumerable: false,
 | 
			
		||||
  writable: true,
 | 
			
		||||
  configurable: true
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
function onPipe (src) {
 | 
			
		||||
  this._src = src
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
Object.defineProperty(MuteStream.prototype, 'isTTY', {
 | 
			
		||||
  get: getIsTTY,
 | 
			
		||||
  set: setIsTTY,
 | 
			
		||||
  enumerable: true,
 | 
			
		||||
  configurable: true
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
function getIsTTY () {
 | 
			
		||||
  return( (this._dest) ? this._dest.isTTY
 | 
			
		||||
        : (this._src) ? this._src.isTTY
 | 
			
		||||
        : false
 | 
			
		||||
        )
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
// basically just get replace the getter/setter with a regular value
 | 
			
		||||
function setIsTTY (isTTY) {
 | 
			
		||||
  Object.defineProperty(this, 'isTTY', {
 | 
			
		||||
    value: isTTY,
 | 
			
		||||
    enumerable: true,
 | 
			
		||||
    writable: true,
 | 
			
		||||
    configurable: true
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
Object.defineProperty(MuteStream.prototype, 'rows', {
 | 
			
		||||
  get: function () {
 | 
			
		||||
    return( this._dest ? this._dest.rows
 | 
			
		||||
          : this._src ? <span class="branch-0 cbranch-no" title="branch not covered" >this._src.rows</span>
 | 
			
		||||
          : undefined )
 | 
			
		||||
  }, enumerable: true, configurable: true })
 | 
			
		||||
 
 | 
			
		||||
Object.defineProperty(MuteStream.prototype, 'columns', {
 | 
			
		||||
  get: function () {
 | 
			
		||||
    return( this._dest ? this._dest.columns
 | 
			
		||||
          : this._src ? <span class="branch-0 cbranch-no" title="branch not covered" >this._src.columns</span>
 | 
			
		||||
          : undefined )
 | 
			
		||||
  }, enumerable: true, configurable: true })
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
MuteStream.prototype.pipe = function (dest, options) {
 | 
			
		||||
  this._dest = dest
 | 
			
		||||
  return Stream.prototype.pipe.call(this, dest, options)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
MuteStream.prototype.pause = function () {
 | 
			
		||||
  <span class="missing-if-branch" title="else path not taken" >E</span>if (this._src) return this._src.pause()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
MuteStream.prototype.resume = function () {
 | 
			
		||||
  <span class="missing-if-branch" title="else path not taken" >E</span>if (this._src) return this._src.resume()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
MuteStream.prototype.write = function (c) {
 | 
			
		||||
  if (this.muted) {
 | 
			
		||||
    if (!this.replace) return true
 | 
			
		||||
    <span class="missing-if-branch" title="if path not taken" >I</span>if (c.match(/^\u001b/)) {
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >      if(c.indexOf(this._prompt) === 0) {</span>
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >        c = c.substr(this._prompt.length);</span>
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >        c = c.replace(/./g, this.replace);</span>
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >        c = this._prompt + c;</span>
 | 
			
		||||
      }
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >      this._hadControl = true</span>
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >      return this.emit('data', c)</span>
 | 
			
		||||
    } else {
 | 
			
		||||
      <span class="missing-if-branch" title="if path not taken" >I</span>if (this._prompt && <span class="branch-1 cbranch-no" title="branch not covered" >this._hadControl </span>&&
 | 
			
		||||
<span class="branch-2 cbranch-no" title="branch not covered" >          c.indexOf(this._prompt) === 0)</span> {
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >        this._hadControl = false</span>
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >        this.emit('data', this._prompt)</span>
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >        c = c.substr(this._prompt.length)</span>
 | 
			
		||||
      }
 | 
			
		||||
      c = c.toString().replace(/./g, this.replace)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  this.emit('data', c)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
MuteStream.prototype.end = function (c) {
 | 
			
		||||
  <span class="missing-if-branch" title="else path not taken" >E</span>if (this.muted) {
 | 
			
		||||
    <span class="missing-if-branch" title="if path not taken" >I</span>if (c && this.replace) {
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >      c = c.toString().replace(/./g, this.replace)</span>
 | 
			
		||||
    } else {
 | 
			
		||||
      c = null
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  <span class="missing-if-branch" title="if path not taken" >I</span>if (c) <span class="cstat-no" title="statement not covered" >this.emit('data', c)</span>
 | 
			
		||||
  this.emit('end')
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
function proxy (fn) { return <span class="fstat-no" title="function not covered" >function () {</span>
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >  var d = this._dest</span>
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >  var s = this._src</span>
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >  if (d && d[fn]) <span class="cstat-no" title="statement not covered" >d[fn].apply(d, arguments)</span></span>
 | 
			
		||||
<span class="cstat-no" title="statement not covered" >  if (s && s[fn]) <span class="cstat-no" title="statement not covered" >s[fn].apply(s, arguments)</span></span>
 | 
			
		||||
}}
 | 
			
		||||
 
 | 
			
		||||
MuteStream.prototype.destroy = proxy('destroy')
 | 
			
		||||
MuteStream.prototype.destroySoon = proxy('destroySoon')
 | 
			
		||||
MuteStream.prototype.close = proxy('close')
 | 
			
		||||
 </pre></td></tr>
 | 
			
		||||
</table></pre>
 | 
			
		||||
<div class='push'></div><!-- for sticky footer -->
 | 
			
		||||
</div><!-- /wrapper -->
 | 
			
		||||
<div class='footer quiet pad2 space-top1 center small'>
 | 
			
		||||
  Code coverage
 | 
			
		||||
  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Fri Feb 12 2016 22:19:00 GMT-0800 (PST)
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
<script src="../prettify.js"></script>
 | 
			
		||||
<script>
 | 
			
		||||
window.onload = function () {
 | 
			
		||||
        if (typeof prettyPrint === 'function') {
 | 
			
		||||
            prettyPrint();
 | 
			
		||||
        }
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<script src="../sorter.js"></script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										212
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/base.css
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										212
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/base.css
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,212 @@
 | 
			
		|||
body, html {
 | 
			
		||||
  margin:0; padding: 0;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
body {
 | 
			
		||||
    font-family: Helvetica Neue, Helvetica, Arial;
 | 
			
		||||
    font-size: 14px;
 | 
			
		||||
    color:#333;
 | 
			
		||||
}
 | 
			
		||||
.small { font-size: 12px;; }
 | 
			
		||||
*, *:after, *:before {
 | 
			
		||||
  -webkit-box-sizing:border-box;
 | 
			
		||||
     -moz-box-sizing:border-box;
 | 
			
		||||
          box-sizing:border-box;
 | 
			
		||||
  }
 | 
			
		||||
h1 { font-size: 20px; margin: 0;}
 | 
			
		||||
h2 { font-size: 14px; }
 | 
			
		||||
pre {
 | 
			
		||||
    font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    -moz-tab-size: 2;
 | 
			
		||||
    -o-tab-size:  2;
 | 
			
		||||
    tab-size: 2;
 | 
			
		||||
}
 | 
			
		||||
a { color:#0074D9; text-decoration:none; }
 | 
			
		||||
a:hover { text-decoration:underline; }
 | 
			
		||||
.strong { font-weight: bold; }
 | 
			
		||||
.space-top1 { padding: 10px 0 0 0; }
 | 
			
		||||
.pad2y { padding: 20px 0; }
 | 
			
		||||
.pad1y { padding: 10px 0; }
 | 
			
		||||
.pad2x { padding: 0 20px; }
 | 
			
		||||
.pad2 { padding: 20px; }
 | 
			
		||||
.pad1 { padding: 10px; }
 | 
			
		||||
.space-left2 { padding-left:55px; }
 | 
			
		||||
.space-right2 { padding-right:20px; }
 | 
			
		||||
.center { text-align:center; }
 | 
			
		||||
.clearfix { display:block; }
 | 
			
		||||
.clearfix:after {
 | 
			
		||||
  content:'';
 | 
			
		||||
  display:block;
 | 
			
		||||
  height:0;
 | 
			
		||||
  clear:both;
 | 
			
		||||
  visibility:hidden;
 | 
			
		||||
  }
 | 
			
		||||
.fl { float: left; }
 | 
			
		||||
@media only screen and (max-width:640px) {
 | 
			
		||||
  .col3 { width:100%; max-width:100%; }
 | 
			
		||||
  .hide-mobile { display:none!important; }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.quiet {
 | 
			
		||||
  color: #7f7f7f;
 | 
			
		||||
  color: rgba(0,0,0,0.5);
 | 
			
		||||
}
 | 
			
		||||
.quiet a { opacity: 0.7; }
 | 
			
		||||
 | 
			
		||||
.fraction {
 | 
			
		||||
  font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
 | 
			
		||||
  font-size: 10px;
 | 
			
		||||
  color: #555;
 | 
			
		||||
  background: #E8E8E8;
 | 
			
		||||
  padding: 4px 5px;
 | 
			
		||||
  border-radius: 3px;
 | 
			
		||||
  vertical-align: middle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.path a:link, div.path a:visited { color: #333; }
 | 
			
		||||
table.coverage {
 | 
			
		||||
  border-collapse: collapse;
 | 
			
		||||
  margin: 10px 0 0 0;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.coverage td {
 | 
			
		||||
  margin: 0;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  vertical-align: top;
 | 
			
		||||
}
 | 
			
		||||
table.coverage td.line-count {
 | 
			
		||||
    text-align: right;
 | 
			
		||||
    padding: 0 5px 0 20px;
 | 
			
		||||
}
 | 
			
		||||
table.coverage td.line-coverage {
 | 
			
		||||
    text-align: right;
 | 
			
		||||
    padding-right: 10px;
 | 
			
		||||
    min-width:20px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.coverage td span.cline-any {
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
    padding: 0 5px;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
}
 | 
			
		||||
.missing-if-branch {
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
    margin-right: 5px;
 | 
			
		||||
    border-radius: 3px;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    padding: 0 4px;
 | 
			
		||||
    background: #333;
 | 
			
		||||
    color: yellow;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.skip-if-branch {
 | 
			
		||||
    display: none;
 | 
			
		||||
    margin-right: 10px;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    padding: 0 4px;
 | 
			
		||||
    background: #ccc;
 | 
			
		||||
    color: white;
 | 
			
		||||
}
 | 
			
		||||
.missing-if-branch .typ, .skip-if-branch .typ {
 | 
			
		||||
    color: inherit !important;
 | 
			
		||||
}
 | 
			
		||||
.coverage-summary {
 | 
			
		||||
  border-collapse: collapse;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
.coverage-summary tr { border-bottom: 1px solid #bbb; }
 | 
			
		||||
.keyline-all { border: 1px solid #ddd; }
 | 
			
		||||
.coverage-summary td, .coverage-summary th { padding: 10px; }
 | 
			
		||||
.coverage-summary tbody { border: 1px solid #bbb; }
 | 
			
		||||
.coverage-summary td { border-right: 1px solid #bbb; }
 | 
			
		||||
.coverage-summary td:last-child { border-right: none; }
 | 
			
		||||
.coverage-summary th {
 | 
			
		||||
  text-align: left;
 | 
			
		||||
  font-weight: normal;
 | 
			
		||||
  white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
.coverage-summary th.file { border-right: none !important; }
 | 
			
		||||
.coverage-summary th.pct { }
 | 
			
		||||
.coverage-summary th.pic,
 | 
			
		||||
.coverage-summary th.abs,
 | 
			
		||||
.coverage-summary td.pct,
 | 
			
		||||
.coverage-summary td.abs { text-align: right; }
 | 
			
		||||
.coverage-summary td.file { white-space: nowrap;  }
 | 
			
		||||
.coverage-summary td.pic { min-width: 120px !important;  }
 | 
			
		||||
.coverage-summary tfoot td { }
 | 
			
		||||
 | 
			
		||||
.coverage-summary .sorter {
 | 
			
		||||
    height: 10px;
 | 
			
		||||
    width: 7px;
 | 
			
		||||
    display: inline-block;
 | 
			
		||||
    margin-left: 0.5em;
 | 
			
		||||
    background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
 | 
			
		||||
}
 | 
			
		||||
.coverage-summary .sorted .sorter {
 | 
			
		||||
    background-position: 0 -20px;
 | 
			
		||||
}
 | 
			
		||||
.coverage-summary .sorted-desc .sorter {
 | 
			
		||||
    background-position: 0 -10px;
 | 
			
		||||
}
 | 
			
		||||
.status-line {  height: 10px; }
 | 
			
		||||
/* dark red */
 | 
			
		||||
.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
 | 
			
		||||
.low .chart { border:1px solid #C21F39 }
 | 
			
		||||
/* medium red */
 | 
			
		||||
.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
 | 
			
		||||
/* light red */
 | 
			
		||||
.low, .cline-no { background:#FCE1E5 }
 | 
			
		||||
/* light green */
 | 
			
		||||
.high, .cline-yes { background:rgb(230,245,208) }
 | 
			
		||||
/* medium green */
 | 
			
		||||
.cstat-yes { background:rgb(161,215,106) }
 | 
			
		||||
/* dark green */
 | 
			
		||||
.status-line.high, .high .cover-fill { background:rgb(77,146,33) }
 | 
			
		||||
.high .chart { border:1px solid rgb(77,146,33) }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.medium .chart { border:1px solid #666; }
 | 
			
		||||
.medium .cover-fill { background: #666; }
 | 
			
		||||
 | 
			
		||||
.cbranch-no { background:  yellow !important; color: #111; }
 | 
			
		||||
 | 
			
		||||
.cstat-skip { background: #ddd; color: #111; }
 | 
			
		||||
.fstat-skip { background: #ddd; color: #111 !important; }
 | 
			
		||||
.cbranch-skip { background: #ddd !important; color: #111; }
 | 
			
		||||
 | 
			
		||||
span.cline-neutral { background: #eaeaea; }
 | 
			
		||||
.medium { background: #eaeaea; }
 | 
			
		||||
 | 
			
		||||
.cover-fill, .cover-empty {
 | 
			
		||||
  display:inline-block;
 | 
			
		||||
  height: 12px;
 | 
			
		||||
}
 | 
			
		||||
.chart {
 | 
			
		||||
  line-height: 0;
 | 
			
		||||
}
 | 
			
		||||
.cover-empty {
 | 
			
		||||
    background: white;
 | 
			
		||||
}
 | 
			
		||||
.cover-full {
 | 
			
		||||
    border-right: none !important;
 | 
			
		||||
}
 | 
			
		||||
pre.prettyprint {
 | 
			
		||||
    border: none !important;
 | 
			
		||||
    padding: 0 !important;
 | 
			
		||||
    margin: 0 !important;
 | 
			
		||||
}
 | 
			
		||||
.com { color: #999 !important; }
 | 
			
		||||
.ignore-none { color: #999; font-weight: normal; }
 | 
			
		||||
 | 
			
		||||
.wrapper {
 | 
			
		||||
  min-height: 100%;
 | 
			
		||||
  height: auto !important;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  margin: 0 auto -48px;
 | 
			
		||||
}
 | 
			
		||||
.footer, .push {
 | 
			
		||||
  height: 48px;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										93
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/index.html
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/index.html
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,93 @@
 | 
			
		|||
<!doctype html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <title>Code coverage report for All files</title>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <link rel="stylesheet" href="prettify.css" />
 | 
			
		||||
    <link rel="stylesheet" href="base.css" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
    <style type='text/css'>
 | 
			
		||||
        .coverage-summary .sorter {
 | 
			
		||||
            background-image: url(sort-arrow-sprite.png);
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div class='wrapper'>
 | 
			
		||||
  <div class='pad1'>
 | 
			
		||||
    <h1>
 | 
			
		||||
      /
 | 
			
		||||
    </h1>
 | 
			
		||||
    <div class='clearfix'>
 | 
			
		||||
      <div class='fl pad1y space-right2'>
 | 
			
		||||
        <span class="strong">77.03% </span>
 | 
			
		||||
        <span class="quiet">Statements</span>
 | 
			
		||||
        <span class='fraction'>57/74</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class='fl pad1y space-right2'>
 | 
			
		||||
        <span class="strong">57.14% </span>
 | 
			
		||||
        <span class="quiet">Branches</span>
 | 
			
		||||
        <span class='fraction'>28/49</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class='fl pad1y space-right2'>
 | 
			
		||||
        <span class="strong">93.33% </span>
 | 
			
		||||
        <span class="quiet">Functions</span>
 | 
			
		||||
        <span class='fraction'>14/15</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class='fl pad1y space-right2'>
 | 
			
		||||
        <span class="strong">79.1% </span>
 | 
			
		||||
        <span class="quiet">Lines</span>
 | 
			
		||||
        <span class='fraction'>53/67</span>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class='status-line medium'></div>
 | 
			
		||||
<div class="pad1">
 | 
			
		||||
<table class="coverage-summary">
 | 
			
		||||
<thead>
 | 
			
		||||
<tr>
 | 
			
		||||
   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
 | 
			
		||||
   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
 | 
			
		||||
   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
 | 
			
		||||
   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
 | 
			
		||||
   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
 | 
			
		||||
   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
 | 
			
		||||
   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
 | 
			
		||||
   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
 | 
			
		||||
   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
 | 
			
		||||
   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
 | 
			
		||||
</tr>
 | 
			
		||||
</thead>
 | 
			
		||||
<tbody><tr>
 | 
			
		||||
	<td class="file medium" data-value="__root__/"><a href="__root__/index.html">__root__/</a></td>
 | 
			
		||||
	<td data-value="77.03" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 77%;"></div><div class="cover-empty" style="width:23%;"></div></div></td>
 | 
			
		||||
	<td data-value="77.03" class="pct medium">77.03%</td>
 | 
			
		||||
	<td data-value="74" class="abs medium">57/74</td>
 | 
			
		||||
	<td data-value="57.14" class="pct medium">57.14%</td>
 | 
			
		||||
	<td data-value="49" class="abs medium">28/49</td>
 | 
			
		||||
	<td data-value="93.33" class="pct high">93.33%</td>
 | 
			
		||||
	<td data-value="15" class="abs high">14/15</td>
 | 
			
		||||
	<td data-value="79.1" class="pct medium">79.1%</td>
 | 
			
		||||
	<td data-value="67" class="abs medium">53/67</td>
 | 
			
		||||
	</tr>
 | 
			
		||||
 | 
			
		||||
</tbody>
 | 
			
		||||
</table>
 | 
			
		||||
</div><div class='push'></div><!-- for sticky footer -->
 | 
			
		||||
</div><!-- /wrapper -->
 | 
			
		||||
<div class='footer quiet pad2 space-top1 center small'>
 | 
			
		||||
  Code coverage
 | 
			
		||||
  generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Fri Feb 12 2016 22:19:00 GMT-0800 (PST)
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
<script src="prettify.js"></script>
 | 
			
		||||
<script>
 | 
			
		||||
window.onload = function () {
 | 
			
		||||
        if (typeof prettyPrint === 'function') {
 | 
			
		||||
            prettyPrint();
 | 
			
		||||
        }
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<script src="sorter.js"></script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/prettify.css
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/prettify.css
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/prettify.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/prettify.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/sort-arrow-sprite.png
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/sort-arrow-sprite.png
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 209 B  | 
							
								
								
									
										158
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/sorter.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										158
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov-report/sorter.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,158 @@
 | 
			
		|||
var addSorting = (function () {
 | 
			
		||||
    "use strict";
 | 
			
		||||
    var cols,
 | 
			
		||||
        currentSort = {
 | 
			
		||||
            index: 0,
 | 
			
		||||
            desc: false
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
    // returns the summary table element
 | 
			
		||||
    function getTable() { return document.querySelector('.coverage-summary'); }
 | 
			
		||||
    // returns the thead element of the summary table
 | 
			
		||||
    function getTableHeader() { return getTable().querySelector('thead tr'); }
 | 
			
		||||
    // returns the tbody element of the summary table
 | 
			
		||||
    function getTableBody() { return getTable().querySelector('tbody'); }
 | 
			
		||||
    // returns the th element for nth column
 | 
			
		||||
    function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; }
 | 
			
		||||
 | 
			
		||||
    // loads all columns
 | 
			
		||||
    function loadColumns() {
 | 
			
		||||
        var colNodes = getTableHeader().querySelectorAll('th'),
 | 
			
		||||
            colNode,
 | 
			
		||||
            cols = [],
 | 
			
		||||
            col,
 | 
			
		||||
            i;
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < colNodes.length; i += 1) {
 | 
			
		||||
            colNode = colNodes[i];
 | 
			
		||||
            col = {
 | 
			
		||||
                key: colNode.getAttribute('data-col'),
 | 
			
		||||
                sortable: !colNode.getAttribute('data-nosort'),
 | 
			
		||||
                type: colNode.getAttribute('data-type') || 'string'
 | 
			
		||||
            };
 | 
			
		||||
            cols.push(col);
 | 
			
		||||
            if (col.sortable) {
 | 
			
		||||
                col.defaultDescSort = col.type === 'number';
 | 
			
		||||
                colNode.innerHTML = colNode.innerHTML + '<span class="sorter"></span>';
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return cols;
 | 
			
		||||
    }
 | 
			
		||||
    // attaches a data attribute to every tr element with an object
 | 
			
		||||
    // of data values keyed by column name
 | 
			
		||||
    function loadRowData(tableRow) {
 | 
			
		||||
        var tableCols = tableRow.querySelectorAll('td'),
 | 
			
		||||
            colNode,
 | 
			
		||||
            col,
 | 
			
		||||
            data = {},
 | 
			
		||||
            i,
 | 
			
		||||
            val;
 | 
			
		||||
        for (i = 0; i < tableCols.length; i += 1) {
 | 
			
		||||
            colNode = tableCols[i];
 | 
			
		||||
            col = cols[i];
 | 
			
		||||
            val = colNode.getAttribute('data-value');
 | 
			
		||||
            if (col.type === 'number') {
 | 
			
		||||
                val = Number(val);
 | 
			
		||||
            }
 | 
			
		||||
            data[col.key] = val;
 | 
			
		||||
        }
 | 
			
		||||
        return data;
 | 
			
		||||
    }
 | 
			
		||||
    // loads all row data
 | 
			
		||||
    function loadData() {
 | 
			
		||||
        var rows = getTableBody().querySelectorAll('tr'),
 | 
			
		||||
            i;
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < rows.length; i += 1) {
 | 
			
		||||
            rows[i].data = loadRowData(rows[i]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    // sorts the table using the data for the ith column
 | 
			
		||||
    function sortByIndex(index, desc) {
 | 
			
		||||
        var key = cols[index].key,
 | 
			
		||||
            sorter = function (a, b) {
 | 
			
		||||
                a = a.data[key];
 | 
			
		||||
                b = b.data[key];
 | 
			
		||||
                return a < b ? -1 : a > b ? 1 : 0;
 | 
			
		||||
            },
 | 
			
		||||
            finalSorter = sorter,
 | 
			
		||||
            tableBody = document.querySelector('.coverage-summary tbody'),
 | 
			
		||||
            rowNodes = tableBody.querySelectorAll('tr'),
 | 
			
		||||
            rows = [],
 | 
			
		||||
            i;
 | 
			
		||||
 | 
			
		||||
        if (desc) {
 | 
			
		||||
            finalSorter = function (a, b) {
 | 
			
		||||
                return -1 * sorter(a, b);
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < rowNodes.length; i += 1) {
 | 
			
		||||
            rows.push(rowNodes[i]);
 | 
			
		||||
            tableBody.removeChild(rowNodes[i]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        rows.sort(finalSorter);
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < rows.length; i += 1) {
 | 
			
		||||
            tableBody.appendChild(rows[i]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    // removes sort indicators for current column being sorted
 | 
			
		||||
    function removeSortIndicators() {
 | 
			
		||||
        var col = getNthColumn(currentSort.index),
 | 
			
		||||
            cls = col.className;
 | 
			
		||||
 | 
			
		||||
        cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
 | 
			
		||||
        col.className = cls;
 | 
			
		||||
    }
 | 
			
		||||
    // adds sort indicators for current column being sorted
 | 
			
		||||
    function addSortIndicators() {
 | 
			
		||||
        getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted';
 | 
			
		||||
    }
 | 
			
		||||
    // adds event listeners for all sorter widgets
 | 
			
		||||
    function enableUI() {
 | 
			
		||||
        var i,
 | 
			
		||||
            el,
 | 
			
		||||
            ithSorter = function ithSorter(i) {
 | 
			
		||||
                var col = cols[i];
 | 
			
		||||
 | 
			
		||||
                return function () {
 | 
			
		||||
                    var desc = col.defaultDescSort;
 | 
			
		||||
 | 
			
		||||
                    if (currentSort.index === i) {
 | 
			
		||||
                        desc = !currentSort.desc;
 | 
			
		||||
                    }
 | 
			
		||||
                    sortByIndex(i, desc);
 | 
			
		||||
                    removeSortIndicators();
 | 
			
		||||
                    currentSort.index = i;
 | 
			
		||||
                    currentSort.desc = desc;
 | 
			
		||||
                    addSortIndicators();
 | 
			
		||||
                };
 | 
			
		||||
            };
 | 
			
		||||
        for (i =0 ; i < cols.length; i += 1) {
 | 
			
		||||
            if (cols[i].sortable) {
 | 
			
		||||
                // add the click event handler on the th so users
 | 
			
		||||
                // dont have to click on those tiny arrows
 | 
			
		||||
                el = getNthColumn(i).querySelector('.sorter').parentElement;
 | 
			
		||||
                if (el.addEventListener) {
 | 
			
		||||
                    el.addEventListener('click', ithSorter(i));
 | 
			
		||||
                } else {
 | 
			
		||||
                    el.attachEvent('onclick', ithSorter(i));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    // adds sorting functionality to the UI
 | 
			
		||||
    return function () {
 | 
			
		||||
        if (!getTable()) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        cols = loadColumns();
 | 
			
		||||
        loadData(cols);
 | 
			
		||||
        addSortIndicators();
 | 
			
		||||
        enableUI();
 | 
			
		||||
    };
 | 
			
		||||
})();
 | 
			
		||||
 | 
			
		||||
window.addEventListener('load', addSorting);
 | 
			
		||||
							
								
								
									
										155
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov.info
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								node_modules/inquirer/node_modules/mute-stream/coverage/lcov.info
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,155 @@
 | 
			
		|||
TN:
 | 
			
		||||
SF:./mute.js
 | 
			
		||||
FN:7,MuteStream
 | 
			
		||||
FN:29,(anonymous_2)
 | 
			
		||||
FN:33,(anonymous_3)
 | 
			
		||||
FN:44,onPipe
 | 
			
		||||
FN:55,getIsTTY
 | 
			
		||||
FN:63,setIsTTY
 | 
			
		||||
FN:73,(anonymous_7)
 | 
			
		||||
FN:80,(anonymous_8)
 | 
			
		||||
FN:87,(anonymous_9)
 | 
			
		||||
FN:92,(anonymous_10)
 | 
			
		||||
FN:96,(anonymous_11)
 | 
			
		||||
FN:100,(anonymous_12)
 | 
			
		||||
FN:124,(anonymous_13)
 | 
			
		||||
FN:136,proxy
 | 
			
		||||
FN:136,(anonymous_15)
 | 
			
		||||
FNF:15
 | 
			
		||||
FNH:14
 | 
			
		||||
FNDA:7,MuteStream
 | 
			
		||||
FNDA:10,(anonymous_2)
 | 
			
		||||
FNDA:6,(anonymous_3)
 | 
			
		||||
FNDA:5,onPipe
 | 
			
		||||
FNDA:8,getIsTTY
 | 
			
		||||
FNDA:2,setIsTTY
 | 
			
		||||
FNDA:5,(anonymous_7)
 | 
			
		||||
FNDA:5,(anonymous_8)
 | 
			
		||||
FNDA:2,(anonymous_9)
 | 
			
		||||
FNDA:2,(anonymous_10)
 | 
			
		||||
FNDA:2,(anonymous_11)
 | 
			
		||||
FNDA:25,(anonymous_12)
 | 
			
		||||
FNDA:2,(anonymous_13)
 | 
			
		||||
FNDA:3,proxy
 | 
			
		||||
FNDA:0,(anonymous_15)
 | 
			
		||||
DA:1,1
 | 
			
		||||
DA:3,1
 | 
			
		||||
DA:7,1
 | 
			
		||||
DA:8,7
 | 
			
		||||
DA:9,7
 | 
			
		||||
DA:10,7
 | 
			
		||||
DA:11,7
 | 
			
		||||
DA:12,7
 | 
			
		||||
DA:13,7
 | 
			
		||||
DA:18,7
 | 
			
		||||
DA:19,7
 | 
			
		||||
DA:22,1
 | 
			
		||||
DA:24,1
 | 
			
		||||
DA:29,1
 | 
			
		||||
DA:30,10
 | 
			
		||||
DA:33,1
 | 
			
		||||
DA:34,6
 | 
			
		||||
DA:37,1
 | 
			
		||||
DA:44,1
 | 
			
		||||
DA:45,5
 | 
			
		||||
DA:48,1
 | 
			
		||||
DA:55,1
 | 
			
		||||
DA:56,8
 | 
			
		||||
DA:63,1
 | 
			
		||||
DA:64,2
 | 
			
		||||
DA:72,1
 | 
			
		||||
DA:74,5
 | 
			
		||||
DA:79,1
 | 
			
		||||
DA:81,5
 | 
			
		||||
DA:87,1
 | 
			
		||||
DA:88,2
 | 
			
		||||
DA:89,2
 | 
			
		||||
DA:92,1
 | 
			
		||||
DA:93,2
 | 
			
		||||
DA:96,1
 | 
			
		||||
DA:97,2
 | 
			
		||||
DA:100,1
 | 
			
		||||
DA:101,25
 | 
			
		||||
DA:102,13
 | 
			
		||||
DA:103,8
 | 
			
		||||
DA:104,0
 | 
			
		||||
DA:105,0
 | 
			
		||||
DA:106,0
 | 
			
		||||
DA:107,0
 | 
			
		||||
DA:109,0
 | 
			
		||||
DA:110,0
 | 
			
		||||
DA:112,8
 | 
			
		||||
DA:114,0
 | 
			
		||||
DA:115,0
 | 
			
		||||
DA:116,0
 | 
			
		||||
DA:118,8
 | 
			
		||||
DA:121,20
 | 
			
		||||
DA:124,1
 | 
			
		||||
DA:125,2
 | 
			
		||||
DA:126,2
 | 
			
		||||
DA:127,0
 | 
			
		||||
DA:129,2
 | 
			
		||||
DA:132,2
 | 
			
		||||
DA:133,2
 | 
			
		||||
DA:136,3
 | 
			
		||||
DA:137,0
 | 
			
		||||
DA:138,0
 | 
			
		||||
DA:139,0
 | 
			
		||||
DA:140,0
 | 
			
		||||
DA:143,1
 | 
			
		||||
DA:144,1
 | 
			
		||||
DA:145,1
 | 
			
		||||
LF:67
 | 
			
		||||
LH:53
 | 
			
		||||
BRDA:9,1,0,7
 | 
			
		||||
BRDA:9,1,1,5
 | 
			
		||||
BRDA:18,2,0,7
 | 
			
		||||
BRDA:18,2,1,7
 | 
			
		||||
BRDA:56,3,0,3
 | 
			
		||||
BRDA:56,3,1,5
 | 
			
		||||
BRDA:57,4,0,3
 | 
			
		||||
BRDA:57,4,1,2
 | 
			
		||||
BRDA:74,5,0,4
 | 
			
		||||
BRDA:74,5,1,1
 | 
			
		||||
BRDA:75,6,0,0
 | 
			
		||||
BRDA:75,6,1,1
 | 
			
		||||
BRDA:81,7,0,4
 | 
			
		||||
BRDA:81,7,1,1
 | 
			
		||||
BRDA:82,8,0,0
 | 
			
		||||
BRDA:82,8,1,1
 | 
			
		||||
BRDA:93,9,0,2
 | 
			
		||||
BRDA:93,9,1,0
 | 
			
		||||
BRDA:97,10,0,2
 | 
			
		||||
BRDA:97,10,1,0
 | 
			
		||||
BRDA:101,11,0,13
 | 
			
		||||
BRDA:101,11,1,12
 | 
			
		||||
BRDA:102,12,0,5
 | 
			
		||||
BRDA:102,12,1,8
 | 
			
		||||
BRDA:103,13,0,0
 | 
			
		||||
BRDA:103,13,1,8
 | 
			
		||||
BRDA:104,14,0,0
 | 
			
		||||
BRDA:104,14,1,0
 | 
			
		||||
BRDA:112,15,0,0
 | 
			
		||||
BRDA:112,15,1,8
 | 
			
		||||
BRDA:112,16,0,8
 | 
			
		||||
BRDA:112,16,1,0
 | 
			
		||||
BRDA:112,16,2,0
 | 
			
		||||
BRDA:125,17,0,2
 | 
			
		||||
BRDA:125,17,1,0
 | 
			
		||||
BRDA:126,18,0,0
 | 
			
		||||
BRDA:126,18,1,2
 | 
			
		||||
BRDA:126,19,0,2
 | 
			
		||||
BRDA:126,19,1,1
 | 
			
		||||
BRDA:132,20,0,0
 | 
			
		||||
BRDA:132,20,1,2
 | 
			
		||||
BRDA:139,21,0,0
 | 
			
		||||
BRDA:139,21,1,0
 | 
			
		||||
BRDA:139,22,0,0
 | 
			
		||||
BRDA:139,22,1,0
 | 
			
		||||
BRDA:140,23,0,0
 | 
			
		||||
BRDA:140,23,1,0
 | 
			
		||||
BRDA:140,24,0,0
 | 
			
		||||
BRDA:140,24,1,0
 | 
			
		||||
BRF:49
 | 
			
		||||
BRH:28
 | 
			
		||||
end_of_record
 | 
			
		||||
							
								
								
									
										145
									
								
								node_modules/inquirer/node_modules/mute-stream/mute.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								node_modules/inquirer/node_modules/mute-stream/mute.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,145 @@
 | 
			
		|||
var Stream = require('stream')
 | 
			
		||||
 | 
			
		||||
module.exports = MuteStream
 | 
			
		||||
 | 
			
		||||
// var out = new MuteStream(process.stdout)
 | 
			
		||||
// argument auto-pipes
 | 
			
		||||
function MuteStream (opts) {
 | 
			
		||||
  Stream.apply(this)
 | 
			
		||||
  opts = opts || {}
 | 
			
		||||
  this.writable = this.readable = true
 | 
			
		||||
  this.muted = false
 | 
			
		||||
  this.on('pipe', this._onpipe)
 | 
			
		||||
  this.replace = opts.replace
 | 
			
		||||
 | 
			
		||||
  // For readline-type situations
 | 
			
		||||
  // This much at the start of a line being redrawn after a ctrl char
 | 
			
		||||
  // is seen (such as backspace) won't be redrawn as the replacement
 | 
			
		||||
  this._prompt = opts.prompt || null
 | 
			
		||||
  this._hadControl = false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MuteStream.prototype = Object.create(Stream.prototype)
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(MuteStream.prototype, 'constructor', {
 | 
			
		||||
  value: MuteStream,
 | 
			
		||||
  enumerable: false
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
MuteStream.prototype.mute = function () {
 | 
			
		||||
  this.muted = true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MuteStream.prototype.unmute = function () {
 | 
			
		||||
  this.muted = false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(MuteStream.prototype, '_onpipe', {
 | 
			
		||||
  value: onPipe,
 | 
			
		||||
  enumerable: false,
 | 
			
		||||
  writable: true,
 | 
			
		||||
  configurable: true
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
function onPipe (src) {
 | 
			
		||||
  this._src = src
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(MuteStream.prototype, 'isTTY', {
 | 
			
		||||
  get: getIsTTY,
 | 
			
		||||
  set: setIsTTY,
 | 
			
		||||
  enumerable: true,
 | 
			
		||||
  configurable: true
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
function getIsTTY () {
 | 
			
		||||
  return( (this._dest) ? this._dest.isTTY
 | 
			
		||||
        : (this._src) ? this._src.isTTY
 | 
			
		||||
        : false
 | 
			
		||||
        )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// basically just get replace the getter/setter with a regular value
 | 
			
		||||
function setIsTTY (isTTY) {
 | 
			
		||||
  Object.defineProperty(this, 'isTTY', {
 | 
			
		||||
    value: isTTY,
 | 
			
		||||
    enumerable: true,
 | 
			
		||||
    writable: true,
 | 
			
		||||
    configurable: true
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(MuteStream.prototype, 'rows', {
 | 
			
		||||
  get: function () {
 | 
			
		||||
    return( this._dest ? this._dest.rows
 | 
			
		||||
          : this._src ? this._src.rows
 | 
			
		||||
          : undefined )
 | 
			
		||||
  }, enumerable: true, configurable: true })
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(MuteStream.prototype, 'columns', {
 | 
			
		||||
  get: function () {
 | 
			
		||||
    return( this._dest ? this._dest.columns
 | 
			
		||||
          : this._src ? this._src.columns
 | 
			
		||||
          : undefined )
 | 
			
		||||
  }, enumerable: true, configurable: true })
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MuteStream.prototype.pipe = function (dest, options) {
 | 
			
		||||
  this._dest = dest
 | 
			
		||||
  return Stream.prototype.pipe.call(this, dest, options)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MuteStream.prototype.pause = function () {
 | 
			
		||||
  if (this._src) return this._src.pause()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MuteStream.prototype.resume = function () {
 | 
			
		||||
  if (this._src) return this._src.resume()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MuteStream.prototype.write = function (c) {
 | 
			
		||||
  if (this.muted) {
 | 
			
		||||
    if (!this.replace) return true
 | 
			
		||||
    if (c.match(/^\u001b/)) {
 | 
			
		||||
      if(c.indexOf(this._prompt) === 0) {
 | 
			
		||||
        c = c.substr(this._prompt.length);
 | 
			
		||||
        c = c.replace(/./g, this.replace);
 | 
			
		||||
        c = this._prompt + c;
 | 
			
		||||
      }
 | 
			
		||||
      this._hadControl = true
 | 
			
		||||
      return this.emit('data', c)
 | 
			
		||||
    } else {
 | 
			
		||||
      if (this._prompt && this._hadControl &&
 | 
			
		||||
          c.indexOf(this._prompt) === 0) {
 | 
			
		||||
        this._hadControl = false
 | 
			
		||||
        this.emit('data', this._prompt)
 | 
			
		||||
        c = c.substr(this._prompt.length)
 | 
			
		||||
      }
 | 
			
		||||
      c = c.toString().replace(/./g, this.replace)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  this.emit('data', c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MuteStream.prototype.end = function (c) {
 | 
			
		||||
  if (this.muted) {
 | 
			
		||||
    if (c && this.replace) {
 | 
			
		||||
      c = c.toString().replace(/./g, this.replace)
 | 
			
		||||
    } else {
 | 
			
		||||
      c = null
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if (c) this.emit('data', c)
 | 
			
		||||
  this.emit('end')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function proxy (fn) { return function () {
 | 
			
		||||
  var d = this._dest
 | 
			
		||||
  var s = this._src
 | 
			
		||||
  if (d && d[fn]) d[fn].apply(d, arguments)
 | 
			
		||||
  if (s && s[fn]) s[fn].apply(s, arguments)
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
MuteStream.prototype.destroy = proxy('destroy')
 | 
			
		||||
MuteStream.prototype.destroySoon = proxy('destroySoon')
 | 
			
		||||
MuteStream.prototype.close = proxy('close')
 | 
			
		||||
							
								
								
									
										26
									
								
								node_modules/inquirer/node_modules/mute-stream/package.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								node_modules/inquirer/node_modules/mute-stream/package.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
{
 | 
			
		||||
  "name": "mute-stream",
 | 
			
		||||
  "version": "0.0.7",
 | 
			
		||||
  "main": "mute.js",
 | 
			
		||||
  "directories": {
 | 
			
		||||
    "test": "test"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "tap": "^5.4.4"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "tap test/*.js --cov"
 | 
			
		||||
  },
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git://github.com/isaacs/mute-stream"
 | 
			
		||||
  },
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "mute",
 | 
			
		||||
    "stream",
 | 
			
		||||
    "pipe"
 | 
			
		||||
  ],
 | 
			
		||||
  "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
 | 
			
		||||
  "license": "ISC",
 | 
			
		||||
  "description": "Bytes go in, but they don't come out (when muted)."
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										207
									
								
								node_modules/inquirer/node_modules/mute-stream/test/basic.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								node_modules/inquirer/node_modules/mute-stream/test/basic.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,207 @@
 | 
			
		|||
var Stream = require('stream')
 | 
			
		||||
var tap = require('tap')
 | 
			
		||||
var MS = require('../mute.js')
 | 
			
		||||
 | 
			
		||||
// some marker objects
 | 
			
		||||
var END = {}
 | 
			
		||||
var PAUSE = {}
 | 
			
		||||
var RESUME = {}
 | 
			
		||||
 | 
			
		||||
function PassThrough () {
 | 
			
		||||
  Stream.call(this)
 | 
			
		||||
  this.readable = this.writable = true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PassThrough.prototype = Object.create(Stream.prototype, {
 | 
			
		||||
  constructor: {
 | 
			
		||||
    value: PassThrough
 | 
			
		||||
  },
 | 
			
		||||
  write: {
 | 
			
		||||
    value: function (c) {
 | 
			
		||||
      this.emit('data', c)
 | 
			
		||||
      return true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  end: {
 | 
			
		||||
    value: function (c) {
 | 
			
		||||
      if (c) this.write(c)
 | 
			
		||||
      this.emit('end')
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  pause: {
 | 
			
		||||
    value: function () {
 | 
			
		||||
      this.emit('pause')
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  resume: {
 | 
			
		||||
    value: function () {
 | 
			
		||||
      this.emit('resume')
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
tap.test('incoming', function (t) {
 | 
			
		||||
  var ms = new MS
 | 
			
		||||
  var str = new PassThrough
 | 
			
		||||
  str.pipe(ms)
 | 
			
		||||
 | 
			
		||||
  var expect = ['foo', 'boo', END]
 | 
			
		||||
  ms.on('data', function (c) {
 | 
			
		||||
    t.equal(c, expect.shift())
 | 
			
		||||
  })
 | 
			
		||||
  ms.on('end', function () {
 | 
			
		||||
    t.equal(END, expect.shift())
 | 
			
		||||
    t.end()
 | 
			
		||||
  })
 | 
			
		||||
  str.write('foo')
 | 
			
		||||
  ms.mute()
 | 
			
		||||
  str.write('bar')
 | 
			
		||||
  ms.unmute()
 | 
			
		||||
  str.write('boo')
 | 
			
		||||
  ms.mute()
 | 
			
		||||
  str.write('blaz')
 | 
			
		||||
  str.end('grelb')
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
tap.test('outgoing', function (t) {
 | 
			
		||||
  var ms = new MS
 | 
			
		||||
  var str = new PassThrough
 | 
			
		||||
  ms.pipe(str)
 | 
			
		||||
 | 
			
		||||
  var expect = ['foo', 'boo', END]
 | 
			
		||||
  str.on('data', function (c) {
 | 
			
		||||
    t.equal(c, expect.shift())
 | 
			
		||||
  })
 | 
			
		||||
  str.on('end', function () {
 | 
			
		||||
    t.equal(END, expect.shift())
 | 
			
		||||
    t.end()
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  ms.write('foo')
 | 
			
		||||
  ms.mute()
 | 
			
		||||
  ms.write('bar')
 | 
			
		||||
  ms.unmute()
 | 
			
		||||
  ms.write('boo')
 | 
			
		||||
  ms.mute()
 | 
			
		||||
  ms.write('blaz')
 | 
			
		||||
  ms.end('grelb')
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
tap.test('isTTY', function (t) {
 | 
			
		||||
  var str = new PassThrough
 | 
			
		||||
  str.isTTY = true
 | 
			
		||||
  str.columns=80
 | 
			
		||||
  str.rows=24
 | 
			
		||||
 | 
			
		||||
  var ms = new MS
 | 
			
		||||
  t.equal(ms.isTTY, false)
 | 
			
		||||
  t.equal(ms.columns, undefined)
 | 
			
		||||
  t.equal(ms.rows, undefined)
 | 
			
		||||
  ms.pipe(str)
 | 
			
		||||
  t.equal(ms.isTTY, true)
 | 
			
		||||
  t.equal(ms.columns, 80)
 | 
			
		||||
  t.equal(ms.rows, 24)
 | 
			
		||||
  str.isTTY = false
 | 
			
		||||
  t.equal(ms.isTTY, false)
 | 
			
		||||
  t.equal(ms.columns, 80)
 | 
			
		||||
  t.equal(ms.rows, 24)
 | 
			
		||||
  str.isTTY = true
 | 
			
		||||
  t.equal(ms.isTTY, true)
 | 
			
		||||
  t.equal(ms.columns, 80)
 | 
			
		||||
  t.equal(ms.rows, 24)
 | 
			
		||||
  ms.isTTY = false
 | 
			
		||||
  t.equal(ms.isTTY, false)
 | 
			
		||||
  t.equal(ms.columns, 80)
 | 
			
		||||
  t.equal(ms.rows, 24)
 | 
			
		||||
 | 
			
		||||
  ms = new MS
 | 
			
		||||
  t.equal(ms.isTTY, false)
 | 
			
		||||
  str.pipe(ms)
 | 
			
		||||
  t.equal(ms.isTTY, true)
 | 
			
		||||
  str.isTTY = false
 | 
			
		||||
  t.equal(ms.isTTY, false)
 | 
			
		||||
  str.isTTY = true
 | 
			
		||||
  t.equal(ms.isTTY, true)
 | 
			
		||||
  ms.isTTY = false
 | 
			
		||||
  t.equal(ms.isTTY, false)
 | 
			
		||||
 | 
			
		||||
  t.end()
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
tap.test('pause/resume incoming', function (t) {
 | 
			
		||||
  var str = new PassThrough
 | 
			
		||||
  var ms = new MS
 | 
			
		||||
  str.on('pause', function () {
 | 
			
		||||
    t.equal(PAUSE, expect.shift())
 | 
			
		||||
  })
 | 
			
		||||
  str.on('resume', function () {
 | 
			
		||||
    t.equal(RESUME, expect.shift())
 | 
			
		||||
  })
 | 
			
		||||
  var expect = [PAUSE, RESUME, PAUSE, RESUME]
 | 
			
		||||
  str.pipe(ms)
 | 
			
		||||
  ms.pause()
 | 
			
		||||
  ms.resume()
 | 
			
		||||
  ms.pause()
 | 
			
		||||
  ms.resume()
 | 
			
		||||
  t.equal(expect.length, 0, 'saw all events')
 | 
			
		||||
  t.end()
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
tap.test('replace with *', function (t) {
 | 
			
		||||
  var str = new PassThrough
 | 
			
		||||
  var ms = new MS({replace: '*'})
 | 
			
		||||
  str.pipe(ms)
 | 
			
		||||
  var expect = ['foo', '*****', 'bar', '***', 'baz', 'boo', '**', '****']
 | 
			
		||||
 | 
			
		||||
  ms.on('data', function (c) {
 | 
			
		||||
    t.equal(c, expect.shift())
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  str.write('foo')
 | 
			
		||||
  ms.mute()
 | 
			
		||||
  str.write('12345')
 | 
			
		||||
  ms.unmute()
 | 
			
		||||
  str.write('bar')
 | 
			
		||||
  ms.mute()
 | 
			
		||||
  str.write('baz')
 | 
			
		||||
  ms.unmute()
 | 
			
		||||
  str.write('baz')
 | 
			
		||||
  str.write('boo')
 | 
			
		||||
  ms.mute()
 | 
			
		||||
  str.write('xy')
 | 
			
		||||
  str.write('xyzΩ')
 | 
			
		||||
 | 
			
		||||
  t.equal(expect.length, 0)
 | 
			
		||||
  t.end()
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
tap.test('replace with ~YARG~', function (t) {
 | 
			
		||||
  var str = new PassThrough
 | 
			
		||||
  var ms = new MS({replace: '~YARG~'})
 | 
			
		||||
  str.pipe(ms)
 | 
			
		||||
  var expect = ['foo', '~YARG~~YARG~~YARG~~YARG~~YARG~', 'bar',
 | 
			
		||||
                '~YARG~~YARG~~YARG~', 'baz', 'boo', '~YARG~~YARG~',
 | 
			
		||||
                '~YARG~~YARG~~YARG~~YARG~']
 | 
			
		||||
 | 
			
		||||
  ms.on('data', function (c) {
 | 
			
		||||
    t.equal(c, expect.shift())
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  // also throw some unicode in there, just for good measure.
 | 
			
		||||
  str.write('foo')
 | 
			
		||||
  ms.mute()
 | 
			
		||||
  str.write('ΩΩ')
 | 
			
		||||
  ms.unmute()
 | 
			
		||||
  str.write('bar')
 | 
			
		||||
  ms.mute()
 | 
			
		||||
  str.write('Ω')
 | 
			
		||||
  ms.unmute()
 | 
			
		||||
  str.write('baz')
 | 
			
		||||
  str.write('boo')
 | 
			
		||||
  ms.mute()
 | 
			
		||||
  str.write('Ω')
 | 
			
		||||
  str.write('ΩΩ')
 | 
			
		||||
 | 
			
		||||
  t.equal(expect.length, 0)
 | 
			
		||||
  t.end()
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										15
									
								
								node_modules/inquirer/node_modules/strip-ansi/index.d.ts
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								node_modules/inquirer/node_modules/strip-ansi/index.d.ts
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
/**
 | 
			
		||||
Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string.
 | 
			
		||||
 | 
			
		||||
@example
 | 
			
		||||
```
 | 
			
		||||
import stripAnsi from 'strip-ansi';
 | 
			
		||||
 | 
			
		||||
stripAnsi('\u001B[4mUnicorn\u001B[0m');
 | 
			
		||||
//=> 'Unicorn'
 | 
			
		||||
 | 
			
		||||
stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007');
 | 
			
		||||
//=> 'Click'
 | 
			
		||||
```
 | 
			
		||||
*/
 | 
			
		||||
export default function stripAnsi(string: string): string;
 | 
			
		||||
							
								
								
									
										7
									
								
								node_modules/inquirer/node_modules/strip-ansi/index.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								node_modules/inquirer/node_modules/strip-ansi/index.js
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
const ansiRegex = require('ansi-regex');
 | 
			
		||||
 | 
			
		||||
const stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
 | 
			
		||||
 | 
			
		||||
module.exports = stripAnsi;
 | 
			
		||||
module.exports.default = stripAnsi;
 | 
			
		||||
							
								
								
									
										9
									
								
								node_modules/inquirer/node_modules/strip-ansi/license
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								node_modules/inquirer/node_modules/strip-ansi/license
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
MIT License
 | 
			
		||||
 | 
			
		||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										54
									
								
								node_modules/inquirer/node_modules/strip-ansi/package.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								node_modules/inquirer/node_modules/strip-ansi/package.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,54 @@
 | 
			
		|||
{
 | 
			
		||||
	"name": "strip-ansi",
 | 
			
		||||
	"version": "5.2.0",
 | 
			
		||||
	"description": "Strip ANSI escape codes from a string",
 | 
			
		||||
	"license": "MIT",
 | 
			
		||||
	"repository": "chalk/strip-ansi",
 | 
			
		||||
	"author": {
 | 
			
		||||
		"name": "Sindre Sorhus",
 | 
			
		||||
		"email": "sindresorhus@gmail.com",
 | 
			
		||||
		"url": "sindresorhus.com"
 | 
			
		||||
	},
 | 
			
		||||
	"engines": {
 | 
			
		||||
		"node": ">=6"
 | 
			
		||||
	},
 | 
			
		||||
	"scripts": {
 | 
			
		||||
		"test": "xo && ava && tsd-check"
 | 
			
		||||
	},
 | 
			
		||||
	"files": [
 | 
			
		||||
		"index.js",
 | 
			
		||||
		"index.d.ts"
 | 
			
		||||
	],
 | 
			
		||||
	"keywords": [
 | 
			
		||||
		"strip",
 | 
			
		||||
		"trim",
 | 
			
		||||
		"remove",
 | 
			
		||||
		"ansi",
 | 
			
		||||
		"styles",
 | 
			
		||||
		"color",
 | 
			
		||||
		"colour",
 | 
			
		||||
		"colors",
 | 
			
		||||
		"terminal",
 | 
			
		||||
		"console",
 | 
			
		||||
		"string",
 | 
			
		||||
		"tty",
 | 
			
		||||
		"escape",
 | 
			
		||||
		"formatting",
 | 
			
		||||
		"rgb",
 | 
			
		||||
		"256",
 | 
			
		||||
		"shell",
 | 
			
		||||
		"xterm",
 | 
			
		||||
		"log",
 | 
			
		||||
		"logging",
 | 
			
		||||
		"command-line",
 | 
			
		||||
		"text"
 | 
			
		||||
	],
 | 
			
		||||
	"dependencies": {
 | 
			
		||||
		"ansi-regex": "^4.1.0"
 | 
			
		||||
	},
 | 
			
		||||
	"devDependencies": {
 | 
			
		||||
		"ava": "^1.3.1",
 | 
			
		||||
		"tsd-check": "^0.5.0",
 | 
			
		||||
		"xo": "^0.24.0"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										61
									
								
								node_modules/inquirer/node_modules/strip-ansi/readme.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								node_modules/inquirer/node_modules/strip-ansi/readme.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,61 @@
 | 
			
		|||
# strip-ansi [](https://travis-ci.org/chalk/strip-ansi)
 | 
			
		||||
 | 
			
		||||
> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
<div align="center">
 | 
			
		||||
	<b>
 | 
			
		||||
		<a href="https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=readme">Get professional support for 'strip-ansi' with a Tidelift subscription</a>
 | 
			
		||||
	</b>
 | 
			
		||||
	<br>
 | 
			
		||||
	<sub>
 | 
			
		||||
		Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
 | 
			
		||||
	</sub>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## Install
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ npm install strip-ansi
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const stripAnsi = require('strip-ansi');
 | 
			
		||||
 | 
			
		||||
stripAnsi('\u001B[4mUnicorn\u001B[0m');
 | 
			
		||||
//=> 'Unicorn'
 | 
			
		||||
 | 
			
		||||
stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007');
 | 
			
		||||
//=> 'Click'
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Security
 | 
			
		||||
 | 
			
		||||
To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Related
 | 
			
		||||
 | 
			
		||||
- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module
 | 
			
		||||
- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module
 | 
			
		||||
- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes
 | 
			
		||||
- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes
 | 
			
		||||
- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Maintainers
 | 
			
		||||
 | 
			
		||||
- [Sindre Sorhus](https://github.com/sindresorhus)
 | 
			
		||||
- [Josh Junon](https://github.com/qix-)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
MIT
 | 
			
		||||
							
								
								
									
										55
									
								
								node_modules/inquirer/package.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								node_modules/inquirer/package.json
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,55 @@
 | 
			
		|||
{
 | 
			
		||||
  "name": "inquirer",
 | 
			
		||||
  "version": "6.5.2",
 | 
			
		||||
  "description": "A collection of common interactive command line user interfaces.",
 | 
			
		||||
  "author": "Simon Boudrias <admin@simonboudrias.com>",
 | 
			
		||||
  "files": [
 | 
			
		||||
    "lib",
 | 
			
		||||
    "README.md"
 | 
			
		||||
  ],
 | 
			
		||||
  "main": "lib/inquirer.js",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "command",
 | 
			
		||||
    "prompt",
 | 
			
		||||
    "stdin",
 | 
			
		||||
    "cli",
 | 
			
		||||
    "tty",
 | 
			
		||||
    "menu"
 | 
			
		||||
  ],
 | 
			
		||||
  "engines": {
 | 
			
		||||
    "node": ">=6.0.0"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "chai": "^4.2.0",
 | 
			
		||||
    "chalk-pipe": "^2.0.0",
 | 
			
		||||
    "cmdify": "^0.0.4",
 | 
			
		||||
    "mocha": "^5.0.0",
 | 
			
		||||
    "mockery": "^2.1.0",
 | 
			
		||||
    "nyc": "^13.1.0",
 | 
			
		||||
    "sinon": "^7.1.1"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "nyc mocha test/**/* -r ./test/before",
 | 
			
		||||
    "posttest": "nyc report --reporter=text-lcov > ../../coverage/nyc-report.lcov",
 | 
			
		||||
    "prepublishOnly": "cp ../../README.md .",
 | 
			
		||||
    "postpublish": "rm -f README.md"
 | 
			
		||||
  },
 | 
			
		||||
  "repository": "SBoudrias/Inquirer.js",
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "ansi-escapes": "^3.2.0",
 | 
			
		||||
    "chalk": "^2.4.2",
 | 
			
		||||
    "cli-cursor": "^2.1.0",
 | 
			
		||||
    "cli-width": "^2.0.0",
 | 
			
		||||
    "external-editor": "^3.0.3",
 | 
			
		||||
    "figures": "^2.0.0",
 | 
			
		||||
    "lodash": "^4.17.12",
 | 
			
		||||
    "mute-stream": "0.0.7",
 | 
			
		||||
    "run-async": "^2.2.0",
 | 
			
		||||
    "rxjs": "^6.4.0",
 | 
			
		||||
    "string-width": "^2.1.0",
 | 
			
		||||
    "strip-ansi": "^5.1.0",
 | 
			
		||||
    "through": "^2.3.6"
 | 
			
		||||
  },
 | 
			
		||||
  "gitHead": "7d87f666042c67638d2e89bd4586d22f61e90130"
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue