pax_global_header00006660000000000000000000000064131577573650014535gustar00rootroot0000000000000052 comment=dcf31103e8e86efab7fa687b563be21f26807175 Inquirer.js-3.3.0/000077500000000000000000000000001315775736500137515ustar00rootroot00000000000000Inquirer.js-3.3.0/.codeclimate.yml000066400000000000000000000002611315775736500170220ustar00rootroot00000000000000engines: duplication: enabled: true config: languages: - javascript eslint: enabled: true channel: "eslint-2" ratings: paths: - "**.js" exclude_paths: Inquirer.js-3.3.0/.editorconfig000066400000000000000000000002531315775736500164260ustar00rootroot00000000000000root = true [*] indent_style = space indent_size = 2 charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.md] trim_trailing_whitespace = false Inquirer.js-3.3.0/.eslintrc.js000066400000000000000000000005571315775736500162170ustar00rootroot00000000000000module.exports = { 'extends': 'xo-space', 'env': { 'mocha': true }, 'rules': { 'quotes': [ 'error', 'single' ], 'no-multi-assign': 'off', 'capitalized-comments': 'off', 'no-unused-expressions': 'off', 'handle-callback-err': 'off', 'no-eq-null': 'off', 'eqeqeq': [ 'error', 'allow-null' ] } }; Inquirer.js-3.3.0/.gitattributes000066400000000000000000000000141315775736500166370ustar00rootroot00000000000000* text=auto Inquirer.js-3.3.0/.gitignore000066400000000000000000000000341315775736500157360ustar00rootroot00000000000000node_modules coverage .idea Inquirer.js-3.3.0/.travis.yml000066400000000000000000000004221315775736500160600ustar00rootroot00000000000000sudo: false language: node_js node_js: - 4 - 6 - node cache: yarn: true env: global: secure: dHdnulkfL3Es9kaH0JVFwPk5VUeD7fdiMYdNaId09ZTa9mL9BvYcHmeVK5g1ZIm1F0+QmLeJwjO+4dq1yjRz6IFnpbgQSlhIbYjs+8zBc1v+HTZZfB/kFRIqHO0x4nJG8vKVa+Sg5tp0pI7hiCgevsrlvf4Pb6D0Cyx+faSGNrY= Inquirer.js-3.3.0/LICENSE-MIT000066400000000000000000000020411315775736500154020ustar00rootroot00000000000000Copyright (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.Inquirer.js-3.3.0/README.md000066400000000000000000000340051315775736500152320ustar00rootroot00000000000000Inquirer.js =========== [![npm](https://badge.fury.io/js/inquirer.svg)](http://badge.fury.io/js/inquirer) [![tests](https://travis-ci.org/SBoudrias/Inquirer.js.svg?branch=master)](http://travis-ci.org/SBoudrias/Inquirer.js) [![Coverage Status](https://coveralls.io/repos/yeoman/generator/badge.svg)](https://coveralls.io/r/SBoudrias/Inquirer.js) [![dependencies](https://david-dm.org/SBoudrias/Inquirer.js.svg?theme=shields.io)](https://david-dm.org/SBoudrias/Inquirer.js) A collection of common interactive command line user interfaces. ## Table of Contents 1. [Documentation](#documentation) 1. [Installation](#installation) 2. [Examples](#examples) 3. [Methods](#methods) 4. [Objects](#objects) 1. [Questions](#questions) 2. [Answers](#answers) 3. [Separator](#separator) 4. [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 Logo **`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) ### Installation ``` shell npm install inquirer ``` ```javascript var inquirer = require('inquirer'); inquirer.prompt([/* Pass your questions in here */]).then(function (answers) { // Use user feedback for... whatever!! }); ``` ### Examples (Run it and see it) Check out the `examples/` folder for code and interface examples. ``` shell node examples/pizza.js node examples/checkbox.js # etc... ``` ### Methods #### `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 #### Question A question object is a `hash` containing question related values: - **type**: (String) Type of the prompt. Defaults: `input` - Possible values: `input`, `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. - **default**: (String|Number|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 `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. - **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 asynchronous. 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: function () { 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 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) - `rawlist`, `list` : Selected choice value (or name if no value specified) (String) ### Separator 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. ### 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`) ![List prompt](assets/screenshots/list-prompt.png) --- #### Raw List - `{type: 'rawlist'}` Take `type`, `name`, `message`, `choices`[, `default`, `filter`] properties. (Note that default must the choice `index` in the array) ![Raw list prompt](assets/screenshots/rawlist-prompt.png) --- #### 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. ![Expand prompt closed](assets/screenshots/expand-prompt-1.png) ![Expand prompt expanded](assets/screenshots/expand-prompt-2.png) --- #### 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. ![Checkbox prompt](assets/screenshots/checkbox-prompt.png) --- #### Confirm - `{type: 'confirm'}` Take `type`, `name`, `message`[, `default`] properties. `default` is expected to be a boolean if used. ![Confirm prompt](assets/screenshots/confirm-prompt.png) --- #### Input - `{type: 'input'}` Take `type`, `name`, `message`[, `default`, `filter`, `validate`] properties. ![Input prompt](assets/screenshots/input-prompt.png) --- #### Password - `{type: 'password'}` Take `type`, `name`, `message`[, `default`, `filter`, `validate`] properties. ![Password prompt](assets/screenshots/password-prompt.png) --- #### 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. ## 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'); ``` ## Reactive interface Internally, Inquirer uses the [JS reactive extension](https://github.com/Reactive-Extensions/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.onNext({ /* question... */ }); prompts.onNext({ /* question... */ }); // When you're done prompts.onCompleted(); ``` 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) 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) Please refer to the [Github releases section for the changelog](https://github.com/SBoudrias/Inquirer.js/releases) ## Contributing **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 Copyright (c) 2016 Simon Boudrias (twitter: [@vaxilart](https://twitter.com/Vaxilart)) Licensed under the MIT license. ## Plugins ### Prompts ### [__autocomplete__](https://github.com/mokkabonna/inquirer-autocomplete-prompt)
Presents a list of options as the user types, compatible with other packages such as fuzzy (for search)

![autocomplete prompt](https://github.com/mokkabonna/inquirer-autocomplete-prompt/raw/master/inquirer.gif) [__datetime__](https://github.com/DerekTBrown/inquirer-datepicker-prompt)
Customizable date/time selector using both number pad and arrow keys

![Datetime Prompt](https://github.com/DerekTBrown/inquirer-datepicker-prompt/raw/master/example/datetime-prompt.png) [__inquirer-select-line__](https://github.com/adam-golab/inquirer-select-line)
Prompt for selecting index in array where add new element

![inquirer-select-line gif](https://media.giphy.com/media/xUA7b1MxpngddUvdHW/giphy.gif) [__command__](https://github.com/sullof/inquirer-command-prompt)

Simple prompt with command history and dynamic autocomplete [__inquirer-chalk-pipe__](https://github.com/LitoMore/inquirer-chalk-pipe)
Prompt for input chalk-pipe style strings

![inquirer-chalk-pipe](https://github.com/LitoMore/inquirer-chalk-pipe/raw/master/screenshot.gif) Inquirer.js-3.3.0/assets/000077500000000000000000000000001315775736500152535ustar00rootroot00000000000000Inquirer.js-3.3.0/assets/inquirer_large.png000066400000000000000000000147261315775736500210030ustar00rootroot00000000000000PNG  IHDRIDATx^A R&*9 av0 `0 `0 0 `0`0 `0 `0 0 ` `0 `0 `0`0 `0 `0 `0 `0`0 `0 `0 0 ` `0 `0 `0 0 `  `0 `0 `0`0 `0 `0 0 `0`0 `0 `0`0 ` `0 `0 `0`0 `0 `0 `0 `0`0 `0 `0 0 ` `0 `0 `0 0 `  `0 `0 `0`0 `0 `00 ` `0 `0 `0`0 ` `0 `0 ` `0 `0 `00 ` `0 `0 `00 ` `0 `0 `0 ` `0 `0 `00 ` `0 `0 `0mBe;wgsJ 9E{EJCi1D(zc P)PAJ7zE5b@H11ٳzͩWY=ú]30ͬR(J\d)CR].PJ4MPU).E)w 0=>RƣO|U6x*qF[|pw4Y?}/^=DX7ROK*Eqߺg~j:7qLwA\c[ElQ:ܯr.q微)xTb2s"( @ @  Nx7Gmi+~r|Ҧ_x?^]圢'oyfITUƩmStZPʧ2J%b:N)ņ<8jNMSbmo\Jt2`5ǃ{CXx닶^/ht:FM&;wtw4_<_,Q{E;,|FRtsz'GwI6Iw}hg/|n៯o|Wuz/i[R~o|綾 mdTrպ KU|~PAaoWq5۩Jm'GN[@-h꺤\3dj[m/HM[꺬ehƣstVJiK!{QƩs )5AѶ%9z@@ @.ժ.m `ϰDT9w\nf,?bYb[VcyiJt2_;Ms ޵4%U]b[My#_l+@ @ @ 0Rt6H9džtDnFXJ Fq~sy3`_==[Di4J1Kt3 @ @ 6%6RJln*ضі{@@ƽW3G lQ^T9s3Kn -AGUj]RDD!< @ @ 6"*J)EVRUi :RѣĵuQs m R:j>/rt2oUNѓ_St4qi*:)m*G_J)oyp2 VKJqr|i'Z.KІO @ @ Atжq*)E7e`*o}p_t|F'uS Vu{r`~NJDc3H)r}t   @ @ @ @  @@ @6njR^c}du]hy\.ݝk;(s,mRpz@oS@ @  b9[ic}r(яTm)EN)v)6 89m_g6Rۭb=hۘ}MJpv]C:ΖelRԖzu]vB؇Ȑ?͝i>C?1yIwi~'v2JQ>9mcgRu]_̯Vч*Aĝp9?ܯb+vsJani!ػ/CUN(qQbn<|^]KQf[koU72og|a6 W q{v)'f6b.X7qSL+_W.xf|ע~}Ix^BXjYtVd͒UeZ墔7'<;w]G)e@@@@@@@ pcJNJ]ɤ>>CJW.vEuRWJXf|lwmH6~Nd%B6n4mm pwe@@@@@@@ @)QU%r`Y'Pfە eBU}̲a>.1&!@UiUÓiA:f2E,BBBBBBBeRfuqbPYUIɌ:M-E{#{e4C.6wm;mꬖ N'%-3~t}\M3 @ugq\%p.u].^>/mj^YY-[|aWq>&CGmvr׸h̪j(3v"MnbY, /vΦe(';Jት;s!rQ?\UTU\9>޲<.&BxUk|D]/~fmq]!1,%nu,eRJ *u)%NJGem7B4}0뢜Hٽj,@zOB0o/< e㿿.Uac=ع+=uoU]}5X7g٬h]} jی!p>/imaY,dӉm U*"jMf1&!@ٽ7?~礎̡E!Ȍ6 aȌqB27,$v@a߶%g:A.n;S}g&ui<.%N `wO>{#2ddFf!@f] 8B@ o0,e`6-YɌQJl1rlұ\'u]rkLϟoL6cg4#g~p?҅/\WqL]"rܟ܌?`YlgoK IENDB`Inquirer.js-3.3.0/assets/inquirer_readme.png000066400000000000000000000076341315775736500211460ustar00rootroot00000000000000PNG  IHDR?1tRNSnQIDATx^10Z $HEfʗ>{AUq[V`0`0 `0 `0 `0 `0``0 `0 `0 `0 `0 `0 0 `0 `0 `0 `0 `0 `0 {0ڷʮ>>3'r!!r- )BB_T*۾+o T \ Mi)(% zج,K|mlNB:H`2H~D)R `d9AB L1"DVg QX%d `~2D F`vURȈL~Mig'xb aKcnsS뵦C2 ^`IϏ?}L0, 41$$.#D<\}ٱEd>wW|5hDiҫ^6|J D.tS׫bϾ`#QkLzuJI䚗M{M&{a"5@#@q9%N%+zG߇,&M ;,ߛk*$ f{2|۳34Q)|]'00K_|:VoF=}N!JAb$l6Ye;tn R;=ːRGW0lW Goo{+MgJnAQvfctbXui`\` GV z>Oدİ:4/֋-7wN듕a(ssWܹƖN}%o"w|j6 f >ߏϪ=_{ӓ'L8\_7"a+G3fSݏӬis r 6~gTz{qj?S"stϝ~?O%4ѳ/z(羯iWN;`>v">EG?yg5)#@c2 iyQ9'7IHmole,!2ce9νJx}'t";NS66r{' QT75` 2Y+iJD_ttHx@MZ8V2I&ص{ D쮉/5 &Y8X, Tj8i>w0Z V:z6OäSEH#Y_KPqn=GOi߫V$[߸Uk핷qL\imЃh8pϝ?ue4 b>`?xx_u>E!l1- kum$6Gש aOX]Bhq0zK-'N FBqxD $dim aD?"X9?3tEl,aL }R+}xY4AH*$&P6}u2(]@ Q H{>ϝY |A)'KL&ԫB"Kh{dz6WV @"p#@I*`H4@BpA2DA-+H{w]&+9Y^" ዏm}9R <5rSo$򹫠"i46cm7u>q4Q:c۟zH!C]`dVo:NR_h"X"KYUGlll̽e!#TsDiBteXa4b@c3T0{žHLNiMzMP_6/Zg"i4a$W&T$! {HM!@(i4iO{ ɗcku|YǬ#~^}MݹPm@5kħ71K ;饉~|8sM"\Brh>z{Rd(^ n5PWCHI&Ym46&Ltl3)loꊆqԴSM?_[l{婆7s'z#{2&ΥqnAM4g3uHBBB¹yd-8ZGPca0 W!!PI&h$JPV51!V%@ccc_3 #,ıhb·V}RZݯv xkXMᷯ>igh@jkA0̽mۙHJh4l0`~uM@ @Ӵ4-i4M iZWA AH&qL;v1؞ejp5`NX-i̵`Ƽ 7 K`Fz]K~h꒨wN{,% RK'F$XZGĂH&8q++ _&ÀmB+0VEbmľ$tE]D2}v;OkٿuE lb>S%$BXLoTc>ks'G9FbiIϿP?M2 @$UM7vyͤ8׷g  %^ s#?{v~" .EQ{o旿i;޼o_tq(Q>}/N"picP [ogc?":E)Qg$"$?iB@DQEX`K.>.S &M)Bh![&B]W'sD Ib)e]l0f}B(X,n\dN"e[lk+nc$)$HS:rcgw,|t_nSK@JÝq%3L&t!LNh+Sϔ]@8|NV9%Ȏo_"Q@jo/W=v-gEw@KӛofX$Y'Ȫtw H 02pqZ"w,9@m&׾ÈQ?H^?z}- Sg.B( v촘WIĔ(:)fEQgKf:\dDJ4".njP \ΣR$ac-BXQws9CAb4,[ QM}|tJfr[8" EKS$\h+v-NHFH QxlDFiϜJ-aƲrK {/n,!n lFI  UM"u7 F,H0Épھ(gƸjTt GU. !g v, +'EB*n1WQOt1ָra5E ;{~i']6Kslٙ);Wzl`Ok'6S(HOwy}''#"UϪ*T @s7"4p_%r4 $ ՠ+! IF{qZ HXa@wiF9+ hU L'` /2鶙~úߣnۇ;֟K7c]o31ʌ fFr0.[v(a"gƗILj"z" `з ]\0Ǩ弻7]`G".VXp)gd;fJ W͘3:c}uaxX7R ?]Ե;:kcg:F*=@ޮr`  3&g%bD!D!D!D!D!D!D!D!D!RxIp h0_@UiTq `DY[A[;5@PqHLjg$RpL#_K8" @U@wX>`&5ydp@@ijE$,]df ¨͈-Tc"wzӣD$q$ߵA9\ֈ|eP>뭏'>~*O~<jǝ.] +rE;8i ayF_?(zZSK {Cǯ\&.XQVAP@CGFHi6Ozչ rH ۽5"Ȏ 2Ål鱂6? ti$1L͒]4@0575>J3+_^=_dKĹuY8;7\i+@"4[$WMr% acyWo" K@@@@@@@@@#PVIENDB`Inquirer.js-3.3.0/assets/screenshots/000077500000000000000000000000001315775736500176135ustar00rootroot00000000000000Inquirer.js-3.3.0/assets/screenshots/checkbox-prompt.png000066400000000000000000000410771315775736500234370ustar00rootroot00000000000000PNG  IHDRw&y iCCPICC ProfileHǭwXS$PzGzދt@B !DĆ.*TD@VE" ʺX&}77s̙3gΝ;h,0U C#f'0IK;[ ߊ" fg@>r HJxdetn rFM  %J:\v C@pS!y,8/vRf҄M+eG"-2la:k>tZR"CfEBV xGɛ9AQAFq8- /i!}'TU4= d}vO¨M!;AeFs#<`A.fk>ɼs£jO[ 4Y1ƟJEri$F}xq0]X,J$Ar2W=f+|CFcU"I@;2\[6鰊=gN-Bބϸ|G|;V wkhj8bL=}.u\o.PØ~D_b џhĎbX+֌5&vkڰaXTD@,}WcR)DH`bYÚ-¾5GF`aq,p;q/~{(qXk̕% <ˑltL|?%ל$`[3mm2g*¸]ub(L.cpezooʓl(wTK yɡ6OA`.d@l`;h,p <]=FP:h#b8!D H"1R,CJRى "'H+҉C~ P j BC(t6frt ZVz,zv/! `r,0' dL-Š2;5xO8L~@<gY"|5^ Ŀ D#e= %' xb*qq5q+xI!H$5ɍFbrHE-Ӥ^G9mLL~S2e *ȺȆrdˮ-${MWvH6"ȩr!C[999]9gr|%rr.u}(QL)>Y1e e/ -J5zR959cGfI qhizu+yYyy/9eG(**()T*P0HWV SP\_UOdQZKR}l2nz2QH9H9UDr򠊒JJJI.0d1kG'iNĝjҡI'}PU-VSY槖^A:n>C}6 'NfO.|d} TT#Bc.6!M-MsZ -OTZ|ڧ_0U^tf90l03R5 275zhL5026iB4q2I3jaڛL+Mff|fsgsy EEE%2Բв) SO4囕UnJօMolLm667mmm_ۙqݵO_abApȡQ1ѱ񎓲SjgoΟ\\r\jߵoTS{tXn;ݺܙ;ܻg_7طO/گﱿ`}3w4A5A χPB"C*BBӂmpt0!QQxVo33gTxaQq)97r(卑Q-11bjb>ƖvM[w5^=ߘ@JIؓ04o榙gͺ=hv9s眜+?5h"!16qV5T4aofxr6rnRd )<^oïN Lݞ!-,moHzlz]LFb Mp>S+3/Sh&,vedmd#ٳs%Ml,Iܝ[q^̼yyW|{AKN҂^ w.B%-jYx%K-%/M[{Uaie˚k._秀jhE;+\Wl_l_ej˪oŜ+%V%e%_VW_G$i_v::=+U,/0mCF6ZfW}3yxsWyhy-|UܪҨZUa+gmm^;vWV"lwK8RG}Oɞ{{E;_XS_cZV\`ցYYǨ+9 5GBu:zH^CWc|c-MMmoNsIkOO-?5r:ᙁ)g{Z<8w/\|K^N_vzӕWێnvk;;:vq oݼzkѷޙu.n߽{~!a#Ge5W_u]]'}۞D>yy4Ϩʞk?kx1EKၢ?ze؟ y۽޵ =~~CG>9}9y_H_ʿ|mHȈ%bIhr2o¼%: Fs#iAF9)IZ @Be))Gyvd[Q[>W֑0p&k4'"I}su`c_bKGD pHYs%%IR$tIME "F} IDATxwxי9Ou!BB4 bn .zy㴵nxn~$IvNٸ`\`z,]B !@>y1B#s]⺐Μgf>䍗( BS@P(n< 2␝z!$gjvv= @Hm{ tIlݠ%m\KcIr8v te_(P%cOvJ't__e/1a 8hPұcDcR3[xꇿ߼U'66[M`xN_p=-!Nc݄{ io²#fqƽ68WGvWf]+շPz8ˉyLkZ $LisX9#1niiyJ|\eάYJ3>)}q! fZ\ҙՋ kvH[Z8|˱w)&Fz%sU3;GZ6B8*ZOUDq_,"=_! 2%FH%8z(Gۿζ4}V[=um\mqN04p]K虇 ϮXc{#%ھ?k~,h:V,>49+Bww.yKȯ<2S ۶C p^(;p7usڒM)D4BEHmԜ:Iu ZyuE\Ei{I#=A1fi7hkA}Em0tYޒН϶HJERNKKsMa$%2$=u65QVuuӟK\BOq9TBqce h3%G"E&'[Hwl/<0dd>`"@iaYў[=/x7Jh$JfHzoD\<)ǥ0jh.ؚ*CQ-)1)3np*c 4"=0c"<)4)ZE0op6 U/nMljuzQJC<|4![x]^|~MisiB`U= ه0"3GF  OԷIɳoaѤ>7jVOw}p<7L֬Ƅ瑞;|96GD)Y|qH7w7Se <1nwUY=t<i#p8z&cz$hOGJ$!ymkyCQ9K>Ĉ g*=豩,^0i- ;eu$8Pk 2s$^H~(.o߂)2ӳWvo0Xa\-Ye 2W"LGO۟[GuAA퓇a9ns I8o40$PݚHILq=<$1րfO))_a4)x?ŵϝ:ď|},4>Osp^[l/Y0 Y+o;2kH*wF?NLGĉ , c9s|?y w͌͟у؝Bt<=dfȑ XkPJRF{k&l9/z:g#B`xcfp4~MmAё p;#u$h;a@EOPRYarǎ&&>l4I?Cu X4gE;mwuo4ALz|%9y07AMK+ynetIM~Fٓ1}hfզP|-,b?aGmuٵ}'k"6)–:{%g[%i}mFEMLBGƫO-K^(]tlo[?m72a)<%]t1_ف:|qSU $ Ӄ[f0!Mez,A½ڶ-yp5k̘X` ZOk{Ԯݍf|&6qps|E̝v1n- } >[FMS1}\4kr[5/@cY%OI-HѦ]Ե3?7e>vҸk^jdvR #/_bܴC邳߿w2>-[aHn_xjq)=wRxfG\ M'37y`U`cqyG$!.Oo]xgo~v2rO'xg 4Lɜ!Mר8U%m3ih +߻Dt]2n >5}8n~tu9gi|pDtBmȀ]>l5)h<+L ݜIpy05Ac9S:7ul:E7H?&69IxMj{BUCra jN[ߐ+\Ģ#,UG\LbOQDl]=ftѶk\yP4;|6$ mdDv&- g)n$khxto6폼' +3ĘtOPc&#|=*Ce_9`XNުyBشi=%^[獫x'LaDk;$5~TTn/ 8X^ 3L3M͍knl;}9Q`DџnTϾ֗t?)5B0!ˊܟ}\lw\,~N GiC\Vlɞ% 53o+ UV\e]*Μ]Vݓ&蕖IvӤx&h=10g0ò^SQ\E4&ߣh]u$}rYx iljh'tJgzPnn;׃b}iۭX!}xm/pU6K|EnZ/Fum-GQ\ըM*ϋ( E+M_._ u  BBP(+>XXpUrF{cG"uBh8{=G*/staJaڕ\Baԩ=LӇu/SR@GZ6BT_P@-ҶWBrˠ߀̞:Gx *9gu. Be_ 0 b2i_B384StJښuH(rHܵ0tI] ftn""  ?'\+W\L --P(n@[F"4?pAwniCs2r2_0D 4 ﰬhk4~Kw -\иiD1>{ Gc;=yX|O"i3np*)%ظz+> <ģ7xhC/P=j'%ඊ檗XF} e_;{ 9{:/sKVIt-uT[id[ǡYßW)1f֭L-8E8>N "Ž5gḷXa &q4T卵@HlǍC'?Ƶc{#^f{S鋫~PUv ihu}&eV`5zc!v}5h08+)ݹU# Buܙ$%8Ѻ14^ZEskmvb_*P(q$B6|v-bB&MPz`?-Gy]Ѿ5Nsp LaWȎ'J k򌋈ݖ))#|>^Pͅi: Z^i$L^`5|g4/xm;BoE yf־5!!tN/:t(!:% GsT=/#I@7"??t$)@-뉋zѵS(74@#5L:Z঑iM\@#>͙AQ]z?SRYarǎ&nR$  UP(>Ɩ;t"W䥷KfqӢ۲Wbә1i05W5`j=r4<c_URX8ovshlw`Jf R"J ֛gX.'blՃ, boɉn2TJ7us.5BT'&ʪN㙾+BP|]a$m[L+x~J&2&'7tx tHGxO%{CFN &$&ؾo&vK#ے;Ѓn9sF̘ 5^w.rL4?27eey{̤#?"f><ѳ `ݮ31Bv{G8=N} Sz:ĜlLlF%{l-=zG>%G#9!tOClǁC9p.]P|2N39;.lA݃wx-܌l?Msj FJߏ_pyV̛|鶉L>BD7v OqIC33;uMר8U%m3^WP(zʵ[mO ߄&/kbW0 &5-A)H u58Z<#ku##MKGS4֞k;XQs]Y$ĠPU~KvS/* M[5,.^. \5ynɹ J 6kCM3A #GPӢ]P(n,qW( wBP(qW( wBP~bIrcc;n.ԘBycG"uBh8{=G*aJaڕ|#O߄eG04yOϱ*P(qpfNJ4}!q]<25&l&hqliiR,ǦWhP|2ve2qDb4^x9VnñZRz؅Ƒ޳]<cZAv*e2f&qxUMJO"ׯ]@:b_I `dZ¶1=Sf}68n$ 9Yd邌Ϙ٤mˢO|-u< ysɠĖIDAT2r2_0D 4 ﰬ腒xңO`|J$@Cpf6ݠ'\ylT"ƽ5eOh&(h< //.NwΞο|ܒ?"qω$F:- o]ReYt[U@cK"F֮LiM3=ۚd[ǡYßW)1f֭LK?=x3>5ذDZi񼶅.x:XDؑpt'y( e_JΥwdúX3bƔJ^ޓ =-p5;otvo.El`; 7>9}/ٗnpь0]:丘x:6KLvuּ*ʛ|Ω>ʝ`{|z|lv{N.HJ3j`b-`Ɛv?u/.ڒ|vPƻBR$%ٵ{'ZFiBmn<<9Fq-70tst;6|W%=ߐs/UME `d[s[3ykF 1 Qmdy)_ZtM/"dABU)!:ͣmwF7Q(_D&B0NC,_QȤ98= J(kءC7W$9Yg4/X:52u|s=CܬT1]vGvURjڅ,B m< " Eih`{k9"o sqE0<7<<):b;^7xݜAx4>~a< ͵;P5GI׺8f7L;oB,@gfG=>s ܂cќ 8eyP(r9c;]Sx^$~#_\$c$44ְq_Eϖ6䥷KfqӢ۲WelD\Xr3B@cC3̘X` 00]Q$dج!E=uP(q$Fv^[%ՑmfXhu^0HNw#/>34`xHUy@O6ljb~et@{Nሯgvimrajs;]y KәS #  o.&\("gpG3:Dۮ=MǠ~ͮ)y( e_ uﱾh#IyԆ$=|p'[u5[n׽,lzKǵ(.8uxbOJP(LȲ0/U]zfl4P(J/%˼`tk%ѶS(65 \5CK#8|E.v Bao~-| Bv B]P(J Bek) %W74YF)p]Jef1O NXO>5~Յ]) 2nxg0淛^ `I1`%'\ \@ɺBPGa?CF磵s EJT +=pH՞/.S vd.-;ȥwl38f[?dQշkXύ\CzAΤw C|b cg3:?qy.~%#-58:^Q(>I\[uv=JEx ;|/&9lbҬ] liCr/ G\H{,%xl/u`DT?9}([ؾu1ه0"3GFV<  O.&!фl9ӿ}:'.1c(O}nYvҹ{0\E^aH-fT\ RJtq V?u)˵soYf o*F8?~fCQ(~1t6&^K&&:ϲy!* 6 &l!?*!}XIG0PPɓa¶})%-0ak3Nxꪏ|[y;PHYE5N@ZT[:a7vfJkqdNnXa &q4T卵@Hlu /'ămd7$oORel=1Cޣ=O"%?Ρ(.Ò2_Xթnp_?ϻ{|tA4i:~4-X\|ebx^gϱJv/_݈.m̛ݨ \_mB_`k )UbB:VRq9-%5k&w>mꞗD#zڏ9Lͨa}Of_ Kh§Kμ') !VȈKVLd"$N2A<5Rj`Bs4Ǖٹ߶ TђgQBrc! Y_R.+J{[0kKN \.,sHʋa H.E⋢Xpx!~cCLr*uj7\cF^ϓ$ott&IBZ"vh&d*]P~%{r&ӖNu*^|(9tRtZTO߻w$$sY=ӆ"e;iɑ~?++xeJ[Y.]rRSaj C;v47|~0MppPQSa #WnfK?3q)Ҳ:6>&tՕ6_:1z-947ڍqI e45 'Eعdj>y'3:3Ǿp/C p\Mc-xu;Bu/CMaѽ77kbf c4 LiuD+6gW0i4,7|nϿN8QQɤ̙:PkTêE\"mtxb~r>-[aHn_x>0|[x+S8*yɃ̟lc[oBf5(a[ nLU%cXV:-g)=)m9` 'L%1&݀X ;\[FP406WOk\bKMNJ,q1y;W^(G zd~Y)7B"!.^. \5ynɹ Jp 6 CM3+ZP(Wkfa@MvB]P(J B]P(J BBP(nĞѣo7rױ9[UΡAUмBP\:̜2! n_gFP(_;x7pB3nDd;P(>\>wv{]ބHMPˢO|5g.cx{g-o. ԭg3#I}ro>dge-R1sd-^z,}A|A6:f蟞ɘޭyKbDF3uT/´c_䝲:bq^ۈ |GPUP(H!0/{nhW,v"l!)hyxRtpv: &7%OqIR-hw(L# m70ˊ.H'w\hb<q/]Io2~qhuT-f#2ƒ9 0u4mdWvAtǐ~YdxM4<c_URX8ovυ0W{t>|iӸsdrғh:wZV Wc9Cp_m$<ۦt5gn!.79)hN{e=i` ō #6>E nb ʋ?m6$U̷BP\~Ǧw\,gaBP|\{u5LΆm% BqCBP(+ BBP(+ ōEUH$IENDB`Inquirer.js-3.3.0/assets/screenshots/confirm-prompt.png000066400000000000000000000206271315775736500233040ustar00rootroot00000000000000PNG  IHDRw} iCCPICC ProfileHǭwXS$PzGzދt@B !DĆ.*TD@VE" ʺX&}77s̙3gΝ;h,0U C#f'0IK;[ ߊ" fg@>r HJxdetn rFM  %J:\v C@pS!y,8/vRf҄M+eG"-2la:k>tZR"CfEBV xGɛ9AQAFq8- /i!}'TU4= d}vO¨M!;AeFs#<`A.fk>ɼs£jO[ 4Y1ƟJEri$F}xq0]X,J$Ar2W=f+|CFcU"I@;2\[6鰊=gN-Bބϸ|G|;V wkhj8bL=}.u\o.PØ~D_b џhĎbX+֌5&vkڰaXTD@,}WcR)DH`bYÚ-¾5GF`aq,p;q/~{(qXk̕% <ˑltL|?%ל$`[3mm2g*¸]ub(L.cpezooʓl(wTK yɡ6OA`.d@l`;h,p <]=FP:h#b8!D H"1R,CJRى "'H+҉C~ P j BC(t6frt ZVz,zv/! `r,0' dL-Š2;5xO8L~@<gY"|5^ Ŀ D#e= %' xb*qq5q+xI!H$5ɍFbrHE-Ӥ^G9mLL~S2e *ȺȆrdˮ-${MWvH6"ȩr!C[999]9gr|%rr.u}(QL)>Y1e e/ -J5zR959cGfI qhizu+yYyy/9eG(**()T*P0HWV SP\_UOdQZKR}l2nz2QH9H9UDr򠊒JJJI.0d1kG'iNĝjҡI'}PU-VSY槖^A:n>C}6 'NfO.|d} TT#Bc.6!M-MsZ -OTZ|ڧ_0U^tf90l03R5 275zhL5026iB4q2I3jaڛL+Mff|fsgsy EEE%2Բв) SO4囕UnJօMolLm667mmm_ۙqݵO_abApȡQ1ѱ񎓲SjgoΟ\\r\jߵoTS{tXn;ݺܙ;ܻg_7طO/گﱿ`}3w4A5A χPB"C*BBӂmpt0!QQxVo33gTxaQq)97r(卑Q-11bjb>ƖvM[w5^=ߘ@JIؓ04o榙gͺ=hv9s眜+?5h"!16qV5T4aofxr6rnRd )<^oïN Lݞ!-,moHzlz]LFb Mp>S+3/Sh&,vedmd#ٳs%Ml,Iܝ[q^̼yyW|{AKN҂^ w.B%-jYx%K-%/M[{Uaie˚k._秀jhE;+\Wl_l_ej˪oŜ+%V%e%_VW_G$i_v::=+U,/0mCF6ZfW}3yxsWyhy-|UܪҨZUa+gmm^;vWV"lwK8RG}Oɞ{{E;_XS_cZV\`ցYYǨ+9 5GBu:zH^CWc|c-MMmoNsIkOO-?5r:ᙁ)g{Z<8w/\|K^N_vzӕWێnvk;;:vq oݼzkѷޙu.n߽{~!a#Ge5W_u]]'}۞D>yy4Ϩʞk?kx1EKၢ?ze؟ y۽޵ =~~CG>9}9y_H_ʿ|mHȈ%bIhr2o¼%: Fs#iAF9)IZ @Be))Gyvd[Q[>W֑0p&k4'"I}su`c_bKGD pHYs%%IR$tIME #1-IDATx{TUם?<(>Q6jhiӤMۙ#vf:Y3ʹ+YYiWihe|?" o_"^sΞ?.*(/]Zrw~ H7Il\*jqw={ev>ѼE{;pLB QHE1#}rwP_8p.1,*[KOBHj^Y & ی=Ć%٫>!IP6X H~p tg m&uyISdH_4h4ۦ ,qX9K&4<f%UQx̘dP7c*nӸ L0wѥĥҏK[Ķͤv&PL .5B-iBJh&%3aRQF !kv1>y#m,tl1LLK"+eavZ¶@hƄQ#LJ`Gaz$$VWѯ?Dy"9(GBlHOĴ$uA"P ;5 JKC{[kn>ZDRk3c,9e#b|L1kM$C&2wi:.W7V(GAONsx Ӓ%. =CFB4 y2 x&'T~/c7"]×},*2C#"bCcRDHasR.!L$cl*P<ͥV:_8,mfkYw'r^za>;7SP:˲]}q3w{&'f&AM.^h#(ɠA |e C"B%8GeΜWMnAHEPu=oY wHX߲sر{Xϒg^ ?-kXYZNWsy 7e37:k>Bu)Wñ^ɣQ|FpkdY,MH$+62 A2,yx?;\ $7'gʺ==hȽkAW_p?e7}\>êw?`ݺSi^V-;yo.0 ,ّglѣ<=; ӒD E#{\YB[<6\yncgBJl >tI9ǟWc=RccK:暑#@Ԅ),M|k6MǩlTl x]=Rƚ [ٺ b=z/?I/GYa:r Y$No?"ٲ~mf09u>QDiyA?H;C`NL+@ntŒ69c1z=DFbZ6AS%2q\zX3c8h=ue1XLe^kR;&nT(ݵkĎGm2P/wx#m~U7o&%; ʱ{4F;7[TرdD49^76]J(̛NRٰ-6moƢ񃙗ȺS # V` t Qzm]o$|כr9xX}|e^O.%`qUޏ5UIIFF>{;UԩRRҘINF"sgT>0GqC'*\CfZ=q*`e[2NO!hࣼИ}>)mf !@7/ұ':tc1D\'{3|wLzz&yi5`E:'~jd`H`8wn4Qa_ݞدj{8_EܰD<ⶇd,>"7Xr46xiڛvs+_PEr\] myplIٞ1K)F)XбYD _y t$A IlJrS{^†e - NgZ0Ɍ~_KR!g\yin\C.BYSnM-N ɤ}zUCnFn՛p;OxHp`ϑ{\ſM? pQ-&gsꗖ-Q}5-U\:[ 4ygldO).74` S3P8][׷Rk̶C9kU_Z687FnonZpㅣJVS''b) 6ľ 칊SYa3rC^Hq3;Ij͹x}qe&3G7@DX(QgŇ;33ydR"v\]0ϕNKi1nC,Tlu`gTu5H(6^wG\|FЂJh;I#3s|,C_Jl|1+;lw򅚨l E6QkGq2?QQdќiMe!.m{Cm $"HlY`4 YXPEh*UYyz<-Eb2]{x\e`4>317i⭭dO ^g"ݍǥuh.|MJO]; dN:&׮d)Iv܂i%fj(j+OoVFBrbKwfj%3#{,M*yRo:{ tl\9Cg:F5&Nfi<>;NYu˾{ sUIGJjh.#]:FDH@l2Y6YB϶X0QTxnӠ@ۍm#إ;{hjm\f%Z}BobdرŷFȉ,\ž7H_3wPo]fvviY`  CJ.o,}z(kOQF'G6Wsɰz_B2LrL8p4wpf=?y7r 59}-2 5zcc@Kʫ%q)AZN_y`nq zh|/u]eS0e8)A>L:yÕB}[]gdM \1(2ɮtrܲ`Q@yr֟Scc{={O \ڄ*9۷P^ߍfm39wqm&qD@ 4 w_LWGE=<-hj,[ܴxLON>^X]l\.{)[h`P|1ۡ;.mF%16cHx4/C45TlPޚ{KɛkVc(fdg1*>hQyG|6$&%b]16R? ߠבTru?3]t{;p0` .|NK]{J9r%0]t OV>hZ(8pྂm+Eܟy!#OќUw (DDtR~c^2&* v8pAM8pC8p!w8pI<׭IENDB`Inquirer.js-3.3.0/assets/screenshots/expand-prompt-1.png000066400000000000000000000261151315775736500232620ustar00rootroot00000000000000PNG  IHDRw/j iCCPICC ProfileHǭwXS$PzGzދt@B !DĆ.*TD@VE" ʺX&}77s̙3gΝ;h,0U C#f'0IK;[ ߊ" fg@>r HJxdetn rFM  %J:\v C@pS!y,8/vRf҄M+eG"-2la:k>tZR"CfEBV xGɛ9AQAFq8- /i!}'TU4= d}vO¨M!;AeFs#<`A.fk>ɼs£jO[ 4Y1ƟJEri$F}xq0]X,J$Ar2W=f+|CFcU"I@;2\[6鰊=gN-Bބϸ|G|;V wkhj8bL=}.u\o.PØ~D_b џhĎbX+֌5&vkڰaXTD@,}WcR)DH`bYÚ-¾5GF`aq,p;q/~{(qXk̕% <ˑltL|?%ל$`[3mm2g*¸]ub(L.cpezooʓl(wTK yɡ6OA`.d@l`;h,p <]=FP:h#b8!D H"1R,CJRى "'H+҉C~ P j BC(t6frt ZVz,zv/! `r,0' dL-Š2;5xO8L~@<gY"|5^ Ŀ D#e= %' xb*qq5q+xI!H$5ɍFbrHE-Ӥ^G9mLL~S2e *ȺȆrdˮ-${MWvH6"ȩr!C[999]9gr|%rr.u}(QL)>Y1e e/ -J5zR959cGfI qhizu+yYyy/9eG(**()T*P0HWV SP\_UOdQZKR}l2nz2QH9H9UDr򠊒JJJI.0d1kG'iNĝjҡI'}PU-VSY槖^A:n>C}6 'NfO.|d} TT#Bc.6!M-MsZ -OTZ|ڧ_0U^tf90l03R5 275zhL5026iB4q2I3jaڛL+Mff|fsgsy EEE%2Բв) SO4囕UnJօMolLm667mmm_ۙqݵO_abApȡQ1ѱ񎓲SjgoΟ\\r\jߵoTS{tXn;ݺܙ;ܻg_7طO/گﱿ`}3w4A5A χPB"C*BBӂmpt0!QQxVo33gTxaQq)97r(卑Q-11bjb>ƖvM[w5^=ߘ@JIؓ04o榙gͺ=hv9s眜+?5h"!16qV5T4aofxr6rnRd )<^oïN Lݞ!-,moHzlz]LFb Mp>S+3/Sh&,vedmd#ٳs%Ml,Iܝ[q^̼yyW|{AKN҂^ w.B%-jYx%K-%/M[{Uaie˚k._秀jhE;+\Wl_l_ej˪oŜ+%V%e%_VW_G$i_v::=+U,/0mCF6ZfW}3yxsWyhy-|UܪҨZUa+gmm^;vWV"lwK8RG}Oɞ{{E;_XS_cZV\`ցYYǨ+9 5GBu:zH^CWc|c-MMmoNsIkOO-?5r:ᙁ)g{Z<8w/\|K^N_vzӕWێnvk;;:vq oݼzkѷޙu.n߽{~!a#Ge5W_u]]'}۞D>yy4Ϩʞk?kx1EKၢ?ze؟ y۽޵ =~~CG>9}9y_H_ʿ|mHȈ%bIhr2o¼%: Fs#iAF9)IZ @Be))Gyvd[Q[>W֑0p&k4'"I}su`c_bKGD pHYs%%IR$tIME #1IDATxw|Uו{zA! Ht$`0ƀKNƙdf2L=/os^7/y8N2N8bb"0@v)qHp%$l|HZk%̑8pO?EBXXEGZ8pp!w8 u FBR^UMl56lUQ['&8?BV5)#H ]U@Ccg80M}M Ul% ~ Rb#x``KPdҙ>,{a?ŠZД;#yIg%}4;l ڽ|~ץuY*kjP{Oayn6…+eOPԱ&lBC@H8}Ne݇U MeOtU;1l叓́-kYu;;PHS|R:g_6cc3 9ǦuOo}w.~~t]|0qDEpFѽtA A`E9Q^ۦC2…\lp?|m'"`bg&; ^|o^* ٴs7 'IecZEp})*H4`x  Bdc{;wo\ ReY̜>Lx{3l: ąH҇B =3kٱBzb"^f_5g3 $?ZGQU贷g"AivBͤ^^}umYOw.˦Yl{>z볁Me㦷8+ޞϾ_{ W/lwlBk xllTxŧ)QUcDƥ IUyO.>;zZw*eec{tL{Ys ZB;̞3%mkFŒ-N_H8 BS6d&Y>+^wkDJNVxoRqت޲NP벼 EaW.S`u)޲ޖ_,TgϞ}PU T΁횱ۂp*%d^jiiҎiD'#.2iBIZ9$+4xo+6u <__eW7L%gL6VP& _5kv.TMT@ׇaӾ?("T*9&_tc=k:U|;!3 vdgdkm4%[8ml=c0%GN<dbI_6'5Ch}>?x4>2EHjT6iRl2|hP(*HYx?};x,url=QaqOpO.B[/GEF\4"$[J!ь&(-EFw>)&#&yAHEؾ+/~kl=^ކx!GbJ?K65SgkEg .7nlA`|$lyeܱT'`X {FCkb61|D~ (O?r3 2@ nə΃30f b yYJ<͝7"M2oJJj=X:.%3r}Gl+ 7==V* ˝ãF~w[_73yQIxޫKnM?EP[~wwgILYU6]>3Bulucgg4Y`n0\xקқ6Ǯt+Uظm0K`XJVg2Sy櫏R$%gOtaP\ca,ôHGSm=~eAx, }tG":1FZMly'%>b{PU_SM9nߍ-m00>aɱXlO2TaI [!,sg/͛al~MPcœ>luFs wvvv@>1?x=k/)wlFjegEL\ 6*G n֗t6l؎lE !M.\qdHJBy޶ߍM ,j "6!l#JI'z.'-~ LhL m_~;zWJJpcE YʎscC-kv>Y&): Wpnt8BnlgqOw\&I7+1vP0WO޲-2 q0BHmZ˙Z_9_DUT֐&("J+aW.۱fl8fM2!'[UvX&h[0xDoPx|1q"A8⥶B jXJA퍲 WO bR_tv|7ɯW_4-Is3a,s&eʰ$lip^kVL"3{ ~ѩY`X`%7<XJEp vS Gؒbu`ӡTžӗw՝x۳%lk/:^ Q3nPvYuU:Fw`U~ Jɘh^Pȶ0t"5lmn ?-P"CIx%^E0e 5 h믶lw:W\ Rǎcy7t4Ī)ļSWN@c`7kZ1lBʡ>eБ|T٘@授~ɀ8Ì O{H^cKzo[UZJJ B26+[:|`j2x MbRsX<.M7k}( (n."22/nL߽N6a(<腫Dh244*G|=QTX̙<]VFoD ~ Nc)҈ٯ.f4*))L.@DFLJWd(h(lټ [Wg-?H̑KP1ض(FGS;)IOB ǬPؽs7sFNB]d$$__q=X]\W KfEn#5>bd\w ȯұ՛fƭ|9}`9!vs (8<~p+j,Θa1(.MWݦ>Jxc][ȝ8 =cK Ov4BfC='K/`(3!bÓm_ج-ȧҜC_ẔRxk!$F O=!%7|7{_!<>?:!ų'blczH.7>7bXpaDz ؆%!!w ~('".V<7[}SiYQ\*.\!,&tv:&;֬ 5׽3ˍGډ'ƥ[zJ5F铸of!hǥ1,s O1ij|Ҫ#bo4NЌD=r˯܎J,_0Yk歷H~}@VrPoUN t&Nc97+`͂lBEbzE]`T./3l%?sH^|]P505{(eE<"Âg[̻^x(nW"{"&${fҢqL͌%yugm+:y*ۅGuud,7;?`s GcFZ| ΊCm_ I kmMG#%UWp|)uԲ "_pEgz-'sr͊|k;7ؼ~z|uãmTR U &d$ R|Vώzr$tEPWUŲ] 0&oe y5]b%,ϺwGn Ù$& Bՠ +7Ӿ[S<ЗZ^Y'6zsZ0S6"T7I/j/BHᯫʈxkr+r6Znn%N@ٲܩX5]Tp3>}L^_;3u0&vwͶILNW[α| L+-[2ћC>`l*8ppT##g2F#-/Ξa#4w叓́-kYu9S]8=<ԣ* #b7~b. ,P]\/oz ]垻/=x?arV^CWe@T MLμnͫ桼toi=.\sAI 7lb3nlױjYĮ?y Ƥ'.)@hIHly2Zkܪk0 tBWj"֧z>gH`o'?8 vw%F`ѴTZsNb}.)+{7! a.o, 8Kwmq?q(e! *?w_܀%|76=Cݑm|sޭVLwXu+zmӈH2!1RfԐT4 kZ`8p9hR-dϞ&sPD)EhhR(2iՠև a!lܹoS#Ǎi{sb޸ L[n^Ml۴Wnf{xc@R1r ǥS[r[ !#Pl㨯o9 ! /+>h b9Wk\ kX+ò1-IDj_o-J^6:p JsdF.Bq,ή<@ ixĈ}G{Qnn>BG04d ;,.>DdΕ[!t ܓ( ԐI#upRl/dd%SSUmi}}QСd杠6/O>ߒKXPZw8;.g&if.#L꘼-vw-$p KӘ3q$cA{/Azx߾?>܋QS F+H+ȸHDsl>06}g6zZi}ݸ{E D#Mu_iO=>O~ nA]nN#>~0i/$sA^[x 鞶6(U \w& !el6a[6PIi.K}k2,K} x%e^?WU#2(Mݸ0(%Rs 6ӵׁGr7  fY$d"!zyZKnW+G! q;rwg`@MT7ǯ2qH3G%6Chlwgړ,]*RP`ȡXT\`ɋĎM$wl"웿'8iʰEHHkd]k\IٍrIDN}Tňq4)8M&+:ȴLA\dA3Z%K0R_|  9E`t]GVӨPtT/ӛoi q5rjv/ׁwK2fn:RQړ5o:r݁y]/1%c Oq ݰWt _ċOq|&QAΏ v~[:XETΝ^-, ޙ_)IOB ǬW]\W KfEn#5>bd\wA8ppWyP]unr HJxdetn rFM  %J:\v C@pS!y,8/vRf҄M+eG"-2la:k>tZR"CfEBV xGɛ9AQAFq8- /i!}'TU4= d}vO¨M!;AeFs#<`A.fk>ɼs£jO[ 4Y1ƟJEri$F}xq0]X,J$Ar2W=f+|CFcU"I@;2\[6鰊=gN-Bބϸ|G|;V wkhj8bL=}.u\o.PØ~D_b џhĎbX+֌5&vkڰaXTD@,}WcR)DH`bYÚ-¾5GF`aq,p;q/~{(qXk̕% <ˑltL|?%ל$`[3mm2g*¸]ub(L.cpezooʓl(wTK yɡ6OA`.d@l`;h,p <]=FP:h#b8!D H"1R,CJRى "'H+҉C~ P j BC(t6frt ZVz,zv/! `r,0' dL-Š2;5xO8L~@<gY"|5^ Ŀ D#e= %' xb*qq5q+xI!H$5ɍFbrHE-Ӥ^G9mLL~S2e *ȺȆrdˮ-${MWvH6"ȩr!C[999]9gr|%rr.u}(QL)>Y1e e/ -J5zR959cGfI qhizu+yYyy/9eG(**()T*P0HWV SP\_UOdQZKR}l2nz2QH9H9UDr򠊒JJJI.0d1kG'iNĝjҡI'}PU-VSY槖^A:n>C}6 'NfO.|d} TT#Bc.6!M-MsZ -OTZ|ڧ_0U^tf90l03R5 275zhL5026iB4q2I3jaڛL+Mff|fsgsy EEE%2Բв) SO4囕UnJօMolLm667mmm_ۙqݵO_abApȡQ1ѱ񎓲SjgoΟ\\r\jߵoTS{tXn;ݺܙ;ܻg_7طO/گﱿ`}3w4A5A χPB"C*BBӂmpt0!QQxVo33gTxaQq)97r(卑Q-11bjb>ƖvM[w5^=ߘ@JIؓ04o榙gͺ=hv9s眜+?5h"!16qV5T4aofxr6rnRd )<^oïN Lݞ!-,moHzlz]LFb Mp>S+3/Sh&,vedmd#ٳs%Ml,Iܝ[q^̼yyW|{AKN҂^ w.B%-jYx%K-%/M[{Uaie˚k._秀jhE;+\Wl_l_ej˪oŜ+%V%e%_VW_G$i_v::=+U,/0mCF6ZfW}3yxsWyhy-|UܪҨZUa+gmm^;vWV"lwK8RG}Oɞ{{E;_XS_cZV\`ցYYǨ+9 5GBu:zH^CWc|c-MMmoNsIkOO-?5r:ᙁ)g{Z<8w/\|K^N_vzӕWێnvk;;:vq oݼzkѷޙu.n߽{~!a#Ge5W_u]]'}۞D>yy4Ϩʞk?kx1EKၢ?ze؟ y۽޵ =~~CG>9}9y_H_ʿ|mHȈ%bIhr2o¼%: Fs#iAF9)IZ @Be))Gyvd[Q[>W֑0p&k4'"I}su`c_bKGD pHYs%%IR$tIME "F} IDATxyty23 0 6c%vgkoӦI6IuMO84q8^0f1*EHBIhC4ycHB!a9:f޹Ͻ}O88888|P88888QZƈdofǘ`GjWnn:4h점6vߪM 'L Ct׵d&GP~=P0 %Zp2> ,QoÅa3:)VД#$7~:M7B] ~uiL?)"Ɩ,W D.T7_9DEJN3mBi4u4 yG{.%.%kTt2KĸTۢ'Ovx;i0o,B"EwƯV:: аm>Eav<7C7ئ%&(;PHsZo݈U{j̠Z [-AL]%P7aY,10#{{0a" +9QګcsIqsi7v$~G(??a;A ѯO}J_x`i|_ci`]8{>NݲlLˢ//EU)k fڂzAdM4;<4HRBv`Y ':I3_2)MR/P$(+/ה/1£=S0lf*P' F3MO^o 4wyqF6 `y|ԵST֯}[\Է7<(is[l]yd _m;sun}'g[6lְG8;}}+!5+ ./H+vmĻy0?ϊwa6n'n}DEٽo?̛ӭMɿvp@ps2x,{[\8۵cX].-X$2.(mql9]O T yYh%Ӿ"(\/E(:5lj/~RSFa4\RCպZ~!Lݻ7@UA" >svۂ1p**uj$z|yϧiDnj,e:l58:f᭫\is/ ]> OxWf_Kq f8 *xb|EHɮfw46s%i`uFU uç<_,Y*O4';(|j&~t!0ǂP$H˦S<.οտd_?-i.liiLHƲe/9sM;a+DE0#7"6јmDk0H3/iTzkLDu?ɟ[;m^#5b$f'`قG8XD\HM̤˾ǰd*ljKOl=jDw;XWXɿ3gtr::~fP(.5ݧ=Dzjf>t]yq$OvҨ跿rW}(RkN kX#(H7_*j7a9|Z$4T݅VͿM:pS_DlDXwLΜRt%иkBT\~Cm[9X ǖT6nbŝ̟0}UC*/[H$; S8pa>kxmѼX`n[HLMFȹZu%<=YM"{(v6OZa¡kxTALpYiR\l: "sz7 edgɎ癇;:[wCj1.}l6PzܔHFzhnsn;u!A\ ,eIΈDLKRzhbVr%'iHͦ{ㄦttOLB p*ZX49[]3+4='.9j;$&9!QZU3H: C.T2Tll*c_~#Z5ո2mr'ղqv+S2wvv@ vm3:>0nt?Da"|l+oh7{+G1mT8k5e7|Ϟ$%} BHnXGq3sTB4&,&josdU/̶{IM QQ\\굈vxt vurռ:.a+jBŤ~nZ?AR"ƶ1m j;B"cXt-ݖc76+- HUݶ3S"lIMi9˔]FQ(.]5k+y{%#xg$X`[ǯUI~ 9X4bXgOyDE!.CؖBLJ4Twݔw~7x-ݬEC A8{a2rcD3a|jk#c#oaR| ?زiRc9&xWsɛuM̚L[6Myj?xᷴj{,F&F!7k)x#MG՛sKKakmvow*EYӦ|O7abSmެ ndwG 'pd䪆vŢ,\~gC;a0:_Z\77 NGJhkndY-2I 3>EU(.+'>@YVtsCM=ݲ gLR aPWK}g$9]4TRw}87[9z` gDWmM׵p ;X᪖kw|i1g,<-;;zlAzZaaTWT7v`&]ןbcO3idZyw9Qh}l#Mu3~t 57@@Z=[LH"%m] \7R25li)4zPtcA0]ڌa\z?Lb?qpmG -3]*T8F*pݞeL^{ ܂|Ǥ121Uo6gomlnMҔo\ kqvO;EALhodrw|v`~[_[6+w%pfC4rD18Y9"ppppp܃Ej7|t*Q$36,ibn DF'8ԙb~ ݩc|) ٿi@420)] $}cυx>TfTO̘|cGw_zhv< p| ;>J̔(ʊS\ bg#r#+`|6)#6q|so>I 77 '@u5- gN"η x,=<* rhurwp2LoG4qEh②g3j,l<}7yw.fƴ<0AK2=cSs2HտmKM՘4f43HЕ"{/]Vu.@-tZ:(-mVœxvoxWR3 伉ܴ7&.>Ӕ;^ +E(/ѺьQ; 3V߾*o$lwg?恊_f_c3IeqXbˏ??$x=Waԗ?[m𣍇˛wcu+uEDة11& "Yh"jh^`i|̘70] 4v_]&nEDF!‰>S~Ty;g7.4ZVKQeˆn^efBJ>b&}3rh.ME $i⥪bA{(r=D&|n"Yelšj~U @7a W,ᑅS0-ILV.)-}`i܁3(dJZ,dj2&N$N>zZh#v߯hk!ܸ):DLd\Nw6,ʋ҆kQSs "GDQ8[X2T?YcB` 7/(\ljPak ?3_93>wLΜĂڦ.Rh.ݶO.΅wW$wLl9pt`1h7,_(y@ ưx$No9Ţ;.ظhrAD5|@Dv+~4ƋV"gsL)e2-ggΘ ,.^hg@ .No''+;IG0mV\](çI'(PH~rK YwVaƨp33@WT҃&.0|]$JʶIJ@Q,Aطg9MEgO"#ZKQ!@ePQKAغPPT ӈ$څ{T&2ȨE)iWDz7_\Dy>e;w39o&Q혦`#P >PhmkBa4G+֭ĈH*4wu+n_-_d8NN5a&x+`_cV3&¤l{OV>ڇW˩Exk\#x`8^ii3(Ci<_yBLC *ϔRWRB@(T\l>iKrsU%>E'*ՅLò ~T@"l%ض⡈&h_ ^#ë́qΠgST<. 'r;5wrOlEE`\]f\^[)vTzGy~wy G4qcHlNn DKQUkMJv]b/}3a]fkDDŽ̑¦:uutS}摉#y_R畷I4qۅ-SwىRw޾ZmMM"ޣޣ9Y9¾ ;8888k&;Q>(wG$)"4z ._7?%]%}"HNZ{["dXÔ|w47@`rklMi|_ci`]8tWJbYRX@njqL1m?W?i|) ٿi@420)ͽz+s_#o9Yu IDATZ$~G(??a_?>}7~#0`+/֠}̡헷YKKGK n27SfJDϸr\O/Bt]䈄L/7W`aغ< tuS|b[mPTu. u5,wvfĦfW#3o&O6ЏM> ,âf~ pGW_xLŚO_{o74Mq 3!ouڍ m >zq qyObd$q$*mFt߼ fldYh7O[ϻp)63 ৳w|lԜ uqom;piTIcF31#] T>_`R>%\/Km+⺣f"H%lC^f:S2ADd,Ss24fI(L"㙚QxD?3A Z.9_?`t\4Ư^r1>,CYotH^|%1D7 .mrʅD"+!@APx?U5OЌlV- !dBLSrx)xFnbG3F~XW{|Ǽ{xp<77Tm;q_X:D QxmOe1zX{(۱r8,Bvm1GUoJh~0K۟[o}C[O`i|;-wֿ $Cnj""[JL&Mn9Y`齀&#' hG o$../<0$7o>i qe/4~My KWp_A%5ۉ 2{Lbxr .*N[z4 :5Ǎ'6Cj|N1J ٘F / >}_Ezٲa#Df{$]~19V"ô@RUߎ Amnj݋?v "R>N7\ '-;xg.T{R'͛0+)$&+ܿV獾t f ]j=~hc6t`鱬mSހu眹&E\{7ֿ+k7vΞgygZ߿7/5,{qL/>Z~3A!ןYE|Tx{Gi AnC\oNg2>+}$dNct|mu͠r5,wӫcph(Ug1H ^"7%kk4}U嵵qnnsts&2.bD@MJEicK`X*Z-Xq''Ld_@tj7wA\Rn) gkZK'kLRleM2>`zk$#LW.G痢 "*33'x;ڡ4^>~1XwaUoz\fwPDwP9}Ccryc/rTp>xa-刍 J9߮? M-f@hL9y7W%7UgwYcyeĎ&ݟ.-ݩٌVګxc_ CLJMc 9nbb1hKQsY"y@ ưx$No9Ţ;.ظh`G6"21EJU"в ZT/^DZĦƒ3ɴQ9cxp]?=%x NbLoU5W+AwH{/^]OGwMB J j\SS6o9jv8өB3"Ӓ<ڭػ;_Iy$3R4]w`9vyF1mT8kK̅͡77|Ϟ$%} BHnXGqP)X\W*ҔvPI>9+mnHtUI (ESC;2IdDBk1;hGHlKc{ ݶlWKswwcC6vqSpdTfU_3% Hkv(rk\yٲ؆Ԑ O|fi!I,k˖Emn˱wEQAg_kk9r]'Q(}rc&2fz{%#7?nn;ٖ=KoRq("uПZۚPđ?tu%1"RJ/]݊Wˮ56qM!4{to>pkW*%q EtI0i8ޓ$OIt|}3 CS j={0Y91q"ә0c>f?!՞A=R,p !t"r Co_L;轎7-oPgPnHTP֛$1k&S0m4yUjVa*lDVF`;m53;: 44"G*C۶vx)R׈OMb)`Ҹ|x.^̔DK9u^\Ɂ0sD?b>#)k-Cݭt~Xo"e+"ue!Y+v{irvs<_ۇ*-2C0%Uh kw[o>/? !%6̫P[|ϟ" WV4֯/Tyb5O.*{}}*潇 szc~: ?6]a8nZT5t@\~5ƅ[8Jbǥ1aD?{fF^y隭̙ˣs׬|)qJxƥvh5˫(T"2! ȊoɑԖe^G{xhttL}϶\!s-y$/.Q#2[0κJ{F[C4MãkL:Ӊ0d}zV՛Y>,?W1R mi8#1uKLS݌B{} >&>#r}X¹7 l~6T݀_cHlNn왧jښ)k sBO}2PB &fD6 յ> ;p|e:i|e^y- lAzZaaTWT!4Έ2QTr|O C) [(*3jHImBW) d* >psc(0f4~uԪi[FF?4]|-/ntnwppp|AcCzF:8i3G;888 [r%^b0<[raHprwpppppçIK]D"%1s"y =o3,}׫<Ĉ{L&6)ؤTxYPSYç9{?L5tO2N |\q_ZHjnXfgK9]*Ƿq}niO>aLʟ1&/|]ea^ \%t7~CΝ7BQXdneX#Ɠɔ/Q>bvZGO` VQde'R殀rGbnW~`uE`5ً_0M{3wxQB}oIXz6S2"6~2{lAî}$.k$O^zEou[/2 rOV%j^w988zঽI\R,p~t*W u cE&fD4Bשظ܁Qa.\N@$ԱcHN~3 Iad^&zߨ}])\O~j[vZNx lBg> ;>$<1Ϭ$*!JiTsx1Ǥs!^w(6v=Լ! |1/Cv>{ϿtQH6 maSk_?6ꅣo!xO`²|]!( ץq}􃐠K9XG$C]k0b8]E*M%?Uzt*$Ҳh=qkPpפ$Tɋ'1y"rpU9n Yxy=uZ톚⯎+7s qLZP/ˆQatՔs()Lyx>cV?%T|8m1b(|$[ԋQ4S6bMشnzX=Bخ$f|2? 9Or7}L|r0x4@dʵkpK(DŽSq>K7 ?%vU[e<~ >"ǒ.#; kdFeE W0f?w}a!9+T+\q/lBB[Оsppe^{ҳ"QeEkEUhoF B"$q4] jgoفe렓cImJwt] -h;v"SH:k됖FXz" 4? : ,.Ί7G~DTYMCY-*j˪-;OgsNIWQ`K}4́ϱ5 "=̼Nhj23׶"ESP4@v>:,.tB{C BJ'Aac5Qߢ9888}ؔ{)FOHs27e vT5װPU=Cp]'ڹ-@ zoR\x"5> 4V ؘt ˊdL̋ Bݐ>\tP>KL*U6wt QGuo/B\eBf) ( Ιf%)3&CEb rAc ]: Ϡ鬨 )\֍Ͱ.v\TWdNhjh`Ϧy!,O49w6\ ?KT,W||2Yg9a"<+ A["]*hD v$> MX464Z~&i$L:J >^c_EdOUÝC֜o_gi1)JaIRΔ'`_~O,#,MCvorv[Pܨ)z>];u4Sx)+DŠ_S|)XӎAU@]~O5z~姪G'uJ- qܯ`n߳d?pqs cGa65P_.IKWX{&iHJ~"J[N G$"]]4*kbD;?DBr$ `oQ]+Caelwyc^OPyRQz`spp*a#$e#INNmpnwppp Z6fb6q1Pp[[!_ڟ'rppppp"LJiVpTӾ|t$[[cAէo~駱 wq\Shї˜ v*}I_}u/E)jHw8888f~G.'.-}/-+Z2qB>K}K:X |k_ '8>]Ey_$3o&O˾1gL-%0!?֚6in WsvR>? }wk: UoBQw36An!Hi٣kKycҙ4*YeԜ d#VҶHM՘4f43H/pNm988 8g/4~My KWp_A%5ۯVǚݧyhF6LZɄc8UN,bǒ qe_ib&}3rh.ME $iMKxdLKg_c+F;-ֵQu6i%;&gZF\lafM$kWe4S3ce'ζ#113z_ u?ݜjsN1*pl[\n6?./EeGԜ)'o<"8rx?-gQ)|ԝ9E6ڦe:88ܺ;nx7񣐒>ݰVTj[",&f.,ܶIb:57GN }|b߯ǫABtRHĴ$gVJ$͖H|YVhEd.!6Jj8UYé 4uNtppŕ;`z{BnU,NT4cz: m1>k,T8^Hfrf>CI`Jfu4zBlK#EQAg`GB {,K@B7^: n/LJ̚L[6Myj?xᷴhypUי{ӾK@Hh$B1^ pc;[O:TWڮN:N{:*g餺+dNe&w qLlcb1AHЂw3<=!@UQ*==w|9LNFhni榀YR8 38xъaŲ3Rv| 4 ו$j1^K u$Bq?Gވx۸GH~)kҢx/ytNfnr Ykfs[öw]̼a[Tl\Q8Є 2&OZg&", IDATV84ڡ2E"#[4T!(qj|6 7Ѩ/8,U#bݪEئK}I,obJӲ\e=U;H\ODd 5> c&R2K047NY WΗsBfFןdha lXUiuzAtv!OwSa<ɋ[ ofd%F]s׏a^ WeaE:C"Jr^~Aihl9YDFT0)=ۆOә3#4AGD\ [QV."Lq~{p#˖-[(n!:i2>ʦU0ٿuޫ \̾|mۇKJì\ӥ,SP̞e+Aׇ[xr8KX*;k;Cirkl@ D[k$D lM{&264r=h^ 91KKcMG 8vAGkNKE 1<;ԉ B1 Ǒ.a^nᳲ v)֔cW({:r@*Eh`W ⾈^ B1FćBP(P(  Bq:wF Ic[`OKk_}F>S{Ym6tr{?xY_}0ۤK~^Ű pa,/UAWwI_Yif/9<>΀ Y>f/Sol%6h;Uƺ*r=Pv|fSxrㅣ>@+:.'.dCY7d[8?ȧ>}^\4gtb Bh^ώLg_Ϻ#qƶ*rxc|tq3 c|r˧6Rg ͼ}HgmBZ*a-|Ks}麎/̋7WƸ*r;\FAڄeXA{K?h x5ӣ2 [db&Єu,W0sZSn1AX`hq&G)QqΠ`,q:$)* ` MTLsә90aPM \ f2D;P<@61sF.bo/k#Eȶ*Tņћ>\n>/kk惐$&8o'[UOs(r7.FRhiD|dg"3|Ia\nOKD$i"< [vVi/~ V>ǍgV1|~L3AځvË?\Klxf^chٺ!B^r&D99Fr!ײF[OYx6Qp}|kbp'!;coD˯H᣼K͆e5t;> )I^ƄQCE a_G?yt>ϔc} .qʆlt6AlɊ9y&i%^}i4KXj b; -hp\EAفvvpo_ A N fVCpᱱzu-`]&gXW+HO:D%ejb 㣮/ߍ&'A (w/ 4.463KגW'iͩnbS"N*.ze⛘ /o<9I$lGRg} =E&.A/ˈH_`{(`Nw.3N\Mhfr(}WT8g3HYxސA:.H{TR_%W_i*Vp˼—̪y|J}{QۭLJ.Tրw/ht)Os!kfځSY7ް>aFgɹaN<q+nH`K>RQІ7#+l7aEr~R3Yϼ4f-cSg'?^?t]\9x)5\v] H}tc#d߃)Bwc1*Djxmve%ۘL1yٸ'Gxb#KY;'}l^0Pd8Po/k .Qpzp # T }>R ~|/e;sG*L 3tfϙlusx19 -2+KϤ8q:(>D +&nٹ#ygV. xDmsju ,ʊXJ4F]y);5X?۶lZF hAkG!K7?}}/yj9L՝_wǁ3XBmo߻rlٲ>3&yt`gycZ8h;A7` v\je@nk u~+wZVqni سUv֎I7Ԇ뻯#14A6j.v3<2-n2뻖H⟿ I^ab:ؚ~hˣfyA6{oM7o+WLLx8ki1u"¥3$G t5_ݏB{^P+KD2"<j@Fcf|ː@e|k)ճ᫛ד@6m5{* ׿}Cym 3uZROi#^keg A8wxujzq:otQucrjH`Gpɮ>[`w~ V`@rq!-= r UH)v;$3V,o?-&ۼu ~U; T;P(ɴLf{8'AϚEk:BvuD\,RT(} H{w_~-~*+w+/|O] mr5AHMٷ-[4~QYp 4=pl\0 W?T\FT&ą#$i+U(w1rwlfL:GOr#1=y;};Wc-Wp@5yH5;;پuMjZ7 ]ȈX4%o$z0㦐@…VV7+D=ݹWMW˜e1?m Rk-XE\nTJKlŲ=D~ Jj 4U]eh+dbNʪ'`MO81J/t0ufiH!p33h^j5Kƞ.:\Ze9 np1~5< JٷzOΕ6A<꘬_(Ҷ9}l/]( Xd^Bq{zn&>צiu+*\ļ?TtLkmH'qe$Pw)32=3glAO%=уŪZ_6Eɲ{ۇfy?4+پ(HaS;%aݲ= ;w!7s:8yxDfgDpcTR3R%^W~ߔ ddЄsKxYxސU G浛V/gOSK##b\IWcOt]e .:wS07͒Ք, ,\GPőSTc?w2B8شTZRNxnF\=Ba_{/|!fwĆ(+eܙ!V(ʹ Yk]QZӟ0bR\2` n^ZjN%sBU-Iuxl^_5z @7RitVWNA .U5J9waJ$V称ܠ~ɄzjGpv7rMG 'NkN\|*Re pe,,WiY9GO,+5DZfitI ԟųg ־Bkzf"Ext4ƭ+;^lA:^(f%yi| /~(wr5ٔpe ܾmS2'HSUC5)=ۆOә3#{qjaأSY| n O=(> Tc޹n)m8gv"9i^;/|<|nB"]N(V-|6B4MbG{[щAI /o&.:|@/ B1[4BUj5z]Gx4XWcz};0]K14A6j.vd+L;P0X©ڂsr5RqkքTz/rahȫzAW ̀he 8wS9wBq2 BP]P(ʹ+"П BENG*e( ]BlLBP(P(ʹ+ B9wBP(P(  BBP(P({/_VN@2IENDB`Inquirer.js-3.3.0/assets/screenshots/input-prompt.png000066400000000000000000000431441315775736500230050ustar00rootroot00000000000000PNG  IHDRwH 2 iCCPICC ProfileHǭwXS$PzGzދt@B !DĆ.*TD@VE" ʺX&}77s̙3gΝ;h,0U C#f'0IK;[ ߊ" fg@>r HJxdetn rFM  %J:\v C@pS!y,8/vRf҄M+eG"-2la:k>tZR"CfEBV xGɛ9AQAFq8- /i!}'TU4= d}vO¨M!;AeFs#<`A.fk>ɼs£jO[ 4Y1ƟJEri$F}xq0]X,J$Ar2W=f+|CFcU"I@;2\[6鰊=gN-Bބϸ|G|;V wkhj8bL=}.u\o.PØ~D_b џhĎbX+֌5&vkڰaXTD@,}WcR)DH`bYÚ-¾5GF`aq,p;q/~{(qXk̕% <ˑltL|?%ל$`[3mm2g*¸]ub(L.cpezooʓl(wTK yɡ6OA`.d@l`;h,p <]=FP:h#b8!D H"1R,CJRى "'H+҉C~ P j BC(t6frt ZVz,zv/! `r,0' dL-Š2;5xO8L~@<gY"|5^ Ŀ D#e= %' xb*qq5q+xI!H$5ɍFbrHE-Ӥ^G9mLL~S2e *ȺȆrdˮ-${MWvH6"ȩr!C[999]9gr|%rr.u}(QL)>Y1e e/ -J5zR959cGfI qhizu+yYyy/9eG(**()T*P0HWV SP\_UOdQZKR}l2nz2QH9H9UDr򠊒JJJI.0d1kG'iNĝjҡI'}PU-VSY槖^A:n>C}6 'NfO.|d} TT#Bc.6!M-MsZ -OTZ|ڧ_0U^tf90l03R5 275zhL5026iB4q2I3jaڛL+Mff|fsgsy EEE%2Բв) SO4囕UnJօMolLm667mmm_ۙqݵO_abApȡQ1ѱ񎓲SjgoΟ\\r\jߵoTS{tXn;ݺܙ;ܻg_7طO/گﱿ`}3w4A5A χPB"C*BBӂmpt0!QQxVo33gTxaQq)97r(卑Q-11bjb>ƖvM[w5^=ߘ@JIؓ04o榙gͺ=hv9s眜+?5h"!16qV5T4aofxr6rnRd )<^oïN Lݞ!-,moHzlz]LFb Mp>S+3/Sh&,vedmd#ٳs%Ml,Iܝ[q^̼yyW|{AKN҂^ w.B%-jYx%K-%/M[{Uaie˚k._秀jhE;+\Wl_l_ej˪oŜ+%V%e%_VW_G$i_v::=+U,/0mCF6ZfW}3yxsWyhy-|UܪҨZUa+gmm^;vWV"lwK8RG}Oɞ{{E;_XS_cZV\`ցYYǨ+9 5GBu:zH^CWc|c-MMmoNsIkOO-?5r:ᙁ)g{Z<8w/\|K^N_vzӕWێnvk;;:vq oݼzkѷޙu.n߽{~!a#Ge5W_u]]'}۞D>yy4Ϩʞk?kx1EKၢ?ze؟ y۽޵ =~~CG>9}9y_H_ʿ|mHȈ%bIhr2o¼%: Fs#iAF9)IZ @Be))Gyvd[Q[>W֑0p&k4'"I}su`c_bKGD pHYs%%IR$tIME "F} IDATxytTו9w*IMH!! `lc /IV';u;_g9/N;v<ۘ @ {q HBUBXߵ`U:g}[0e$("ODEQD{QDEQEQDŇZ_Ffb*`GXX'W;4j#0ጰ {p4(ea^hi$ymEm("Rs©XD ΋=uݒE3 OpǁpL>F2ޭKCϞɩƦdb\F;ێ#e3z.t(..#U~7qw߼ :<&%(*טXw=q M/>{;REŔ ɘAce97 /H _Yia&5g8tK+JEs$ܰ8Ȫ&%hhS,JfZ̟e/]\;wo,ށ `&˖,!376-/hC7>[%v ̭Krj{GZ1!>A\J.|2jKS^{e 7LQ4~rHч0^Y&ΠIfz&  sIr)}鶠 g,3sH t$h2e|9qP ]]]{ m&04H3q*HLGi)gLA.z9#hvͣIɚ@T~|-A ^sb 7J!8pt, i+>DHi'6c8m˜)|(Bxgi1.,#1N  h8{0LHAĥbI3.Є=x{ϳFN{g/}^ 0Jv}Od Gjz1f{fcss۝k5~AW>OXRPE?PkӸ7?zW8MY6?fyykQmqEJ7n "<{-#qU(Ʀ1*U(`rZ"; A'=2>5[ݝ_ԓX;<͸cT<ƷpgY`j1Vˊ1LIbD>wJ]m(MlyѶ`ܴԟW^Moi^U,[wa~f/^@LSX1k2Ǝgp=(EkC5yi3G@j,NVNz=4{-RJ|~?~{ X4Χ[JAHM/co > aZ1sUHMoc+@UtS @rv3%(7[hZXd;`0L;D[I9y+S%a,nHO Nm‰׷R{R4yTKs`x|:c4W5c2&!k_"sB  Cj_yv~?^3_ Z9.׷c98I?{~ݏ"O>XȽIFFEdN#it2iqmG;0/ҁz??Fm&-vAϗ^U`]#ԜEďUstK˱ZeWO*Oʮ]͈{:rj!YI*a:rMcfRwIܘ db^p5Զ] Xvz|6Nt.-w;;n. }[R\L| :o?Nn9&#`{W. h [n˛Vgi=ԽP)v-hca'%)yu.Ǒw*֠En2&e]cfke[Y_A$'g<>i 36/kGpJ<-eks!58X-l3?7bcmm4"h `4t(3a,B @MbBO)+tMD$Ό KPP;ky~:@mcBm"j.rF.uu8Tŷ͍Exvڎ8Teq`;KUz(I~f*)9{hH*Jb:c4kH S@+m˛G) 9A7l޾ mUl-i䤨Ň;u7ΝɍsgRGXӝl8xs~0KR:}&7}﫸#bqR셰eG[Vڮq I{1.9h;v"3HԻUb=?Ap͑e(>!]wQ6'm !GN*ꚰxR5ښz+zηvu4a)5ƴ$+ѭT ymw,8sb/q^ALR7._O<+ל􂟠ʒl\fźt×̈́ :W)~Z&R3k(;ʽgüw. 722i:_׸_(3SX gbLV̝ɂL 1KX2og0,Jfm ߮Gq\OsWEjIb6 Q:Ltg^_{ HEAG-JJh U|t*.i=Z:Q R*.kNF˲#{/-<5ΝǎiӘUK߯=ɫ;0%_*: QDi5[Kh`Tz{ α; .-39(/DqbWyGAtv;T,ՍQEQ}igԃIП#!sr]:V=K[QDUQ|aY«h rQA$%~$‚CԮ$AQݨb"xugGWDEQDߨr"(5etU#31O7!$ -xeX v>.:]:\Ҡ 5Ê5%4bף\@(4W%;q2pS3IIGS$jxw!ZBY4I̜͘dtUl9^}cbHh^, Ӥ 7t(PU*۠7,jj g,-% Y|m2t0 #ČD\*8㒙>)/Up*76t<]|R!V.xYw F6Ř Wie<R;$? Sg &6:@JW?ʣ|w&eL_ vI m=0$SYf^VaJ&VrjoE~޷ob榥<Ͽ:lzMro$1[wa~f/^@LV̚a0w: sFP_^̆7 nF^O^BJoY=X4Χ[JAHMxh<,o omߏߐhƱnɴ^ ^5}NAWEϔH/[|g6ok1cg@ 0am*V̠\q PU/$yksF$"9!ô* C5-yqrCo>w~s̹ܻ|> K0_=*Oʮ]͈?:rj!YI*a:rMcfRwIܘ db^ ɮ-Z㛐ȷqsl)ܙqsɐ9b]œ/՝j 5 8%`Sjw/UvVgi=yҠFОP5UGSyG_ ׍4sdd҄!aʁmhB̎&\0"WC_ϯ#7E{Iֱbe:T@0eqI)RAx>?H\lِNr&EHAsc$d1A^@*@S,~+trTA) >%,3cZqCNo''k:ILE0m^zPXWcF3JaQ=;gϱ3t*C8xc/sgiTgbCGC.8\Lbb:c4!$;/V^۾~Hy u."5.sؓk ۋs[u-NyРcIDATBq QnahF"Z{i!mUl-P&"!tvi{MJ,{di:߆?4NE\(PH>+Fշ14?lWwzzyjr<>*dT6(wURz@#ؠL&C3 K zkA[oI뀲 A8w;!]_"(BhZ }BQL.^It^:ߎ W*46 p@ ^ڮdQ|x:lk\܊ :"2]Qy9ve7ճ'k0 a9rf!57$;v|m5^7G&iCx*qtf 貅mG/tj4Ab\K3&( LOuSR6 %LҜ\Xܱl6ao/p3iZ]#du?W\,[IY|oz ,Wt;ŀep}9l2aZx;|̫beo y 'FZ"hj2:Ņ&P.TUQs*Kq7Su1pm8ccp^_Km ~E'>u ;)HOdvgwx 5w=@Bg r{;pp^!& MC;}?X{AN*ūwo:.ygWQ\ɬq6]X VZ[o$3(6/sąSM`ќ"+FW_w7N\BtMo#g]MwCܮTgb#ß3~ :#E4i*LMEq6?5E[L-(&#ACJ )9w Ul~tbiܴr>K kӞSvv> 4/(bռ)Eâc$!0UI\0]$.5nL5 lZ]'gtb] ;ylVnij4U?Ϳ૸s- _ܹ(A{"X4ӦCJU^[6X5'Ki^$'P]\w~z}5s&["^s{qNib  m'/c{*88q˪%f"ɱclxmW/4lKoxX-sabP`'_ 0i1+^;E|XדҹmYZ~9z#@H e2U<^[6r8qXiS41a)0|ٳg3{"e!mfN~<ܯ] {"^8wó(n f8 Ί){=⯣@zL;MW{+ r~mLSL7T@yG L.,.s)`Fk4MYi$ĠjPWU值 Ic i3΅b5v9hpTTnhzpo_T-6l7p[FG_BN r{\o\rT*x~~'m H bDADr:?=VkouF*d߱]:ƹ?Eϝ T4,F[9vpI"-39*(V*;Nt%a\E(Le`[G+$?wGC!$t|;z:?E`]bDu|9| 2VQ|гjLHvQZ[gc&ABG>IP%qYIН!("(">=ܣ"(>i1`/0Yb/ M] k춃#X%6ң <-e1x:[]]1 x 7Eu6<{6DK%G/(G4G˟eϳpB2lf:RMGQ~ΈS~7qw߼ekrFQǑ*樍_ĥ.t/> 9 ˟ gDpuSZ}Eft\qb!QG.ZƒUWxw*1f8ΟKVRXy~m έQA 5 ˁ#6z "7RST^ٴ}[49 /Obz1(h 8^Vih1Yeu1 J} @MRuJ%0ĹKLHKB |A0L 7v[\V[0?_4o [&0N$7*Kf*~4H)|m`bCqX\oGXJ[ZWk8X&f&ؗ0M$u#-" (@=7,`BIX'DT5*"5+YFbn0 Gvoo-\|R! R;>JpN:*[y|(BZxwHLHdbF ".KJqL*J/\_GUK?ˏ7-r4cUܷp ;V _~[@+ΧQ73:)@ SKGA~LP9~+ȫ#A˜)WK>,-FHwII~CUaMl>qѾ8 _5_>:+1)c?g>_y7nֿZڕŘB㍍/PFi8/I:  iLZ{q N)3 T&B} +ܪ퉩y|q::yooc2 #ϲL 11MKyu&\u=V\+|?kݷlc˻;)܁'p@R0uoe$1o"m%Vއt7vdUVΞV( u:qO_^Kr| vʐ\8?ߝCkay[xk~D5uK}jZ?9jYGa(ZK>Rc-wr¨oGZߏ?[~!A[ʪ33KRJ"rZv37L$$ǣXZ|=!)ٯtG? /jjkqaʟ{律dd;u>N@pz{4mV[&cGӒ ܑ!kjs }.L(`;[0 R"̪%J}R:,)*ݽ8w"~}V̛4eӳqLCPh`4"sv}ޡ+3 *\,0,Z/5>aʋeI@z7LX !\\K{~ ٭Iq> E^CG@J=۝ϝE3-=ݵzg=Zơ[sCy1aV0_y9ve7ճ'nVZ'׵NV~~TilpWBءXqqF)VCHt9t nXAq dy{!"4IJ7N6e;@cS<eh of1.EpbiP>ty χa ))veU &]gACPiB0meۥp}n!ɔ瘨ٺ}jU۫+T"2{ob~8Z;prKkz=v,`BL*ZlŇ^h痰na'iNlz?Gv֞TRF ;+r(} hm~h=_N;_\zE%{!.f&dhNH f+;'.C1NqQp3P 8N(%4ª.;ylVnij4U?Ϳ૸sBMu-s'eli )QTSGxeoYWLExtlbN,/l;w.d"J(Ğ%^G[wɻ3}65+ OИ:eS@$ۏU+Kg^_,,yn/?/ `WKfEH cJ.|$9X~=ܾ9pϭcBM/9OׅpoXG:ܴZ)E%E9{IkdW4b:W21w\`b_OJeii_2m?`:"rAn[dJ$-RNz:2n4 l#4m(KFBL uU5\~7B)=I*=j&A0@0h ;aaɟ룧߾?^i9YZ)oCo|֬N߾qݸFcCh$b%*uoGJ4 |FО{Wtfgv=@7PaEE' !:Oe)E4kQ|fFD|~E46mٍvih!Q|26pQLQD'p("r"("ܣ"(*("(=("aԒ^]IENDB`Inquirer.js-3.3.0/assets/screenshots/list-prompt.png000066400000000000000000000373511315775736500226240ustar00rootroot00000000000000PNG  IHDRwJ iCCPICC ProfileHǭwXS$PzGzދt@B !DĆ.*TD@VE" ʺX&}77s̙3gΝ;h,0U C#f'0IK;[ ߊ" fg@>r HJxdetn rFM  %J:\v C@pS!y,8/vRf҄M+eG"-2la:k>tZR"CfEBV xGɛ9AQAFq8- /i!}'TU4= d}vO¨M!;AeFs#<`A.fk>ɼs£jO[ 4Y1ƟJEri$F}xq0]X,J$Ar2W=f+|CFcU"I@;2\[6鰊=gN-Bބϸ|G|;V wkhj8bL=}.u\o.PØ~D_b џhĎbX+֌5&vkڰaXTD@,}WcR)DH`bYÚ-¾5GF`aq,p;q/~{(qXk̕% <ˑltL|?%ל$`[3mm2g*¸]ub(L.cpezooʓl(wTK yɡ6OA`.d@l`;h,p <]=FP:h#b8!D H"1R,CJRى "'H+҉C~ P j BC(t6frt ZVz,zv/! `r,0' dL-Š2;5xO8L~@<gY"|5^ Ŀ D#e= %' xb*qq5q+xI!H$5ɍFbrHE-Ӥ^G9mLL~S2e *ȺȆrdˮ-${MWvH6"ȩr!C[999]9gr|%rr.u}(QL)>Y1e e/ -J5zR959cGfI qhizu+yYyy/9eG(**()T*P0HWV SP\_UOdQZKR}l2nz2QH9H9UDr򠊒JJJI.0d1kG'iNĝjҡI'}PU-VSY槖^A:n>C}6 'NfO.|d} TT#Bc.6!M-MsZ -OTZ|ڧ_0U^tf90l03R5 275zhL5026iB4q2I3jaڛL+Mff|fsgsy EEE%2Բв) SO4囕UnJօMolLm667mmm_ۙqݵO_abApȡQ1ѱ񎓲SjgoΟ\\r\jߵoTS{tXn;ݺܙ;ܻg_7طO/گﱿ`}3w4A5A χPB"C*BBӂmpt0!QQxVo33gTxaQq)97r(卑Q-11bjb>ƖvM[w5^=ߘ@JIؓ04o榙gͺ=hv9s眜+?5h"!16qV5T4aofxr6rnRd )<^oïN Lݞ!-,moHzlz]LFb Mp>S+3/Sh&,vedmd#ٳs%Ml,Iܝ[q^̼yyW|{AKN҂^ w.B%-jYx%K-%/M[{Uaie˚k._秀jhE;+\Wl_l_ej˪oŜ+%V%e%_VW_G$i_v::=+U,/0mCF6ZfW}3yxsWyhy-|UܪҨZUa+gmm^;vWV"lwK8RG}Oɞ{{E;_XS_cZV\`ցYYǨ+9 5GBu:zH^CWc|c-MMmoNsIkOO-?5r:ᙁ)g{Z<8w/\|K^N_vzӕWێnvk;;:vq oݼzkѷޙu.n߽{~!a#Ge5W_u]]'}۞D>yy4Ϩʞk?kx1EKၢ?ze؟ y۽޵ =~~CG>9}9y_H_ʿ|mHȈ%bIhr2o¼%: Fs#iAF9)IZ @Be))Gyvd[Q[>W֑0p&k4'"I}su`c_bKGD pHYs%%IR$tIME "F} IDATxw|Uי圣^PBtfcLsqK&L>ofNޙ$ν$3d\'3$77͹II`;vl\6`z3tI svYG![8u>{o=kg7]##ŐC ܅B|X{6-rS6Jiнн>Q Gi>۾"h>g+)JV0z!26/M·]3u7_i57Ns<'1#&/h:|GZ;wBЎ}o=ͬSI,VtMGjqRO`oUߐ^W\ ƤsJS5,3}ǷL%mr>Ph{yTWen& 0&[y^8̧lϜ.-oQ@w}y,? \s9dz( } qMGl ^ުf<|W0jvo'[_;:xe(:]g_Y>x%?9bHL [U u' >fu~RX;)Y[Qy޿Daç8>i)xHFёX{;`E0 og0yl_ՕZ;;hugsї|:쭡kheLV)& /?84Hc_0ˋJE"dgtePGuHHͤ8'siomxY|;ЫBtM hjz0p5eK#iGMjOVq6NĉFJɅNk\Ӳ(JBGS[WU>``z}v0ix>: exz>qb9Ǹt=ɶDŏKpBþ5W=Chxɧit?"pRS`߻セs2&䱅X*z R1/sRqu4dk d4,|_"E[4kM[]2xg*^UѹOcKg(4jVlMZZݻhD"nl>ʊ2tً|ֿ+4H_r߃c^Q:[W3{ˌyMټ%}dlYǷ>ZN,9cGo΍|=W~a~K$Vgygѷw>b>o1kͷr 1Oiԍ^exC4^Qʠ&>~9i(λ(9++if#QN k6fiNKe jR2 'Cﰫ4N4pR8GJa1*]޼_n=2$蜹7RHcI^q7HJNaFqXnrlںMX?PB*7MIcG{^k^HmDq[:6A,r|*x=f0U% !O↽ܷt6soH>k61kRf4;~KG%ihz †b+tÄOZA7|:#a^Dž=kgTdEX0yt_;{wT} gocyaw} ;DwM;=&lܾДMO`BAgj6l+ WxwUmҹ8?ڪqs?~";jvB"ܽVrt:Zs$Z`Ri;xp TS˂sy'/c^U󘒗ʭexa-&N$ݷ:$a \r_jB\sc<nv>zWomxc^vvw>p⥧B}>؎a1#PZp3#Jcmn>6T/F+$ K_dgwCdţ-TԜ28S[K`jnZƄIulx[ݸnaxO ~Vvj+QL|Č1,1Z{@RZ":LhFģ"x 6Eb׾U)ѻ,[>ݭnO.d΂9i:- ӧ&j0^?\ hXGt>]mͼn3(%]{Fgj\Apf=s|$ _Z[Cgay_#LsGr&d耸VdyLҲ|V71"{:`˽L׿3}/ E/G-q($ؽ©7@gF&F0|8\~.bߏuB:MeTa7L 1ZZ;lOẑT ?f7tx({=}5J%%1=ix}3hVCދlotܝ䕍[̹i&mIbwt^LǤ85+\1|kӊ[g?34E[)uuhfLC28:nW- dNcl+@CBB'ZGfF93+w`jAxx#˦B^AC|y$"9ڹ,MvRFSkP F@{{=UaYiSy)(ZwPS~^,3[7־Ӄ/ÆEQ.&qܱh}'N|ĸ]l#71ol^4#OqzwŅsB\Dq*7rۇp#Ĝ #iin#G(di5T6lxp^;M2sΊ ]$lws*Y08qyV)Jjm9Pf;th?m nE\6O{ aN5;%%1oS{ջcnA7Dė?s'\n,+& q۵>Γ㟿| <`& q<8k7=r#4*gͦHgΤZ:c1vcͷ2|F Dͮ'h|Wc jډ 85bq6 mIP Hȶ.q +v~:,"YGsy+ȏ;soabR6F}̚@uߣT Xp\>qRf/ Pb16M"7,M( kD>KK?%?6O^ fxE5 >Ni~WH-ƲVSs+V`s$e erظlx<~ ;b-7K X&1{R!-OʷH4iXG/mR иaɽTДMO;(Ll?..Ԓ__12~W4"Q:єHщ|7~xGs}h$2MkN4QBh40hB c+suxHWeiAmU5"z= wLDW8P4\٦woe2qT)kAF/sIHFAz3gfBfOs\F#9p ]p$f KO *$g,K.H#-Wж%kE_T,cM/۱&2 ؅r˽+ey5!u.~t\SBzȦrl+&DL] C!`!J4Ӆx?9B!]!#/n!>B^݃97L^Oq4;O>F\әZ4)#)W"!ܯY,ԯ~[xK)U/<ǔ[n';"`tdx|oyLiGL<]_} D*5{7bP<\ᥔcM|ϳD ϭ EIwJ!![&+oTKʛ06~鰂et[)4v#2pK !$ZҭTvv.s[u ^CE'$F7 PG=@54wxhee6!+zP*JaԻL!ExMԺ2J14 c&L7]32f1}d!/%/X꽏DHO'6hm)*Le(]Nמӯq"$g΅0.::'M*WA6=YوBHp&OF^_{) 6@~P;~V*7e'9=Ѐ_wZ襥ؽKNC3{dY)}≳xlLP0;Z͊m=3W !K(䫟\+î2s:ָҚHI7pG0@sm%=^wk;.1<^0;fq{Nϟ_V:XFj#{q쨍%~uO/_ž`*R",-tAr5 !$_-ߏ>uRVZ^&~fORpztx({=;tYCU1D -?]/Q|9c WTSkP F@{z`4'<\; `NI!-w*c݋[+l<^ϩ8ͨ\%1gHZ ъ w .HTI|3wƲb:Q =6O{ aN5;%%1oS{ջ偪BZfOLB#_ZBϸq%gv73,̂bfMͅ K# ?6Qw!~*IXVBj7topj??ye'(n;qY'8yZ&!Đ1\\ܲz5dlZp1:R]]Lgw , l>Oy] c'Wwۛ񆃽Z\Ÿ؆'6E˔VB25-除"?~[|{0o3I,*ͻ{d%őS WJBHpZ4ehܮL*oeͱ&d{!ćJ||ĴlSF2kh׶Ƞ$!ri?B|IZ7C/BH8C ܅B| ʹyԕq9p 0LXrܯ"`t9yym?QxqRM;i"vڏZ#\CaHe#_ Xp.E׊HbyK5(QBZ V܊q%:eV8~òBA& B bp+]spIMFUolE/C0 YGM!gh /L`HPZ:quR T 9E#ўC#Օ+~uإ{HKv5@0hNb(Dr7!9[D%g5XM(eZSE#vqI@hݶ7ae?{Gx,;Ph`zGo.&>#ُMҰꅝ;K B#'WRÙtD|Ekеx?_ rIF?^M n;2e36T0i>Ji,m^s͈|>9y͈ȝ\BqĵYB9cY7wcZ{ަ|Z#Y}j3(\</b2fN)iث)Y%%@+79,ڧ&sd;״Ut`U`%e05\{qyxP sBqisl{n} 1yV쪻i?u5K0Rs/rvv>& (joATj7?{طMִԟJ2rof 7舃 7@ x b~6TT~@0&ܳO:g}ljMp,-m܅9Bop(4\h`h XIX;]Fnq3o[ᶶDncVa,K3jF1Ǐ;)Е&A/5b`1/.Q8w"/uqA ;.eXB!Wb x舐V<  +ip/ӏ[ cGb*֪Ӵv<V<§kp> K0S.ok7뢲;M0.r}"Ntap A:rZBXZF!w!܅BHpB!]!$ !!gyj"^xϸRƏN^]fxA1ӊFu4]7{?8W38wOqߢ9rL\B1(ԢQd+x8RB LK&1d]Q{4E.W@8N9Ե}\GqeBnrtJb`rQ!y-ܻ'8.sKY'@Y ߥx,[:F1 ηVb[eV&--]BvjBE;!/݂Y{\ߝ3o?L}|S;7osY>#|-wG)FL.%v)G'E? CwnvZ;|ο=S%fGG]a^xc=/n9;byZW6naOy-Ho;_v>wZk:a]޹KKɭrxdwPUDX'2!_aB|f3c)+6ؾʞx8ZXWDYu!0T?slj`h">pLDÆE=.&qܱh-Y !~E u5hʥ׶yz&| p!.)y˿M .HTI|3wƲbMwµhL)VR+n98f fd3gRm-BAriۄvOP\̩I\0S+;A̞wޱ"=i~WH-ƲVSG4n&qcln:k,P,qʘ='yr[ćvUBeQtg(E\0B&&B\_Cgl'ZuW\p}^-y b\plCpg߻L&ʣ]!{F&:B B!$ !.BB B1$GJEXS;piyn'/ǧp/'\h$g[^LĉV&mo~Um'IL|9"m4vzf0/?xV :e$30MB{o ou\SclϮFZKo']vB1 O^fesN \c$bA#7+ ѕPk1~ǸIIan;8u;!xwI7i2Ph_cX&GnoWe we Qu|dmZ\8u7>ObA>x[Eȶ2u&SΎ icN!>:;Nnf:?$g\̫x ieB "Xfq#i?É0RM ٽ%BHpB^<BHpB!]!w!܅BHpB MAj3Mr6И~(Le(]Nמ+$eQ=?AJBHplq[\Κ}=i7x&y+/?ڃP|.ى]eWnS;~V*7e'9=Ѐ_wt{(OS%V<3BHp᷷'3br)UI+DNBBR{Z [b|Av {3y$`hj#'1#r:g_50)n`J^?p{MqhߍßbBnSa/f|&-#=7%ޟgs%)NgDCpl_%fO ذqN@S6= ٗ Yrqi(; C]U͙ؖc@b..)CuRi;xp TS˂sy'/*!ݰCs 2p Kq@U;\y(-re\6n?O A "ͼ~r3p=ͱ]{B+?Dgbd1ܒB Ǵț2$ WVB.M/?N*[;iP`&h`lBL/~оƴr HJxdetn rFM  %J:\v C@pS!y,8/vRf҄M+eG"-2la:k>tZR"CfEBV xGɛ9AQAFq8- /i!}'TU4= d}vO¨M!;AeFs#<`A.fk>ɼs£jO[ 4Y1ƟJEri$F}xq0]X,J$Ar2W=f+|CFcU"I@;2\[6鰊=gN-Bބϸ|G|;V wkhj8bL=}.u\o.PØ~D_b џhĎbX+֌5&vkڰaXTD@,}WcR)DH`bYÚ-¾5GF`aq,p;q/~{(qXk̕% <ˑltL|?%ל$`[3mm2g*¸]ub(L.cpezooʓl(wTK yɡ6OA`.d@l`;h,p <]=FP:h#b8!D H"1R,CJRى "'H+҉C~ P j BC(t6frt ZVz,zv/! `r,0' dL-Š2;5xO8L~@<gY"|5^ Ŀ D#e= %' xb*qq5q+xI!H$5ɍFbrHE-Ӥ^G9mLL~S2e *ȺȆrdˮ-${MWvH6"ȩr!C[999]9gr|%rr.u}(QL)>Y1e e/ -J5zR959cGfI qhizu+yYyy/9eG(**()T*P0HWV SP\_UOdQZKR}l2nz2QH9H9UDr򠊒JJJI.0d1kG'iNĝjҡI'}PU-VSY槖^A:n>C}6 'NfO.|d} TT#Bc.6!M-MsZ -OTZ|ڧ_0U^tf90l03R5 275zhL5026iB4q2I3jaڛL+Mff|fsgsy EEE%2Բв) SO4囕UnJօMolLm667mmm_ۙqݵO_abApȡQ1ѱ񎓲SjgoΟ\\r\jߵoTS{tXn;ݺܙ;ܻg_7طO/گﱿ`}3w4A5A χPB"C*BBӂmpt0!QQxVo33gTxaQq)97r(卑Q-11bjb>ƖvM[w5^=ߘ@JIؓ04o榙gͺ=hv9s眜+?5h"!16qV5T4aofxr6rnRd )<^oïN Lݞ!-,moHzlz]LFb Mp>S+3/Sh&,vedmd#ٳs%Ml,Iܝ[q^̼yyW|{AKN҂^ w.B%-jYx%K-%/M[{Uaie˚k._秀jhE;+\Wl_l_ej˪oŜ+%V%e%_VW_G$i_v::=+U,/0mCF6ZfW}3yxsWyhy-|UܪҨZUa+gmm^;vWV"lwK8RG}Oɞ{{E;_XS_cZV\`ցYYǨ+9 5GBu:zH^CWc|c-MMmoNsIkOO-?5r:ᙁ)g{Z<8w/\|K^N_vzӕWێnvk;;:vq oݼzkѷޙu.n߽{~!a#Ge5W_u]]'}۞D>yy4Ϩʞk?kx1EKၢ?ze؟ y۽޵ =~~CG>9}9y_H_ʿ|mHȈ%bIhr2o¼%: Fs#iAF9)IZ @Be))Gyvd[Q[>W֑0p&k4'"I}su`c_bKGD pHYs%%IR$tIME94dBIDATx\y|Uյ^ks=w 7$\TD Z;(ZѶVm{N֩Okm֡>QU[2!@ d{&$!M`l!wݻ:Zk= a+ gBZCi" %]!^)z=Z4D DC%6M~Ltb{fC7NJ9ފ F7Qѣ["lJV85=2C䜹gƚ(TWͭӘbfHJ">Wd3we.#RĆ\}@ᦤ~!7eQ"PaUC쫯?sHo[PNG1y/8)o:Rk;[o AZo[ԊPZ qjJ{0!pDZÕEUgfħӚ9Ju49hyžI1.k-~/Ɵ~}UMcG2o$d Q f<>"7&4) U2"%pK N05MO}eP(`r.eywTĪ;ϥ[ e7>4=GY_:ШG2Q':ĸvqiՆBZUUmrIT::v[!MNes 4e~cq?z"Cڧ=Aw2$R)p Anf.mQS)F6}Y !@c\k_](7jqAppCWޠVfFDDdc;Wt=$"T z^]%8%%8yC^/^n+qku]#p"+@lA>ko.LPGHސ+m 2\iy&2%WUi[Ppƣ!s:26< e<͎XC関ZtjJOJ.(c(fRג$Q#=R#==Ac͏-dB)l"P#-8y4p >&% m5?.w4][mBdZgnܵ/9w_1Ӵ, ~i%nmcV{Ej7N?㆙ō ęSf]3"&t_|@j~8?/uؓ?@GW#qjuz'.#QŎ ,cY,هxHv^pÿ{=W &y?6NIƅ 2FP#+$Hyޅt˥8%]{~$%O,q>~Ɩ,r;tiHJ5˞~մ/\ѻIp,G]K?q91SOzfL]7Z+KzBX33f_K® Iq;[fO<;g@LAY8ĢOq/H5[fG-|FuˆoϿ1O^ %#xo4*M}-"!xԌ?DO}]2bD jWրDl?h³ϗR0)m=s 'It_jUgO,۲BaD K$i󯺰. >x{GPP}3&l(l^"Ob?{f?u.|O9c>!2u(ڱ2;;eCVy7u5GϹ8gvc 8]6O8V3n'ύɧ<]6uL۩vd7`JXas<_ʞ3Kw_`4X/~B7yΨmzQH\W3_\ uHwE:>rh]2Ւީ^[Z";E+uk'͛o:ޭPb~pR{lzyP-\:zҮ2](\Yzb+fH(VK/{O4-18e5վN,`6h["~YuBgxP'd嵺 k$hM'M (fEbimݡGNik>a2Mîٱ\ Ipq[ط&BO8vPIyꉏ0D@mIݒD^2U(~PaIبxegzHbm_HK\>86KJKQJ-?:u] jyNVWD4_8.J+zwHJwg}aHNMW R+g!CY)_.*|lxŞ~dh|n-AJP Tdpۢ[ZiS$Im$h{գ;YE93{ء^2fT^Xy@RWQ/)~ :д]tZ!4ŴvVNNH?%)K|Y͚y8txӴkwm}^yTQYRNwū/QJRp)!ꀬt_ Z9vx %l NqF(]E5?{r "XKI7&u'"g ͘)7Pufq5 W^͹̘ZZ [ )[,p٪qSºc ;b8!Ă>d´xMoi#Z,[]fϘu!C nw^x:n*ʫ "/qjJ{l%;w j$Ms;֥phdm VEł R:+tD?уNa sƪ!mgۘDFSQiC_A@&#ʏ8tLUm.0]8a$q0/zF$[O O8t7^:mxˆ.~7e;|'H]èbR$]F/]ȅ)-MOdF IWn9A[d>yէ{kZ w\Zqi}' yD=lSLsu9zn9$b67x|V#8{N1kP[%_H)3ra` h^\gkrF#A8Ei D=Tj ocu눘Hv˓iAClM {cݎ,_U1ҡI_qsy;ni٣YGȨx0`PU{vSۧW'(Z ^1 $7njfX4m䄩L>u@@}ڪ S ue.pvŰȞ^jqhڞ/e:dy)BcPV V%3D4_X[nI?-ni\[I[IֶYt(L1^VN¨?_{ڝ@$j㌣8{J-^ *`E]n-iyc e::2DJ|Z[0>DI" Ui.'?B8;.0Δ#6:I@}mӘ !HMɹ&n&XE">֚G6֑7? mBR7''wtXEia)*]qfmAC v}<Gcꐫl=Vow3冃eL *Axk.T< /XgT5)AwS5n5j6jz3cb)qmol 9/KxXύ>*qFFs5NKFO} - D/_]P<=kxV/xT^3kR!譀.gLмܾ:K]Gx"^Pt8rSǚ M8VטNDF ;ZE%Aпq!%xTPzO`: NL@Sm)MWW}5 ސZ!)s:ЎE+IENDB`Inquirer.js-3.3.0/assets/screenshots/raw-list.png000066400000000000000000000351601315775736500220700ustar00rootroot00000000000000PNG  IHDR|E pHYs%%IR$:"IDATx}\O-*B .*X *I(?ȬPҺzMnxkYUS32>  ("* + l3<(WB!2i"Ѵ0*F bտzU%y1qjZZ)wƓtb׆7ix8ƴ~ڦݧ)ia=؟Z}5JzaKvfuuyeʮޤtҌG hwre&B^?mm*צ?PD0){j_EEQ-/NBnkia`wa]M&;~րICɖqjMeiq4V˜ qcE\/rc^:yuNMgmʬcZ 93VD{@ݎ迾4N*5++mG*0gEdVvG1 oZrr,61߰cey-Pꄖj4j؀mdgӐ\sHJaT*J]W/0kVz@j\_[, d*hn٨߲gWKCm h3c%CD"`'V1HN*N_tWzpP̝KCVpx[3O;Qжc7cМyA:x|>SFnfݏWؒ v+ m0?1 GC}+sH"*aR-D x)ШU -s֖U]ls^Sɠ9-+m F~vnJzJ `n{@_*g<5]Mpcrѱll::jW .iA bƏqdV^Ӫt!vo Hwue&d٦\)5~ӟ~ |离&270!:F=YtdzGl|WVu;Nfǡe^8Y6Qnz/dmq;IKO.LPrWΉ-1Luڱ7Osx-T6jǡS'j堲3vKNST.ڴH<YU,y~nl؍?2DD3BCy˟:q?.+y ~-I|͋=@k7EqJYU4|Hyl'ǶB<:|jhH1,0rsmKo+2hڔ7#f=:~vPf'A?/ZFÎd,"Jc"wj&3ww8=-:5uuDH3]DbTrOD?1qCi][FkV vp/xz}<ϯ w f69l:\c^i BX]:j`Qs#Uc;- -xНu >ѳBضin <Sf}2;V%بYY3/p$ą[gC-}k/4\v9!E﷘˗I|/cosƾNJ”A|<|ܾғ+ \f /  _2u?^w|h{*my.ZŸv,ӿ}ڊ=mͧ6C;PMVws p =Yӽ=hCGRs]^G6Q;8q|A 0A}mj;7hܐP(LW\, ,0QStReiaPsj6])PFfRZAǎݐĜ4nW}tx.@2:ic+@LQ_3/-=}\jR+JS4n|G,̹ZuLVi)ɹˮ#aсV&&27DX킕SҠS&CYu,:Hj~I/FuRB1Nm@#9-~ e;O5 5 !>IJB!o B( B( !>B! B( B(cfW_JqܫG_/.pbuY[)B F/z^œPǙc Yq3AEg%K-FmJ5)nШUUwJneYit}MӧDŽ9K,K!z8=?祗}X48.,_)FjamccɅX끎N#|G4zkP%)8v=a bp\oUpդT?%gdzvKvn\;a){ O[?L ܟK1TWZYhʲ~9ʶB:Câ5`}[I#7b8C__LeB]xڿޛ5iG|.h ۯ'Pv%ҙzu)睸RѶd 7Dtt7LCiE짒-lR C%W/ */xm _]p)`Ǐ^/`a Aa/~j QWӾ4 Cnjs7]]3]yfs_+@K/2q#WpF{?r4 27m !txٗݥޣZɤIG/vf)S?xy/6iO _|nn[,+;Qhpf8Yo|?)C;5}pm8Qe@GyԖ@e[B!WvtKC;sŖ΃0Cr3uNoȮe 8=̙nh`-G/FuJ),}f1g^4շ.=oS~~hݽ};wTh=J!twԲkn\xs|R[t"D'O3Si@b+oq!k埾h-0tʗGsrl9A*~nǯ̠e£J!3n668xSBgױϿFeӔ`c͌FP0bOam׎/wh8)6нpy>\ږ;PV%zgIP[,:|;H#;fkJرf>aa&<5AC=߆}ZwRvBEE.C-Jp_?fʭK_ʪB:[o J(zeI/ο >z{֡grscL3AʻyxBHADQ.;s woeޕ7ywh몫-;ᠪZ5*^͎7?kfTSǔό2D![~:m}zQqi`%-4w3xITߺ?ՙ;7eO#<0LzO[E\"eMB!]V w} _z lAu[~mAdFA 3ܽxؕoȼ~uQ$"h`{4 yal>̂.ܱLa/8ֲtg}9LKB%g xL=I(o;[]#R YzuO8KSh#S`n)0 1ŝY-W2Em*t7 .\7xg)>z0dgpѴF-a  Ə3X-?,F[7jXOϖK[})LM']4OBuz(p7ve'ɽS%Z E^b:ubV/9JKz>sGOt?֑u(df4 ?4] Biz@~,u-b42֑\o{-ވy&o~:%Oz{mV.8uz"?Twe7B꛽VQ%OH :uBH}IZߦeTޗ!=~Ϻ{⇤zq[/*zC6$BЫ*9KjT(BѡR]!?!ޤ~;B!EA!GQ@!QB!}BHEA!GQ@!Q=O_,;ZZU]+Ov4? Uoe99Bi _4ɎџQɏm͞'sy D!iRim4'UoNF ΅쪤 B!ϫ)4.XyePV_l`go|k}Bv7n7ٖ/3Y9Bf:~FUˉ#j-oOW4~u~J8y GW$s˔?!\'O_9tDqKBϾ`s񑫷,0/wXU'܏dA!OZkHvKc}bmg;e5qvP)sBs3FdUVǧؔ{iL}hj/ \- *^:kp$:/4TdƭS D/peoZrr,612!bD8NY%ϴ:_9̍L%84+v%CD"H.k2cH$rpw)D.}&/a"<;ɫq[F!ĸM3sk^̠®G?p^qIKgxu M씆Z9Kg1 \w[Sv#bL#p ji]c旝ckMvtV+`Mʶ:oG,X0( !#&nXɼ"su +*b6_2uEϒ; dmY=JB *pæY"hV$m(Tg@u;B"60gAB `do)K[i^̓͘ö TI^'QsffUBzl"(\iy ,1da/ǎ+o1 ;d-fSP#b+YG-r|eE4̪Q@B -2̛@q`UG0oʹ/ G g>!g$>a j m+7DlGE B!Ƥg XSG7NZ(,<|Ѻ#oFKC1@!~O0tULICف5[)!KfҙvV[E͓}RITd3>#QR=`> R>ޝ B!ĘT@퍔'ZiͲ'/vɧ֔i-NGIl@06jn|y{%su uͭ+!b\zu@}qjZ@Mv3Q~AܤoL:iTWFH!blxH{ɮ#.g_ OD/]Lq(SZ|(w>N|Mb#[ɨ9!e\n Q* Wd~}V꠩SPB!؃qĢQce'֮EwYB!$TBӔF!}қ9{=)B!D/hPSSReBW -%t'қ."[Y?SzEavRZ9Nꈆ7\~WKG?=x%PW}Gm:<v"o l4CqJIƏq_( ;'fO8?~snLYQN~qJ)p%:aB?QO$3x}j!ޠJT(κtRfn^ɽM %dcUPy~ϊ{~p[3B}ے;bf?:S{Ԙ"NġLE!wY[iyįϲu'olIk[y lηjփ~>Nfg'P箌ͣE!X'/2E\{GזJYrF;m51Pf% %@B!}Q}E0p ]<+6%^.cFtx6'?ن%[5s-W)nݿmGrA[6ph~ 0ǝm>v#(2:c9̍Lvli'f@qTcA҇`Pȼ>_إ?/D..""% h#7tgB=Y 4V4\z;_b9gf]=yǽPʌ3Y)0⭭=\>Dg(LrvNկjyVV~c݅V'Bb= +6k]B㖔SxM3@Fx9nn]9 1aOؒ ]\5Iq9}i mBM0ſ~x>">͸%!H^Nz zu@MJ4Ɔ-ΰ~̢YEl@{*j$o@{]㾃ׯb"_Qp ">ql`HFBmLH;ILB!]'K-HdMf p}GUQ^Ƕ `?v“Mʏ\2p_kTzxç&?%d7^Þ⚿iϔڞ-@!t5#i O='US6櫕 e T*ʙBQF?^Kvo#3["/2[Iuk^|!ZkHд`es;ygFADJow>%W"B!=ƸJ ]af tW\6tOAӢ-".G58څ(+7<`[8pc6kP0)BA=X [,֨+zCAqD ^yT[Ϗ?džnsZ_Z̼8ȭF!V`X'ݲ<\75PREAf[u g B!ql+>[NO J+5^ O}'{_> OH+nR ވuwRX; {շǼNV#qi*/(XL):?EÃMͽ?䥜0v`!+w췛O[.wOV>*`+ߙ?gmR$zN 7D2[^Uቸ-;y\mik788AZ`eB6;yp\ދ[2닕͓\;wrkmA±o=Z#@_xn_G [%!3>TY'lWkKg-s>5{rT>C5I[WٍY.;hN\JyTnY*g#̍`_=d{r^Uvׄ#2ʘBilaў.V&&hxp;ʩCKZ]py ue:eG 7AC{ׯNNo} T`YaYigl58k`?S+KKϫB! B( Bo"(_ͽ+W9!BEϗ>'V;!Mz<!j>B!ݣI ˨tJ!AуG0B![l>|11SI亿f.fuջ1Fr;[[F 81Jq+'yƃhLI[OOIXf o~\ٿny%qPdtxX(`֪Q+O}~wJ-[XeMu;+8ϾШwXvTog\=7DT >Q~$ҍz4MY;ARW87E(Piݽ\0荿YdV ;l l%<턃 ]E"`2+hO% >HԊp>@ؒ V6x{t#톸tḺ:߾鞍 /af }"\e # !t|09+r=[Č乎m+',Eʃ/xb_vk值a^κ͸%!H^Nž Tg.ۜU'F ]Ev)#!s%nl}u4߸Pdc"gz @$6Z*vfQ3۩Q] q೶bRwlgvNR61el7n1  !t+ 7.3N_* Iq8u[uL J#q[#rpdz %wA#y:Kob\""M:k{ԁkkvl⭋v}x㪬VS[m^yIʅBzDOÙ'hMQy.OJ_W>y%*pio[5K%!Jy5KRo^K/}`!`4rt/yQm?A%mO!虊\3`h[6w f69s.*m?ŀF jA'P(jS^!'#AA/|,yH* 77ITeo Y㗗S uin*tjz%t(Y/(y3?װ)~HqМϷo۽{K"A!txhjbigs=}m8۾Z٠`)WSSSe9e55vCFMf+UgQZ qWӗ_dj%L;B)g\;B!+\hR^IENDB`Inquirer.js-3.3.0/assets/screenshots/rawlist-prompt.png000066400000000000000000000356021315775736500233330ustar00rootroot00000000000000PNG  IHDRwsc&B\ iCCPICC ProfileHǭwXS$PzGzދt@B !DĆ.*TD@VE" ʺX&}77s̙3gΝ;h,0U C#f'0IK;[ ߊ" fg@>r HJxdetn rFM  %J:\v C@pS!y,8/vRf҄M+eG"-2la:k>tZR"CfEBV xGɛ9AQAFq8- /i!}'TU4= d}vO¨M!;AeFs#<`A.fk>ɼs£jO[ 4Y1ƟJEri$F}xq0]X,J$Ar2W=f+|CFcU"I@;2\[6鰊=gN-Bބϸ|G|;V wkhj8bL=}.u\o.PØ~D_b џhĎbX+֌5&vkڰaXTD@,}WcR)DH`bYÚ-¾5GF`aq,p;q/~{(qXk̕% <ˑltL|?%ל$`[3mm2g*¸]ub(L.cpezooʓl(wTK yɡ6OA`.d@l`;h,p <]=FP:h#b8!D H"1R,CJRى "'H+҉C~ P j BC(t6frt ZVz,zv/! `r,0' dL-Š2;5xO8L~@<gY"|5^ Ŀ D#e= %' xb*qq5q+xI!H$5ɍFbrHE-Ӥ^G9mLL~S2e *ȺȆrdˮ-${MWvH6"ȩr!C[999]9gr|%rr.u}(QL)>Y1e e/ -J5zR959cGfI qhizu+yYyy/9eG(**()T*P0HWV SP\_UOdQZKR}l2nz2QH9H9UDr򠊒JJJI.0d1kG'iNĝjҡI'}PU-VSY槖^A:n>C}6 'NfO.|d} TT#Bc.6!M-MsZ -OTZ|ڧ_0U^tf90l03R5 275zhL5026iB4q2I3jaڛL+Mff|fsgsy EEE%2Բв) SO4囕UnJօMolLm667mmm_ۙqݵO_abApȡQ1ѱ񎓲SjgoΟ\\r\jߵoTS{tXn;ݺܙ;ܻg_7طO/گﱿ`}3w4A5A χPB"C*BBӂmpt0!QQxVo33gTxaQq)97r(卑Q-11bjb>ƖvM[w5^=ߘ@JIؓ04o榙gͺ=hv9s眜+?5h"!16qV5T4aofxr6rnRd )<^oïN Lݞ!-,moHzlz]LFb Mp>S+3/Sh&,vedmd#ٳs%Ml,Iܝ[q^̼yyW|{AKN҂^ w.B%-jYx%K-%/M[{Uaie˚k._秀jhE;+\Wl_l_ej˪oŜ+%V%e%_VW_G$i_v::=+U,/0mCF6ZfW}3yxsWyhy-|UܪҨZUa+gmm^;vWV"lwK8RG}Oɞ{{E;_XS_cZV\`ցYYǨ+9 5GBu:zH^CWc|c-MMmoNsIkOO-?5r:ᙁ)g{Z<8w/\|K^N_vzӕWێnvk;;:vq oݼzkѷޙu.n߽{~!a#Ge5W_u]]'}۞D>yy4Ϩʞk?kx1EKၢ?ze؟ y۽޵ =~~CG>9}9y_H_ʿ|mHȈ%bIhr2o¼%: Fs#iAF9)IZ @Be))Gyvd[Q[>W֑0p&k4'"I}su`c_bKGD pHYs%%IR$tIME "F} IDATxw|י=wyG]! 5$Tm0q\'NyߝLLޙffv2M6&ē2Wܒ`\M1݈"zQETPosOH 5od˳kYC7xiŸ8.PWy}5̓:m0wŊ+hnǺLw7;?" By9pqub Ź`e{-``N䋫`J??t ń1t=,6[߿w_$gBVwu:)owX|OKsbI /$S3Y #;zX^NBh~R Iq]*./k4^PAf|Mܳ/r3(NvFũ^EYY04p>ʞL󁓠igMg|Cs G^+.[j?yǁ  $%B^Z SH0ȏjbe8; &ƒas?]  t1t%kjQc^ZƉ PEFY- u05 \acM,܌4¼7􈲙=bnD؂C׮%>sj?eM3ȋOh~w3=g=|5LǑX.\>xko=`?>Bo!wtbKwR[K\V̠hv򃱞_|a e%Oo1(&LH`bt`hM@1볛k]8QK4MPekwW.";1+%ްn0}chg%wJ~YBD&/r&JId8Ɠ|hv ^{Ǎ^af NV~J |N`1zsl:2Ce(s_/8ѣ>8c!ӿ~-g͛&zg3<%}7gbx(H\˟Ƴf\ߵ6T+[ΈJ!_?z+8} ۘ?E|./$;>s Ոbfv}罤> O|>p\+=,L%0#I-w >6;nxT5= ~f~RJ,!*3Dzsv׉OζʻV൰,5p{:6PɻGZb,{}]c:n|a&<[8~3~ w6o6ɉiOđWPF[P?F~ϋ{Ld$&7G|?ѤO{9vo'f2+3aw6)P@{@]|n]:w^\`ݎeÁM[2~>)1! tN?0o〩yQv˝W@6'oOc]쇗rt{U68=8XVJG)DD\1SG \Ac[˧kgW^Ɛ'__#OW_SEi=“p(=Kx!#}twO }X HJfQ>({;2ز=VJqB-x?H &[J {)lxdJR#whEH1ڝEDE%0pʷMbr]+{$`lCD/ZIAQ#[aj8wKazJ("w2Fi:Ox\K+ DLW˱^B.*ώ{Yp:!m6lw{o&[h vesh&ȣNp-cD28w=ۼ]0u) )H/~"kZ \0`sLyٙZ;RpWrK]$S-bQNMUp71;qSHl<_GK s4|'NFq:i5]Axllpk\Ľsr~^X2ok9U3>[%3!:8륦z_]:ǀ󎒎&ILc@:DGO K GP`I,+L9A21"'8/,tVv$]h.Z\^ZkjS>(ҕ#q].W~|,]‚n=>Bp:Ys85s|<ᾥ3q4m5utO"OKützcҖ ’> &ك749 rn!"Ab΃X%Uݍ+<,SFuk'1<(鬩վp*5,,ɦ6ti; ۾N2 n?u5)%< ILڭ-Ο7HfmLh]LJ1钖WSIyqH۪ dz|ꔬ8R ˟B^1t˖`q~G߹M⹇I\[`ux=xMb/vZʪZă+Wf Ll{:yϬۆ-*anQ&]gj[ pO^ތaħg30ֺ ~ !9=5[5 |Yܽx.:S4zcu|>j9ݽԄp+~w؞w$|- "YX2ަ:~~d0OY dE͝Jv|=ŏ*Ït|B^<;z)?xm~6M/.F.)-y`䎐EƇ̈́#˿drDṂ@t M2&,*P4]de5~a^T# D;Q :s:cm%%wDRG鷂/>m1)`j 59ȐtN/LҶ.ä -s7vS_^@ba[9 StR|Vq !;}piih)#9F;?ϗQe,_Kc' c1+_ aD5>?@Oo w4cLs6PVqm}r,s rio9Ù^]6]c͔wbu5s.CqCDzI%s]q͈_ݞɺ(;YSyUDzyOϲKJ +U%]1+m M0!! Wޭ0q.Sz."".5d&WTS^M5B(> TR1$ˌ _AYqq'LdT2&54ڨ8u ]cR|JJeXM*?یKAi2)72]a~Q(nLP(J B}HIxT8y) _v9 B1N>{$YK=a &05{3'[?uH;kh ]RB<ׇ?dQٿRFBqN`7$j1hߵ0q7m.Iy$d3_&e|~Lj-]G퐵V}MiH4JlsL[P(.:qp={;8Gn6zam }ϒzKa҈6ZhlRWߏBv1waBv&u/m# 3 q*X}sqt- BGәTE.g]j$fK$TxbT8tcX讃 *(,cxt .ɣ\hu4P0Mh|vYӇih Po&~"<ApS^go<̚_| ]l_\p]и)68a7"i\7Db36&L>kNkRQP; uسww!=&a*N<ڛGڈV͚碹}ϿEˤcrVȠgo#E6N r2~wIӗ.˖A_}%^##ol\e6ѷ7S?2BP\מ`5RG2B9]k4N_l\]Կ=~,۰S:w},|t Y%Ŝ5!؍UL,yVsOe`:Me--LV>o@$ea89ɪ*ψ'0'@3ø~{4Su\Ӹ=l? &HoB9)|q#ZM?HS 4jj1%f|~jJuU wDHV N!4A2ۥsehkn+IFʑaU'ӆ,6fځTдw []R<ɹgMwٻnv* M#KH4%FM3>0k&Э3 cq L[IC=1yf gh9::(UJBD.&hV *(4qu88Jg#%|a^nY5W\I1>UUx%v<M$ŏww'lL{{323l|y`MD&9wG9}M(Wutwvt.MnJK|~zt:NGjAB!e|R2FK_4!1z}sHqa ,N{b{HtӇnIo~Ƽ|Y0.z)?U?"/c)Z )%8g7־NWfrQ SV&0ClG6(Y>i%$N V: ŕG@i&@27  s2 DWxEC !Q5؂ih`xFDؕxwLzϵhc1!}"ްP4:*j铗^e`[-CS& B%GJEHMڜx9`4]|RjX=}X~?y..y( % t&;-{跴'4h+#Azh_"f%sQ!nG#eu*P(+ A B]P(J Bqe?{ćj}BP\ To( rOM"6:C47}շZ vmٗ\/=NGYeS(71ncģ_!?ɇ.-Zε&]LS/ΜFaf9iqR.~tY_g^t]~͞z Byco64*N*ς#xO`Vd*WkO)щ|Iϛmag6mgl쀟w ʰhiͣ޾Biv1wMg޽յx5Nn@ &-i iOã'}I$J޿*< 80ҽ}p L 2R)J ]P(Ctyښ}F!M$w2"uh\E$B+?{aC0흞5MzPgAK2RL8'‚BMcoqBeXR("c` 8Q헙#4܇4 Wv]_<!l:p+[{R̟*g7k%Ƅ<_Bw?Dzc<᏾Bř~lN$4(w^ChxB};?68o ;wm{ 3!GnAk~v 0k {Sm/_Z5WOG$ȯ]&HO]ma"CiBldE,I\ſwYIqM׵O'C)B̥CQd,bHSg% AP|V=G^~Rk`X8XD ]5~JcMlrA^ކ7u&6{jZBFԡ^tl-_:W -u<%ZZ:;RWvk<9E](2N:IɕsbWNOWiD*ip0P(>+.qy_|!6c& sN/l+aa!LY"rJFי*}1 鸠bX}B y`)kST4-VF: jQ sl85k[V0~,{H9*A6::85k?!cp[3hB z^c\͔d]ڼu6Tw]وu:LTLJtqu5}Kf7>-#)NF杭Fl5|& %Sqd09.\>xko={sCх~;N.Sg$&(ݲ+վ &wan\ҢucLޠ׸̥ޝTjߨ+29tn hx(H\˟Ƴf\ߵ6T_Rv'+gd[KSg0HLj_m4qŋ浪7iP(n@"kjŅLIm;.L G**cp2'tI۶@ok #Iyb7SV]ϾK[GXϲ+$aNc9:o*Щr~4bq~ (sM{7 %'iӸY]z%ިhLs) ^Buԗ4M!0<Rɔ8lGR~hw$ånamIϼLK07Hq~X^Hx,ͫЌB= etkK{Ʈ߱wp ,dբ"@p dc[8Vوwl¢bI E5NVV㿰A-p\x*/>)$.ysU6P(]Xf }jZ*={etٚvB=w&) ⊹>cG W T(V#ȆȎe B&rGT( % BPP(7!('4nP9L wIa~硛P}5x r2Eqn6XF~ABPM"{78g[:LϚ|q= nB^z*E[_ xJ:E)dGYö{ ~'YB^Z SH0\\'=bE)LK&ּ -܌4TEP|:\㰌$?7,ǫI-$:+Xs3Wu߾AxwyhE_>O{6}|)HƖI>C|O1oM̏> /փ+klG.Sg$&(ݲ+DE&/r&JId8Ɠ|G.s_/8ѣƭ ;6Ssq#[hhwP#?Ý͡l-˪fd% 6ѝPdN^jkf_Lr c@k4Md{Jפ4 gisHHbYa K01"~]7|,,n?jEBI]ddaGsBB'Qq(i۬~Q"{P-ݸÂ98hTvGirI NUT^NXW8>7Z3yËYvmImEHD n[[7{Sl ǡy|ΩP(nqmg'U'@Yy+SΟ ?7o\-͜ ZnދAE.@Y}ؽ.d DTPTP\G?J ( wBP(qW)GT( %7>"* RP(Jo]BTdBP(qW( wBPP( % B_T IENDB`Inquirer.js-3.3.0/examples/000077500000000000000000000000001315775736500155675ustar00rootroot00000000000000Inquirer.js-3.3.0/examples/bottom-bar.js000066400000000000000000000010571315775736500201760ustar00rootroot00000000000000var BottomBar = require('../lib/ui/bottom-bar'); var cmdify = require('cmdify'); var loader = [ '/ Installing', '| Installing', '\\ Installing', '- Installing' ]; var i = 4; var ui = new BottomBar({bottomBar: loader[i % 4]}); setInterval(function () { ui.updateBottomBar(loader[i++ % 4]); }, 300); var spawn = require('child_process').spawn; var cmd = spawn(cmdify('npm'), ['-g', 'install', 'inquirer'], {stdio: 'pipe'}); cmd.stdout.pipe(ui.log); cmd.on('close', function () { ui.updateBottomBar('Installation done!\n'); process.exit(); }); Inquirer.js-3.3.0/examples/checkbox.js000066400000000000000000000022571315775736500177210ustar00rootroot00000000000000/** * Checkbox list examples */ 'use strict'; var inquirer = require('..'); inquirer.prompt([ { type: 'checkbox', message: 'Select toppings', name: 'toppings', choices: [ new inquirer.Separator(' = The Meats = '), { name: 'Pepperoni' }, { name: 'Ham' }, { name: 'Ground Meat' }, { name: 'Bacon' }, new inquirer.Separator(' = The Cheeses = '), { name: 'Mozzarella', checked: true }, { name: 'Cheddar' }, { name: 'Parmesan' }, new inquirer.Separator(' = The usual ='), { name: 'Mushroom' }, { name: 'Tomato' }, new inquirer.Separator(' = The extras = '), { name: 'Pineapple' }, { name: 'Olives', disabled: 'out of stock' }, { name: 'Extra cheese' } ], validate: function (answer) { if (answer.length < 1) { return 'You must choose at least one topping.'; } return true; } } ]).then(function (answers) { console.log(JSON.stringify(answers, null, ' ')); }); Inquirer.js-3.3.0/examples/editor.js000066400000000000000000000007241315775736500174160ustar00rootroot00000000000000/** * Editor prompt example */ 'use strict'; var inquirer = require('..'); var questions = [ { type: 'editor', name: 'bio', message: 'Please write a short bio of at least 3 lines.', validate: function (text) { if (text.split('\n').length < 3) { return 'Must be at least 3 lines.'; } return true; } } ]; inquirer.prompt(questions).then(function (answers) { console.log(JSON.stringify(answers, null, ' ')); }); Inquirer.js-3.3.0/examples/expand.js000066400000000000000000000012651315775736500174100ustar00rootroot00000000000000/** * Expand list examples */ 'use strict'; var inquirer = require('..'); inquirer.prompt([ { type: 'expand', message: 'Conflict on `file.js`: ', name: 'overwrite', choices: [ { key: 'y', name: 'Overwrite', value: 'overwrite' }, { key: 'a', name: 'Overwrite this one and all next', value: 'overwrite_all' }, { key: 'd', name: 'Show diff', value: 'diff' }, new inquirer.Separator(), { key: 'x', name: 'Abort', value: 'abort' } ] } ]).then(function (answers) { console.log(JSON.stringify(answers, null, ' ')); }); Inquirer.js-3.3.0/examples/hierarchical.js000066400000000000000000000044071315775736500205500ustar00rootroot00000000000000/** * Heirarchical conversation example */ 'use strict'; var inquirer = require('..'); var directionsPrompt = { type: 'list', name: 'direction', message: 'Which direction would you like to go?', choices: ['Forward', 'Right', 'Left', 'Back'] }; function main() { console.log('You find youself in a small room, there is a door in front of you.'); exitHouse(); } function exitHouse() { inquirer.prompt(directionsPrompt).then(function (answers) { if (answers.direction === 'Forward') { console.log('You find yourself in a forest'); console.log('There is a wolf in front of you; a friendly looking dwarf to the right and an impasse to the left.'); encounter1(); } else { console.log('You cannot go that way. Try again'); exitHouse(); } }); } function encounter1() { inquirer.prompt(directionsPrompt).then(function (answers) { var direction = answers.direction; if (direction === 'Forward') { console.log('You attempt to fight the wolf'); console.log('Theres a stick and some stones lying around you could use as a weapon'); encounter2b(); } else if (direction === 'Right') { console.log('You befriend the dwarf'); console.log('He helps you kill the wolf. You can now move forward'); encounter2a(); } else { console.log('You cannot go that way'); encounter1(); } }); } function encounter2a() { inquirer.prompt(directionsPrompt).then(function (answers) { var direction = answers.direction; if (direction === 'Forward') { var output = 'You find a painted wooden sign that says:'; output += ' \n'; output += ' ____ _____ ____ _____ \n'; output += '(_ _)( _ )( _ \\( _ ) \n'; output += ' )( )(_)( )(_) ))(_)( \n'; output += ' (__) (_____)(____/(_____) \n'; console.log(output); } else { console.log('You cannot go that way'); encounter2a(); } }); } function encounter2b() { inquirer.prompt({ type: 'list', name: 'weapon', message: 'Pick one', choices: [ 'Use the stick', 'Grab a large rock', 'Try and make a run for it', 'Attack the wolf unarmed' ] }).then(function () { console.log('The wolf mauls you. You die. The end.'); }); } main(); Inquirer.js-3.3.0/examples/input.js000066400000000000000000000014431315775736500172660ustar00rootroot00000000000000/** * Input prompt example */ 'use strict'; var inquirer = require('..'); var questions = [ { type: 'input', name: 'first_name', message: 'What\'s your first name' }, { type: 'input', name: 'last_name', message: 'What\'s your last name', default: function () { return 'Doe'; } }, { type: 'input', name: 'phone', message: 'What\'s your phone number', validate: function (value) { var pass = value.match(/^([01]{1})?[-.\s]?\(?(\d{3})\)?[-.\s]?(\d{3})[-.\s]?(\d{4})\s?((?:#|ext\.?\s?|x\.?\s?){1}(?:\d+)?)?$/i); if (pass) { return true; } return 'Please enter a valid phone number'; } } ]; inquirer.prompt(questions).then(function (answers) { console.log(JSON.stringify(answers, null, ' ')); }); Inquirer.js-3.3.0/examples/list.js000066400000000000000000000013601315775736500171000ustar00rootroot00000000000000/** * List prompt example */ 'use strict'; var inquirer = require('..'); inquirer.prompt([ { type: 'list', name: 'theme', message: 'What do you want to do?', choices: [ 'Order a pizza', 'Make a reservation', new inquirer.Separator(), 'Ask for opening hours', { name: 'Contact support', disabled: 'Unavailable at this time' }, 'Talk to the receptionist' ] }, { type: 'list', name: 'size', message: 'What size do you need?', choices: ['Jumbo', 'Large', 'Standard', 'Medium', 'Small', 'Micro'], filter: function (val) { return val.toLowerCase(); } } ]).then(function (answers) { console.log(JSON.stringify(answers, null, ' ')); }); Inquirer.js-3.3.0/examples/long-list.js000066400000000000000000000022171315775736500200370ustar00rootroot00000000000000/** * Paginated list */ 'use strict'; var inquirer = require('..'); var choices = Array.apply(0, new Array(26)).map(function (x, y) { return String.fromCharCode(y + 65); }); choices.push('Multiline option \n super cool feature'); choices.push({ name: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium.', value: 'foo', short: 'The long option' }); inquirer.prompt([ { type: 'list', name: 'letter', message: 'What\'s your favorite letter?', paginated: true, choices: choices }, { type: 'checkbox', name: 'name', message: 'Select the letter contained in your name:', paginated: true, choices: choices } ]).then(function (answers) { console.log(JSON.stringify(answers, null, ' ')); }); Inquirer.js-3.3.0/examples/nested-call.js000066400000000000000000000006511315775736500203220ustar00rootroot00000000000000/** * Nested Inquirer call */ 'use strict'; var inquirer = require('..'); inquirer.prompt({ type: 'list', name: 'chocolate', message: 'What\'s your favorite chocolate?', choices: ['Mars', 'Oh Henry', 'Hershey'] }).then(function () { inquirer.prompt({ type: 'list', name: 'beverage', message: 'And your favorite beverage?', choices: ['Pepsi', 'Coke', '7up', 'Mountain Dew', 'Red Bull'] }); }); Inquirer.js-3.3.0/examples/password.js000066400000000000000000000011521315775736500177660ustar00rootroot00000000000000/** * Password prompt example */ 'use strict'; const inquirer = require('..'); const requireLetterAndNumber = value => { if (/\w/.test(value) && /\d/.test(value)) { return true; } return 'Password need to have at least a letter and a number'; }; inquirer.prompt([ { type: 'password', message: 'Enter a password', name: 'password1', validate: requireLetterAndNumber }, { type: 'password', message: 'Enter a masked password', name: 'password2', mask: '*', validate: requireLetterAndNumber } ]).then(answers => console.log(JSON.stringify(answers, null, ' '))); Inquirer.js-3.3.0/examples/pizza.js000066400000000000000000000041611315775736500172640ustar00rootroot00000000000000/** * Pizza delivery prompt example * run example by writing `node pizza.js` in your console */ 'use strict'; var inquirer = require('..'); console.log('Hi, welcome to Node Pizza'); var questions = [ { type: 'confirm', name: 'toBeDelivered', message: 'Is this for delivery?', default: false }, { type: 'input', name: 'phone', message: 'What\'s your phone number?', validate: function (value) { var pass = value.match(/^([01]{1})?[-.\s]?\(?(\d{3})\)?[-.\s]?(\d{3})[-.\s]?(\d{4})\s?((?:#|ext\.?\s?|x\.?\s?){1}(?:\d+)?)?$/i); if (pass) { return true; } return 'Please enter a valid phone number'; } }, { type: 'list', name: 'size', message: 'What size do you need?', choices: ['Large', 'Medium', 'Small'], filter: function (val) { return val.toLowerCase(); } }, { type: 'input', name: 'quantity', message: 'How many do you need?', validate: function (value) { var valid = !isNaN(parseFloat(value)); return valid || 'Please enter a number'; }, filter: Number }, { type: 'expand', name: 'toppings', message: 'What about the toppings?', choices: [ { key: 'p', name: 'Pepperoni and cheese', value: 'PepperoniCheese' }, { key: 'a', name: 'All dressed', value: 'alldressed' }, { key: 'w', name: 'Hawaiian', value: 'hawaiian' } ] }, { type: 'rawlist', name: 'beverage', message: 'You also get a free 2L beverage', choices: ['Pepsi', '7up', 'Coke'] }, { type: 'input', name: 'comments', message: 'Any comments on your purchase experience?', default: 'Nope, all good!' }, { type: 'list', name: 'prize', message: 'For leaving a comment, you get a freebie', choices: ['cake', 'fries'], when: function (answers) { return answers.comments !== 'Nope, all good!'; } } ]; inquirer.prompt(questions).then(function (answers) { console.log('\nOrder receipt:'); console.log(JSON.stringify(answers, null, ' ')); }); Inquirer.js-3.3.0/examples/rawlist.js000066400000000000000000000012261315775736500176130ustar00rootroot00000000000000/** * Raw List prompt example */ 'use strict'; var inquirer = require('..'); inquirer.prompt([ { type: 'rawlist', name: 'theme', message: 'What do you want to do?', choices: [ 'Order a pizza', 'Make a reservation', new inquirer.Separator(), 'Ask opening hours', 'Talk to the receptionist' ] }, { type: 'rawlist', name: 'size', message: 'What size do you need', choices: ['Jumbo', 'Large', 'Standard', 'Medium', 'Small', 'Micro'], filter: function (val) { return val.toLowerCase(); } } ]).then(function (answers) { console.log(JSON.stringify(answers, null, ' ')); }); Inquirer.js-3.3.0/examples/recursive.js000066400000000000000000000012201315775736500201270ustar00rootroot00000000000000/** * Recursive prompt example * Allows user to choose when to exit prompt */ 'use strict'; var inquirer = require('..'); var output = []; var questions = [ { type: 'input', name: 'tvShow', message: 'What\'s your favorite TV show?' }, { type: 'confirm', name: 'askAgain', message: 'Want to enter another TV show favorite (just hit enter for YES)?', default: true } ]; function ask() { inquirer.prompt(questions).then(function (answers) { output.push(answers.tvShow); if (answers.askAgain) { ask(); } else { console.log('Your favorite TV Shows:', output.join(', ')); } }); } ask(); Inquirer.js-3.3.0/examples/rx-observable-array.js000066400000000000000000000017021315775736500220140ustar00rootroot00000000000000var inquirer = require('..'); var Rx = require('rx-lite-aggregates'); var questions = [ { type: 'input', name: 'first_name', message: 'What\'s your first name' }, { type: 'input', name: 'last_name', message: 'What\'s your last name', default: function () { return 'Doe'; } }, { type: 'input', name: 'phone', message: 'What\'s your phone number', validate: function (value) { var pass = value.match(/^([01]{1})?[-.\s]?\(?(\d{3})\)?[-.\s]?(\d{3})[-.\s]?(\d{4})\s?((?:#|ext\.?\s?|x\.?\s?){1}(?:\d+)?)?$/i); if (pass) { return true; } return 'Please enter a valid phone number'; } } ]; var observable = Rx.Observable.fromArray(questions); inquirer.prompt(observable).ui.process.subscribe( function (ans) { console.log('Answer is: ', ans); }, function (err) { console.log('Error: ', err); }, function () { console.log('Completed'); } ); Inquirer.js-3.3.0/examples/rx-observable-create.js000066400000000000000000000015711315775736500221450ustar00rootroot00000000000000var inquirer = require('..'); var Rx = require('rx-lite-aggregates'); var observe = Rx.Observable.create(function (obs) { obs.onNext({ type: 'input', name: 'first_name', message: 'What\'s your first name' }); obs.onNext({ type: 'input', name: 'last_name', message: 'What\'s your last name', default: function () { return 'Doe'; } }); obs.onNext({ type: 'input', name: 'phone', message: 'What\'s your phone number', validate: function (value) { var pass = value.match(/^([01]{1})?[-.\s]?\(?(\d{3})\)?[-.\s]?(\d{3})[-.\s]?(\d{4})\s?((?:#|ext\.?\s?|x\.?\s?){1}(?:\d+)?)?$/i); if (pass) { return true; } return 'Please enter a valid phone number'; } }); obs.onCompleted(); }); inquirer.prompt(observe).then(function (answers) { console.log(JSON.stringify(answers, null, ' ')); }); Inquirer.js-3.3.0/examples/spawn.js000066400000000000000000000001641315775736500172560ustar00rootroot00000000000000var spawn = require('child_process').spawn; spawn('node', ['input.js'], { cwd: __dirname, stdio: 'inherit' }); Inquirer.js-3.3.0/examples/when.js000066400000000000000000000015411315775736500170670ustar00rootroot00000000000000/** * When example */ 'use strict'; var inquirer = require('..'); var questions = [ { type: 'confirm', name: 'bacon', message: 'Do you like bacon?' }, { type: 'input', name: 'favorite', message: 'Bacon lover, what is your favorite type of bacon?', when: function (answers) { return answers.bacon; } }, { type: 'confirm', name: 'pizza', message: 'Ok... Do you like pizza?', when: function (answers) { return !likesFood('bacon')(answers); } }, { type: 'input', name: 'favorite', message: 'Whew! What is your favorite type of pizza?', when: likesFood('pizza') } ]; function likesFood(aFood) { return function (answers) { return answers[aFood]; }; } inquirer.prompt(questions).then(function (answers) { console.log(JSON.stringify(answers, null, ' ')); }); Inquirer.js-3.3.0/gulpfile.js000066400000000000000000000030141315775736500161140ustar00rootroot00000000000000'use strict'; var path = require('path'); var gulp = require('gulp'); var eslint = require('gulp-eslint'); var excludeGitignore = require('gulp-exclude-gitignore'); var mocha = require('gulp-mocha'); var istanbul = require('gulp-istanbul'); var nsp = require('gulp-nsp'); var plumber = require('gulp-plumber'); var coveralls = require('gulp-coveralls'); var codacy = require('gulp-codacy'); gulp.task('static', function () { return gulp.src('**/*.js') .pipe(excludeGitignore()) .pipe(eslint()) .pipe(eslint.format()) .pipe(eslint.failAfterError()); }); gulp.task('nsp', function (cb) { nsp({package: path.resolve('package.json')}, cb); }); gulp.task('pre-test', function () { return gulp.src('lib/**/*.js') .pipe(excludeGitignore()) .pipe(istanbul({ includeUntested: true })) .pipe(istanbul.hookRequire()); }); gulp.task('test', ['pre-test'], function (cb) { var mochaErr; gulp.src('test/**/*.js') .pipe(plumber()) .pipe(mocha({reporter: 'spec'})) .on('error', function (err) { mochaErr = err; }) .pipe(istanbul.writeReports()) .on('end', function () { cb(mochaErr); }); }); gulp.task('watch', function () { gulp.watch(['lib/**/*.js', 'test/**'], ['test']); }); gulp.task('coveralls', ['test'], function () { if (!process.env.CI) { return; } return gulp.src(path.join(__dirname, 'coverage/lcov.info')) .pipe(coveralls()) .pipe(codacy()); }); gulp.task('prepublish', ['nsp']); gulp.task('default', ['static', 'test', 'coveralls']); Inquirer.js-3.3.0/lib/000077500000000000000000000000001315775736500145175ustar00rootroot00000000000000Inquirer.js-3.3.0/lib/inquirer.js000066400000000000000000000043361315775736500167210ustar00rootroot00000000000000/** * 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('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(); }; Inquirer.js-3.3.0/lib/objects/000077500000000000000000000000001315775736500161505ustar00rootroot00000000000000Inquirer.js-3.3.0/lib/objects/choice.js000066400000000000000000000015471315775736500177470ustar00rootroot00000000000000'use strict'; var _ = require('lodash'); /** * Choice object * Normalize input as choice object * @constructor * @param {String|Object} val Choice value. If an object is passed, it should contains * at least one of `value` or `name` property */ var Choice = module.exports = function (val, answers) { // Don't process Choice and Separator object if (val instanceof Choice || val.type === 'separator') { return val; } if (_.isString(val)) { this.name = val; this.value = val; this.short = 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; } }; Inquirer.js-3.3.0/lib/objects/choices.js000066400000000000000000000056241315775736500201320ustar00rootroot00000000000000'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 */ var Choices = module.exports = function (choices, answers) { this.choices = choices.map(function (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(function (item) { return !item.disabled; }); Object.defineProperty(this, 'length', { get: function () { return this.choices.length; }, set: function (val) { this.choices.length = val; } }); Object.defineProperty(this, 'realLength', { get: function () { return this.realChoices.length; }, set: function () { 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 */ Choices.prototype.getChoice = function (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 */ Choices.prototype.get = function (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 */ Choices.prototype.where = function (whereClause) { return _.filter(this.realChoices, whereClause); }; /** * Pluck a particular key from the choices * @param {String} propertyName Property name to select * @return {Array} Selected properties */ Choices.prototype.pluck = function (propertyName) { return _.map(this.realChoices, propertyName); }; // Expose usual Array methods Choices.prototype.indexOf = function () { return this.choices.indexOf.apply(this.choices, arguments); }; Choices.prototype.forEach = function () { return this.choices.forEach.apply(this.choices, arguments); }; Choices.prototype.filter = function () { return this.choices.filter.apply(this.choices, arguments); }; Choices.prototype.find = function (func) { return _.find(this.choices, func); }; Choices.prototype.push = function () { var objs = _.map(arguments, function (val) { return new Choice(val); }); this.choices.push.apply(this.choices, objs); this.realChoices = this.choices.filter(Separator.exclude); return this.choices; }; Inquirer.js-3.3.0/lib/objects/separator.js000066400000000000000000000014071315775736500205100ustar00rootroot00000000000000'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) */ var Separator = module.exports = function (line) { this.type = 'separator'; this.line = chalk.dim(line || new Array(15).join(figures.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'; }; /** * Stringify separator * @return {String} the separator display string */ Separator.prototype.toString = function () { return this.line; }; Inquirer.js-3.3.0/lib/prompts/000077500000000000000000000000001315775736500162235ustar00rootroot00000000000000Inquirer.js-3.3.0/lib/prompts/base.js000066400000000000000000000065741315775736500175070ustar00rootroot00000000000000/** * Base prompt implementation * Should be extended by prompt types. */ var _ = require('lodash'); var chalk = require('chalk'); var runAsync = require('run-async'); var Choices = require('../objects/choices'); var ScreenManager = require('../utils/screen-manager'); var Prompt = module.exports = function (question, rl, answers) { // Setup instance defaults property _.assign(this, { answers: answers, status: 'pending' }); // Set defaults prompt options this.opt = _.defaults(_.clone(question), { validate: function () { return true; }, filter: function (val) { return val; }, when: function () { return true; }, suffix: '', prefix: chalk.green('?') }); // Check to make sure prompt requirements are there if (!this.opt.message) { this.throwParamError('message'); } if (!this.opt.name) { this.throwParamError('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} */ Prompt.prototype.run = function () { return new Promise(function (resolve) { this._run(function (value) { resolve(value); }); }.bind(this)); }; // default noop (this one should be overwritten in prompts) Prompt.prototype._run = function (cb) { cb(); }; /** * Throw an error telling a required parameter is missing * @param {String} name Name of the missing param * @return {Throw Error} */ Prompt.prototype.throwParamError = function (name) { throw new Error('You must provide a `' + name + '` parameter'); }; /** * Called when the UI closes. Override to do any specific cleanup necessary */ Prompt.prototype.close = function () { 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` */ Prompt.prototype.handleSubmitEvents = function (submit) { var self = this; var validate = runAsync(this.opt.validate); var filter = runAsync(this.opt.filter); var validation = submit.flatMap(function (value) { return filter(value, self.answers).then(function (filteredValue) { return validate(filteredValue, self.answers).then(function (isValid) { return {isValid: isValid, value: filteredValue}; }, function (err) { return {isValid: err}; }); }, function (err) { return {isValid: err}; }); }).share(); var success = validation .filter(function (state) { return state.isValid === true; }) .take(1); var error = validation .filter(function (state) { return state.isValid !== true; }) .takeUntil(success); return { success: success, error: error }; }; /** * Generate the prompt question string * @return {String} prompt question string */ Prompt.prototype.getQuestion = function () { 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') { message += chalk.dim('(' + this.opt.default + ') '); } return message; }; Inquirer.js-3.3.0/lib/prompts/checkbox.js000066400000000000000000000134471315775736500203600ustar00rootroot00000000000000/** * `list` type prompt */ var _ = require('lodash'); var util = require('util'); var chalk = require('chalk'); var cliCursor = require('cli-cursor'); var figures = require('figures'); var Base = require('./base'); var observe = require('../utils/events'); var Paginator = require('../utils/paginator'); /** * Module exports */ module.exports = Prompt; /** * Constructor */ function Prompt() { Base.apply(this, arguments); 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; this.firstRender = true; // Make sure no default is set (so it won't be printed) this.opt.default = null; this.paginator = new Paginator(); } util.inherits(Prompt, Base); /** * Start the Inquiry session * @param {Function} cb Callback when prompt is done * @return {this} */ Prompt.prototype._run = function (cb) { this.done = cb; var events = observe(this.rl); var validation = this.handleSubmitEvents( events.line.map(this.getCurrentValue.bind(this)) ); validation.success.forEach(this.onEnd.bind(this)); validation.error.forEach(this.onError.bind(this)); events.normalizedUpKey.takeUntil(validation.success).forEach(this.onUpKey.bind(this)); events.normalizedDownKey.takeUntil(validation.success).forEach(this.onDownKey.bind(this)); events.numberKey.takeUntil(validation.success).forEach(this.onNumberKey.bind(this)); events.spaceKey.takeUntil(validation.success).forEach(this.onSpaceKey.bind(this)); events.aKey.takeUntil(validation.success).forEach(this.onAllKey.bind(this)); events.iKey.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 {Prompt} self */ Prompt.prototype.render = function (error) { // Render question var message = this.getQuestion(); var bottomContent = ''; if (this.firstRender) { message += '(Press ' + chalk.cyan.bold('') + ' to select, ' + chalk.cyan.bold('') + ' to toggle all, ' + chalk.cyan.bold('') + ' to inverse 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 */ Prompt.prototype.onEnd = function (state) { this.status = 'answered'; // Rerender prompt (and clean subline error) this.render(); this.screen.done(); cliCursor.show(); this.done(state.value); }; Prompt.prototype.onError = function (state) { this.render(state.isValid); }; Prompt.prototype.getCurrentValue = function () { var choices = this.opt.choices.filter(function (choice) { return Boolean(choice.checked) && !choice.disabled; }); this.selection = _.map(choices, 'short'); return _.map(choices, 'value'); }; Prompt.prototype.onUpKey = function () { var len = this.opt.choices.realLength; this.pointer = (this.pointer > 0) ? this.pointer - 1 : len - 1; this.render(); }; Prompt.prototype.onDownKey = function () { var len = this.opt.choices.realLength; this.pointer = (this.pointer < len - 1) ? this.pointer + 1 : 0; this.render(); }; Prompt.prototype.onNumberKey = function (input) { if (input <= this.opt.choices.realLength) { this.pointer = input - 1; this.toggleChoice(this.pointer); } this.render(); }; Prompt.prototype.onSpaceKey = function () { this.toggleChoice(this.pointer); this.render(); }; Prompt.prototype.onAllKey = function () { 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(); }; Prompt.prototype.onInverseKey = function () { this.opt.choices.forEach(function (choice) { if (choice.type !== 'separator') { choice.checked = !choice.checked; } }); this.render(); }; Prompt.prototype.toggleChoice = function (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 isSelected = (i - separatorOffset === pointer); output += isSelected ? chalk.cyan(figures.pointer) : ' '; output += getCheckbox(choice.checked) + ' ' + choice.name; } 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; } Inquirer.js-3.3.0/lib/prompts/confirm.js000066400000000000000000000034131315775736500202170ustar00rootroot00000000000000/** * `confirm` type prompt */ var _ = require('lodash'); var util = require('util'); var chalk = require('chalk'); var Base = require('./base'); var observe = require('../utils/events'); /** * Module exports */ module.exports = Prompt; /** * Constructor */ function Prompt() { Base.apply(this, arguments); 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; } util.inherits(Prompt, Base); /** * Start the Inquiry session * @param {Function} cb Callback when prompt is done * @return {this} */ Prompt.prototype._run = function (cb) { this.done = cb; // Once user confirm (enter key) var events = observe(this.rl); events.keypress.takeUntil(events.line).forEach(this.onKeypress.bind(this)); events.line.take(1).forEach(this.onEnd.bind(this)); // Init this.render(); return this; }; /** * Render the prompt to screen * @return {Prompt} self */ Prompt.prototype.render = function (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 */ Prompt.prototype.onEnd = function (input) { this.status = 'answered'; var output = this.opt.filter(input); this.render(output); this.screen.done(); this.done(output); }; /** * When user press a key */ Prompt.prototype.onKeypress = function () { this.render(); }; Inquirer.js-3.3.0/lib/prompts/editor.js000066400000000000000000000046751315775736500200630ustar00rootroot00000000000000/** * `editor` type prompt */ var util = require('util'); var chalk = require('chalk'); var ExternalEditor = require('external-editor'); var Base = require('./base'); var observe = require('../utils/events'); var rx = require('rx-lite-aggregates'); /** * Module exports */ module.exports = Prompt; /** * Constructor */ function Prompt() { return Base.apply(this, arguments); } util.inherits(Prompt, Base); /** * Start the Inquiry session * @param {Function} cb Callback when prompt is done * @return {this} */ Prompt.prototype._run = function (cb) { this.done = cb; this.editorResult = new rx.Subject(); // Open Editor on "line" (Enter Key) var events = observe(this.rl); this.lineSubscription = events.line.forEach(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 {Prompt} self */ Prompt.prototype.render = function (error) { var bottomContent = ''; var message = this.getQuestion(); if (this.status === 'answered') { message += chalk.dim('Received'); } else { message += chalk.dim('Press to launch your preferred editor.'); } if (error) { bottomContent = chalk.red('>> ') + error; } this.screen.render(message, bottomContent); }; /** * Launch $EDITOR on user press enter */ Prompt.prototype.startExternalEditor = function () { // Pause Readline to prevent stdin and stdout from being modified while the editor is showing this.rl.pause(); ExternalEditor.editAsync(this.currentText, this.endExternalEditor.bind(this)); }; Prompt.prototype.endExternalEditor = function (error, result) { this.rl.resume(); if (error) { this.editorResult.onError(error); } else { this.editorResult.onNext(result); } }; Prompt.prototype.onEnd = function (state) { this.editorResult.dispose(); this.lineSubscription.dispose(); this.answer = state.value; this.status = 'answered'; // Re-render prompt this.render(); this.screen.done(); this.done(this.answer); }; Prompt.prototype.onError = function (state) { this.render(state.isValid); }; Inquirer.js-3.3.0/lib/prompts/expand.js000066400000000000000000000135731315775736500200510ustar00rootroot00000000000000/** * `rawlist` type prompt */ var _ = require('lodash'); var util = require('util'); var chalk = require('chalk'); var Base = require('./base'); var Separator = require('../objects/separator'); var observe = require('../utils/events'); var Paginator = require('../utils/paginator'); /** * Module exports */ module.exports = Prompt; /** * Constructor */ function Prompt() { Base.apply(this, arguments); 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 = function (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(); } util.inherits(Prompt, Base); /** * Start the Inquiry session * @param {Function} cb Callback when prompt is done * @return {this} */ Prompt.prototype._run = function (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.map(this.getCurrentValue.bind(this)) ); validation.success.forEach(this.onSubmit.bind(this)); validation.error.forEach(this.onError.bind(this)); this.keypressObs = events.keypress.takeUntil(validation.success) .forEach(this.onKeypress.bind(this)); // Init the prompt this.render(); return this; }; /** * Render the prompt to screen * @return {Prompt} self */ Prompt.prototype.render = function (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); }; Prompt.prototype.getCurrentValue = function (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 */ Prompt.prototype.getChoices = function () { var output = ''; this.opt.choices.forEach(function (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; }.bind(this)); return output; }; Prompt.prototype.onError = function (state) { if (state.value === 'help') { this.selectedKey = ''; this.status = 'expanded'; this.render(); return; } this.render(state.isValid); }; /** * When user press `enter` key */ Prompt.prototype.onSubmit = function (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 */ Prompt.prototype.onKeypress = function () { 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 */ Prompt.prototype.validateChoices = function (choices) { var formatError; var errors = []; var keymap = {}; choices.filter(Separator.exclude).forEach(function (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} defaultIndex - the choice index to capitalize * @return {String} The rendered choices key string */ Prompt.prototype.generateChoicesString = function (choices, defaultIndex) { var defIndex = choices.realLength - 1; if (_.isNumber(defaultIndex) && this.opt.choices.getChoice(defaultIndex)) { defIndex = defaultIndex; } 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(function (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; } Inquirer.js-3.3.0/lib/prompts/input.js000066400000000000000000000035531315775736500177260ustar00rootroot00000000000000/** * `input` type prompt */ var util = require('util'); var chalk = require('chalk'); var Base = require('./base'); var observe = require('../utils/events'); /** * Module exports */ module.exports = Prompt; /** * Constructor */ function Prompt() { return Base.apply(this, arguments); } util.inherits(Prompt, Base); /** * Start the Inquiry session * @param {Function} cb Callback when prompt is done * @return {this} */ Prompt.prototype._run = function (cb) { this.done = cb; // Once user confirm (enter key) var events = observe(this.rl); var submit = events.line.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.takeUntil(validation.success).forEach(this.onKeypress.bind(this)); // Init this.render(); return this; }; /** * Render the prompt to screen * @return {Prompt} self */ Prompt.prototype.render = function (error) { var bottomContent = ''; var message = this.getQuestion(); if (this.status === 'answered') { message += chalk.cyan(this.answer); } else { message += this.rl.line; } if (error) { bottomContent = chalk.red('>> ') + error; } this.screen.render(message, bottomContent); }; /** * When user press `enter` key */ Prompt.prototype.filterInput = function (input) { if (!input) { return this.opt.default == null ? '' : this.opt.default; } return input; }; Prompt.prototype.onEnd = function (state) { this.answer = state.value; this.status = 'answered'; // Re-render prompt this.render(); this.screen.done(); this.done(state.value); }; Prompt.prototype.onError = function (state) { this.render(state.isValid); }; /** * When user press a key */ Prompt.prototype.onKeypress = function () { this.render(); }; Inquirer.js-3.3.0/lib/prompts/list.js000066400000000000000000000103761315775736500175430ustar00rootroot00000000000000/** * `list` type prompt */ var _ = require('lodash'); var util = require('util'); var chalk = require('chalk'); var figures = require('figures'); var cliCursor = require('cli-cursor'); var runAsync = require('run-async'); var Base = require('./base'); var observe = require('../utils/events'); var Paginator = require('../utils/paginator'); /** * Module exports */ module.exports = Prompt; /** * Constructor */ function Prompt() { Base.apply(this, arguments); 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) { this.selected = this.opt.choices.pluck('value').indexOf(def); } // Make sure no default is set (so it won't be printed) this.opt.default = null; this.paginator = new Paginator(); } util.inherits(Prompt, Base); /** * Start the Inquiry session * @param {Function} cb Callback when prompt is done * @return {this} */ Prompt.prototype._run = function (cb) { this.done = cb; var self = this; var events = observe(this.rl); events.normalizedUpKey.takeUntil(events.line).forEach(this.onUpKey.bind(this)); events.normalizedDownKey.takeUntil(events.line).forEach(this.onDownKey.bind(this)); events.numberKey.takeUntil(events.line).forEach(this.onNumberKey.bind(this)); events.line .take(1) .map(this.getCurrentValue.bind(this)) .flatMap(function (value) { return runAsync(self.opt.filter)(value).catch(function (err) { return err; }); }) .forEach(this.onSubmit.bind(this)); // Init the prompt cliCursor.hide(); this.render(); return this; }; /** * Render the prompt to screen * @return {Prompt} self */ Prompt.prototype.render = function () { // 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 */ Prompt.prototype.onSubmit = function (value) { this.status = 'answered'; // Rerender prompt this.render(); this.screen.done(); cliCursor.show(); this.done(value); }; Prompt.prototype.getCurrentValue = function () { return this.opt.choices.getChoice(this.selected).value; }; /** * When user press a key */ Prompt.prototype.onUpKey = function () { var len = this.opt.choices.realLength; this.selected = (this.selected > 0) ? this.selected - 1 : len - 1; this.render(); }; Prompt.prototype.onDownKey = function () { var len = this.opt.choices.realLength; this.selected = (this.selected < len - 1) ? this.selected + 1 : 0; this.render(); }; Prompt.prototype.onNumberKey = function (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(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') + ')'; 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$/, ''); } Inquirer.js-3.3.0/lib/prompts/password.js000066400000000000000000000044031315775736500204240ustar00rootroot00000000000000/** * `password` type prompt */ var util = require('util'); var chalk = require('chalk'); 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); } /** * Module exports */ module.exports = Prompt; /** * Constructor */ function Prompt() { return Base.apply(this, arguments); } util.inherits(Prompt, Base); /** * Start the Inquiry session * @param {Function} cb Callback when prompt is done * @return {this} */ Prompt.prototype._run = function (cb) { this.done = cb; var events = observe(this.rl); // Once user confirm (enter key) var submit = events.line.map(this.filterInput.bind(this)); var validation = this.handleSubmitEvents(submit); validation.success.forEach(this.onEnd.bind(this)); validation.error.forEach(this.onError.bind(this)); if (this.opt.mask) { events.keypress.takeUntil(validation.success).forEach(this.onKeypress.bind(this)); } // Init this.render(); return this; }; /** * Render the prompt to screen * @return {Prompt} self */ Prompt.prototype.render = function (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 */ Prompt.prototype.filterInput = function (input) { if (!input) { return this.opt.default == null ? '' : this.opt.default; } return input; }; Prompt.prototype.onEnd = function (state) { this.status = 'answered'; this.answer = state.value; // Re-render prompt this.render(); this.screen.done(); this.done(state.value); }; Prompt.prototype.onError = function (state) { this.render(state.isValid); }; Prompt.prototype.onKeypress = function () { this.render(); }; Inquirer.js-3.3.0/lib/prompts/rawlist.js000066400000000000000000000072011315775736500202460ustar00rootroot00000000000000/** * `rawlist` type prompt */ var _ = require('lodash'); var util = require('util'); var chalk = require('chalk'); var Base = require('./base'); var Separator = require('../objects/separator'); var observe = require('../utils/events'); var Paginator = require('../utils/paginator'); /** * Module exports */ module.exports = Prompt; /** * Constructor */ function Prompt() { Base.apply(this, arguments); 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 = this.rawDefault = def; } // Make sure no default is set (so it won't be printed) this.opt.default = null; this.paginator = new Paginator(); } util.inherits(Prompt, Base); /** * Start the Inquiry session * @param {Function} cb Callback when prompt is done * @return {this} */ Prompt.prototype._run = function (cb) { this.done = cb; // Once user confirm (enter key) var events = observe(this.rl); var submit = events.line.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.takeUntil(validation.success).forEach(this.onKeypress.bind(this)); // Init the prompt this.render(); return this; }; /** * Render the prompt to screen * @return {Prompt} self */ Prompt.prototype.render = function (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 += 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 */ Prompt.prototype.getCurrentValue = function (index) { if (index == null || index === '') { index = this.rawDefault; } else { index -= 1; } var choice = this.opt.choices.getChoice(index); return choice ? choice.value : null; }; Prompt.prototype.onEnd = function (state) { this.status = 'answered'; this.answer = state.value; // Re-render prompt this.render(); this.screen.done(); this.done(state.value); }; Prompt.prototype.onError = function () { this.render('Please enter a valid index'); }; /** * When user press a key */ Prompt.prototype.onKeypress = function () { 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(); }; /** * 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; } Inquirer.js-3.3.0/lib/ui/000077500000000000000000000000001315775736500151345ustar00rootroot00000000000000Inquirer.js-3.3.0/lib/ui/baseUI.js000066400000000000000000000033111315775736500166400ustar00rootroot00000000000000'use strict'; var _ = require('lodash'); var MuteStream = require('mute-stream'); var readline = require('readline'); /** * Base interface class other can inherits from */ var UI = module.exports = function (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} */ UI.prototype.onForceClose = function () { this.close(); process.kill(process.pid, 'SIGINT'); console.log(''); }; /** * Close the interface and cleanup listeners */ UI.prototype.close = function () { // 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'])); } Inquirer.js-3.3.0/lib/ui/bottom-bar.js000066400000000000000000000046301315775736500175430ustar00rootroot00000000000000/** * Sticky bottom bar user interface */ var util = require('util'); var through = require('through'); var Base = require('./baseUI'); var rlUtils = require('../utils/readline'); var _ = require('lodash'); /** * Module exports */ module.exports = Prompt; /** * Constructor */ function Prompt(opt) { opt || (opt = {}); Base.apply(this, arguments); this.log = through(this.writeLog.bind(this)); this.bottomBar = opt.bottomBar || ''; this.render(); } util.inherits(Prompt, Base); /** * Render the prompt to screen * @return {Prompt} self */ Prompt.prototype.render = function () { this.write(this.bottomBar); return this; }; Prompt.prototype.clean = function () { 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 {Prompt} self */ Prompt.prototype.updateBottomBar = function (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 {Prompt} self */ Prompt.prototype.writeLog = function (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 */ Prompt.prototype.enforceLF = function (str) { return str.match(/[\r\n]$/) ? str : str + '\n'; }; /** * Helper for writing message in Prompt * @param {Prompt} prompt - The Prompt object that extends tty * @param {String} message - The message to be output */ Prompt.prototype.write = function (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); }; Inquirer.js-3.3.0/lib/ui/prompt.js000066400000000000000000000063331315775736500170200ustar00rootroot00000000000000'use strict'; var _ = require('lodash'); var rx = require('rx-lite-aggregates'); var util = require('util'); var runAsync = require('run-async'); var utils = require('../utils/utils'); var Base = require('./baseUI'); /** * Base interface class other can inherits from */ var PromptUI = module.exports = function (prompts, opt) { Base.call(this, opt); this.prompts = prompts; }; util.inherits(PromptUI, Base); PromptUI.prototype.run = function (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) ? rx.Observable.from(questions) : questions; this.process = obs .concatMap(this.processQuestion.bind(this)) // `publish` creates a hot Observable. It prevents duplicating prompts. .publish(); this.process.connect(); return this.process .reduce(function (answers, answer) { _.set(this.answers, answer.name, answer.answer); return this.answers; }.bind(this), {}) .toPromise(Promise) .then(this.onCompletion.bind(this)); }; /** * Once all prompt are over */ PromptUI.prototype.onCompletion = function (answers) { this.close(); return answers; }; PromptUI.prototype.processQuestion = function (question) { question = _.clone(question); return rx.Observable.defer(function () { var obs = rx.Observable.of(question); return obs .concatMap(this.setDefaultType.bind(this)) .concatMap(this.filterIfRunnable.bind(this)) .concatMap(utils.fetchAsyncQuestionProperty.bind(null, question, 'message', this.answers)) .concatMap(utils.fetchAsyncQuestionProperty.bind(null, question, 'default', this.answers)) .concatMap(utils.fetchAsyncQuestionProperty.bind(null, question, 'choices', this.answers)) .concatMap(this.fetchAnswer.bind(this)); }.bind(this)); }; PromptUI.prototype.fetchAnswer = function (question) { var Prompt = this.prompts[question.type]; this.activePrompt = new Prompt(question, this.rl, this.answers); return rx.Observable.defer(function () { return rx.Observable.fromPromise(this.activePrompt.run().then(function (answer) { return {name: question.name, answer: answer}; })); }.bind(this)); }; PromptUI.prototype.setDefaultType = function (question) { // Default type to input if (!this.prompts[question.type]) { question.type = 'input'; } return rx.Observable.defer(function () { return rx.Observable.return(question); }); }; PromptUI.prototype.filterIfRunnable = function (question) { if (question.when === false) { return rx.Observable.empty(); } if (!_.isFunction(question.when)) { return rx.Observable.return(question); } var answers = this.answers; return rx.Observable.defer(function () { return rx.Observable.fromPromise( runAsync(question.when)(answers).then(function (shouldRun) { if (shouldRun) { return question; } }) ).filter(function (val) { return val != null; }); }); }; Inquirer.js-3.3.0/lib/utils/000077500000000000000000000000001315775736500156575ustar00rootroot00000000000000Inquirer.js-3.3.0/lib/utils/events.js000066400000000000000000000025131315775736500175220ustar00rootroot00000000000000'use strict'; var rx = require('rx-lite-aggregates'); function normalizeKeypressEvents(value, key) { return {value: value, key: key || {}}; } module.exports = function (rl) { var keypress = rx.Observable.fromEvent(rl.input, 'keypress', normalizeKeypressEvents) .filter(function (e) { // Ignore `enter` key. On the readline, we only care about the `line` event. return e.key.name !== 'enter' && e.key.name !== 'return'; }); return { line: rx.Observable.fromEvent(rl, 'line'), keypress: keypress, normalizedUpKey: keypress.filter(function (e) { return e.key.name === 'up' || e.key.name === 'k' || (e.key.name === 'p' && e.key.ctrl); }).share(), normalizedDownKey: keypress.filter(function (e) { return e.key.name === 'down' || e.key.name === 'j' || (e.key.name === 'n' && e.key.ctrl); }).share(), numberKey: keypress.filter(function (e) { return e.value && '123456789'.indexOf(e.value) >= 0; }).map(function (e) { return Number(e.value); }).share(), spaceKey: keypress.filter(function (e) { return e.key && e.key.name === 'space'; }).share(), aKey: keypress.filter(function (e) { return e.key && e.key.name === 'a'; }).share(), iKey: keypress.filter(function (e) { return e.key && e.key.name === 'i'; }).share() }; }; Inquirer.js-3.3.0/lib/utils/paginator.js000066400000000000000000000022761315775736500202100ustar00rootroot00000000000000'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. */ var Paginator = module.exports = function () { this.pointer = 0; this.lastIndex = 0; }; Paginator.prototype.paginate = function (output, active, pageSize) { pageSize = pageSize || 7; var middleOfList = Math.floor(pageSize / 2); var lines = output.split('\n'); // 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)'); }; Inquirer.js-3.3.0/lib/utils/readline.js000066400000000000000000000022401315775736500177760ustar00rootroot00000000000000'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)); }; Inquirer.js-3.3.0/lib/utils/screen-manager.js000066400000000000000000000073071315775736500211130ustar00rootroot00000000000000'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')); } var ScreenManager = module.exports = function (rl) { // These variables are keeping information to allow correct prompt re-rendering this.height = 0; this.extraLinesUnderPrompt = 0; this.rl = rl; }; ScreenManager.prototype.render = function (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 = forceLineReturn(content, width); if (bottomContent) { bottomContent = 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 util.right(this.rl, cursorPos.cols); /** * Set up state for next re-rendering */ this.extraLinesUnderPrompt = bottomContentHeight; this.height = height(fullContent); this.rl.output.mute(); }; ScreenManager.prototype.clean = function (extraLines) { if (extraLines > 0) { util.down(this.rl, extraLines); } util.clearLine(this.rl, this.height); }; ScreenManager.prototype.done = function () { this.rl.setPrompt(''); this.rl.output.unmute(); this.rl.output.write('\n'); }; ScreenManager.prototype.releaseCursor = function () { if (this.extraLinesUnderPrompt > 0) { util.down(this.rl, this.extraLinesUnderPrompt); } }; ScreenManager.prototype.normalizedCliWidth = function () { var width = cliWidth({ defaultWidth: 80, output: this.rl.output }); if (process.platform === 'win32') { return width - 1; } return width; }; function breakLines(lines, width) { // Break lines who're longuer than the cli width so we can normalize the natural line // returns behavior accross terminals. var regex = new RegExp( '(?:(?:\\033[[0-9;]*m)*.?){1,' + width + '}', 'g' ); return lines.map(function (line) { var chunk = line.match(regex); // last match is always empty chunk.pop(); return chunk || ''; }); } function forceLineReturn(content, width) { return _.flatten(breakLines(content.split('\n'), width)).join('\n'); } Inquirer.js-3.3.0/lib/utils/utils.js000066400000000000000000000015001315775736500173510ustar00rootroot00000000000000'use strict'; var _ = require('lodash'); var rx = require('rx-lite-aggregates'); 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.Obsersable} - Observable emitting once value is known */ exports.fetchAsyncQuestionProperty = function (question, prop, answers) { if (!_.isFunction(question[prop])) { return rx.Observable.return(question); } return rx.Observable.fromPromise(runAsync(question[prop])(answers) .then(function (value) { question[prop] = value; return question; }) ); }; Inquirer.js-3.3.0/package.json000066400000000000000000000026031315775736500162400ustar00rootroot00000000000000{ "name": "inquirer", "version": "3.3.0", "description": "A collection of common interactive command line user interfaces.", "author": "Simon Boudrias ", "files": [ "lib" ], "main": "lib/inquirer.js", "keywords": [ "command", "prompt", "stdin", "cli", "tty", "menu" ], "scripts": { "test": "gulp", "prepublish": "gulp prepublish" }, "repository": "SBoudrias/Inquirer.js", "license": "MIT", "dependencies": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.0", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", "external-editor": "^2.0.4", "figures": "^2.0.0", "lodash": "^4.3.0", "mute-stream": "0.0.7", "run-async": "^2.2.0", "rx-lite": "^4.0.8", "rx-lite-aggregates": "^4.0.8", "string-width": "^2.1.0", "strip-ansi": "^4.0.0", "through": "^2.3.6" }, "devDependencies": { "chai": "^4.0.1", "cmdify": "^0.0.4", "eslint": "^4.2.0", "eslint-config-xo-space": "^0.16.0", "gulp": "^3.9.0", "gulp-codacy": "^1.0.0", "gulp-coveralls": "^0.1.0", "gulp-eslint": "^4.0.0", "gulp-exclude-gitignore": "^1.0.0", "gulp-istanbul": "^1.1.2", "gulp-line-ending-corrector": "^1.0.1", "gulp-mocha": "^3.0.0", "gulp-nsp": "^2.1.0", "gulp-plumber": "^1.0.0", "mocha": "^3.4.2", "mockery": "^2.1.0", "sinon": "^3.0.0" } } Inquirer.js-3.3.0/test/000077500000000000000000000000001315775736500147305ustar00rootroot00000000000000Inquirer.js-3.3.0/test/before.js000066400000000000000000000003651315775736500165340ustar00rootroot00000000000000var mockery = require('mockery'); var ReadlineStub = require('./helpers/readline'); mockery.enable(); mockery.warnOnUnregistered(false); mockery.registerMock('readline', { createInterface: function () { return new ReadlineStub(); } }); Inquirer.js-3.3.0/test/bin/000077500000000000000000000000001315775736500155005ustar00rootroot00000000000000Inquirer.js-3.3.0/test/bin/write.js000066400000000000000000000002531315775736500171700ustar00rootroot00000000000000/** * Simple script to write an argument to a file */ var fs = require('fs'); if (process.argv.length === 4) { fs.writeFileSync(process.argv[3], process.argv[2]); } Inquirer.js-3.3.0/test/helpers/000077500000000000000000000000001315775736500163725ustar00rootroot00000000000000Inquirer.js-3.3.0/test/helpers/events.js000066400000000000000000000006141315775736500202350ustar00rootroot00000000000000/** * Automatically trigger a line event on the readline on each prompt */ exports.autosubmit = function (ui) { ui.process.subscribe(function () { // Use setTimeout because async properties on the following question object will still // be processed when we receive the subscribe event. setTimeout(function () { ui.rl.emit('line'); }, 5); }); ui.rl.emit('line'); }; Inquirer.js-3.3.0/test/helpers/fixtures.js000066400000000000000000000017361315775736500206100ustar00rootroot00000000000000var inquirer = require('../../lib/inquirer'); module.exports = { input: { message: 'message', name: 'name' }, confirm: { message: 'message', name: 'name' }, password: { message: 'message', name: 'name' }, list: { message: 'message', name: 'name', choices: ['foo', new inquirer.Separator(), 'bar', 'bum'] }, rawlist: { message: 'message', name: 'name', choices: ['foo', 'bar', new inquirer.Separator(), 'bum'] }, expand: { message: 'message', name: 'name', choices: [ {key: 'a', name: 'acab'}, new inquirer.Separator(), {key: 'b', name: 'bar'}, {key: 'c', name: 'chile'}, {key: 'd', name: 'd', value: false} ] }, checkbox: { message: 'message', name: 'name', choices: [ 'choice 1', new inquirer.Separator(), 'choice 2', 'choice 3' ] }, editor: { message: 'message', name: 'name', default: 'Inquirer' } }; Inquirer.js-3.3.0/test/helpers/readline.js000066400000000000000000000015551315775736500205210ustar00rootroot00000000000000var EventEmitter = require('events').EventEmitter; var sinon = require('sinon'); var util = require('util'); var _ = require('lodash'); var stub = {}; _.extend(stub, { write: sinon.stub().returns(stub), moveCursor: sinon.stub().returns(stub), setPrompt: sinon.stub().returns(stub), close: sinon.stub().returns(stub), pause: sinon.stub().returns(stub), resume: sinon.stub().returns(stub), _getCursorPos: sinon.stub().returns({cols: 0, rows: 0}), output: { end: sinon.stub(), mute: sinon.stub(), unmute: sinon.stub(), __raw__: '', write: function (str) { this.__raw__ += str; } } }); var ReadlineStub = function () { this.line = ''; this.input = new EventEmitter(); EventEmitter.apply(this, arguments); }; util.inherits(ReadlineStub, EventEmitter); _.assign(ReadlineStub.prototype, stub); module.exports = ReadlineStub; Inquirer.js-3.3.0/test/specs/000077500000000000000000000000001315775736500160455ustar00rootroot00000000000000Inquirer.js-3.3.0/test/specs/api.js000066400000000000000000000236071315775736500171640ustar00rootroot00000000000000/** * Test Prompt public APIs */ var expect = require('chai').expect; var _ = require('lodash'); var fixtures = require('../helpers/fixtures'); var ReadlineStub = require('../helpers/readline'); var inquirer = require('../../lib/inquirer'); var autosubmit = require('../helpers/events').autosubmit; // Define prompts and their public API var prompts = [ { name: 'input', apis: [ 'filter', 'validate', 'default', 'message', 'requiredValues' ] }, { name: 'confirm', apis: [ 'message', 'requiredValues' ] }, { name: 'rawlist', apis: [ 'filter', 'message', 'choices', 'requiredValues' ] }, { name: 'list', apis: [ 'filter', 'message', 'choices', 'requiredValues' ] }, { name: 'expand', apis: [ 'requiredValues', 'message' ] }, { name: 'checkbox', apis: [ 'requiredValues', 'message', 'choices', 'filter', 'validate' ] }, { name: 'password', apis: [ 'requiredValues', 'message', 'filter', 'validate', 'default' ] } ]; // Define tests var tests = { filter: function () { describe('filter API', function () { it('should filter the user input', function (done) { this.fixture.filter = function () { return 'pass'; }; var prompt = new this.Prompt(this.fixture, this.rl); prompt.run().then(function (answer) { expect(answer).to.equal('pass'); done(); }); this.rl.emit('line', ''); }); it('should allow filter function to be asynchronous', function (done) { this.fixture.filter = function () { var done = this.async(); setTimeout(function () { done(null, 'pass'); }, 0); }; var prompt = new this.Prompt(this.fixture, this.rl); prompt.run().then(function (answer) { expect(answer).to.equal('pass'); done(); }); this.rl.emit('line', ''); }); it('should handle errors produced in async filters', function () { var called = 0; var rl = this.rl; this.fixture.filter = function () { called++; var cb = this.async(); if (called === 2) { return cb(null, 'pass'); } rl.emit('line'); return cb(new Error('fail')); }; var prompt = new this.Prompt(this.fixture, this.rl); var promise = prompt.run(); this.rl.emit('line'); return promise; }); it('should pass previous answers to the prompt filter function', function () { var prompt = inquirer.createPromptModule(); var questions = [{ type: 'confirm', name: 'q1', message: 'message' }, { type: 'confirm', name: 'q2', message: 'message', filter: function (input, answers) { expect(answers.q1).to.be.true; return input; }, default: false }]; var promise = prompt(questions); autosubmit(promise.ui); return promise.then(function (answers) { expect(answers.q1).to.be.true; expect(answers.q2).to.be.false; }); }); }); }, validate: function () { describe('validate API', function () { it('should reject input if boolean false is returned', function () { var called = 0; this.fixture.validate = function () { called++; // Make sure returning false won't continue if (called === 2) { return true; } this.rl.emit('line'); return false; }.bind(this); var prompt = new this.Prompt(this.fixture, this.rl); var promise = prompt.run(); this.rl.emit('line'); return promise; }); it('should reject input if a string is returned', function (done) { var self = this; var called = 0; var errorMessage = 'uh oh, error!'; this.fixture.validate = function () { called++; // Make sure returning false won't continue if (called === 2) { done(); return; } self.rl.emit('line'); return errorMessage; }; var prompt = new this.Prompt(this.fixture, this.rl); prompt.run(); this.rl.emit('line'); }); it('should reject input if a Promise is returned which rejects', function (done) { var self = this; var called = 0; var errorMessage = 'uh oh, error!'; this.fixture.validate = function () { called++; // Make sure returning false won't continue if (called === 2) { done(); return; } self.rl.emit('line'); return Promise.reject(errorMessage); }; var prompt = new this.Prompt(this.fixture, this.rl); prompt.run(); this.rl.emit('line'); }); it('should accept input if boolean true is returned', function () { var called = 0; this.fixture.validate = function () { called++; return true; }; var prompt = new this.Prompt(this.fixture, this.rl); var promise = prompt.run().then(function () { expect(called).to.equal(1); }); this.rl.emit('line'); return promise; }); it('should allow validate function to be asynchronous', function () { var self = this; var called = 0; this.fixture.validate = function () { var done = this.async(); setTimeout(function () { called++; // Make sure returning false won't continue if (called === 2) { done(null, true); } else { self.rl.emit('line'); } done(false); }, 0); }; var prompt = new this.Prompt(this.fixture, this.rl); var promise = prompt.run(); this.rl.emit('line'); return promise; }); it('should allow validate function to return a Promise', function () { this.fixture.validate = function () { return Promise.resolve(true); }; var prompt = new this.Prompt(this.fixture, this.rl); var promise = prompt.run(); this.rl.emit('line'); return promise; }); it('should pass previous answers to the prompt validation function', function () { var prompt = inquirer.createPromptModule(); var questions = [{ type: 'confirm', name: 'q1', message: 'message' }, { type: 'confirm', name: 'q2', message: 'message', validate: function (input, answers) { expect(answers.q1).to.be.true; return true; }, default: false }]; var promise = prompt(questions); autosubmit(promise.ui); return promise.then(function (answers) { expect(answers.q1).to.be.true; expect(answers.q2).to.be.false; }); }); }); }, default: function () { describe('default API', function () { it('should allow a default value', function (done) { this.fixture.default = 'pass'; var prompt = new this.Prompt(this.fixture, this.rl); prompt.run().then(function (answer) { expect(this.rl.output.__raw__).to.contain('(pass)'); expect(answer).to.equal('pass'); done(); }.bind(this)); this.rl.emit('line', ''); }); it('should allow a falsy default value', function (done) { this.fixture.default = 0; var prompt = new this.Prompt(this.fixture, this.rl); prompt.run().then(function (answer) { expect(this.rl.output.__raw__).to.contain('(0)'); expect(answer).to.equal(0); done(); }.bind(this)); this.rl.emit('line', ''); }); }); }, message: function () { describe('message API', function () { it('should print message on screen', function () { this.fixture.message = 'Foo bar bar foo bar'; var prompt = new this.Prompt(this.fixture, this.rl); prompt.run(); expect(this.rl.output.__raw__).to.contain(this.fixture.message); }); }); }, choices: function () { describe('choices API', function () { it('should print choices to screen', function () { var prompt = new this.Prompt(this.fixture, this.rl); var choices = prompt.opt.choices; prompt.run(); _.each(choices.filter(inquirer.Separator.exclude), function (choice) { expect(this.rl.output.__raw__).to.contain(choice.name); }.bind(this)); }); }); }, requiredValues: function () { describe('Missing value', function () { it('`message` should throw', function () { var mkPrompt = function () { delete this.fixture.message; return new this.Prompt(this.fixture, this.rl); }.bind(this); expect(mkPrompt).to.throw(/message/); }); it('`name` should throw', function () { var mkPrompt = function () { delete this.fixture.name; return new this.Prompt(this.fixture, this.rl); }.bind(this); expect(mkPrompt).to.throw(/name/); }); }); } }; // Run tests describe('Prompt public APIs', function () { _.each(prompts, function (detail) { describe('on ' + detail.name + ' prompt', function () { beforeEach(function () { this.fixture = _.clone(fixtures[detail.name]); this.Prompt = inquirer.prompt.prompts[detail.name]; this.rl = new ReadlineStub(); }); _.each(detail.apis, function (apiName) { tests[apiName](detail.name); }); }); }); }); Inquirer.js-3.3.0/test/specs/inquirer.js000066400000000000000000000347641315775736500202570ustar00rootroot00000000000000/** * Inquirer public API test */ var expect = require('chai').expect; var sinon = require('sinon'); var _ = require('lodash'); var rx = require('rx-lite-aggregates'); var inquirer = require('../../lib/inquirer'); var autosubmit = require('../helpers/events').autosubmit; describe('inquirer.prompt', function () { beforeEach(function () { this.prompt = inquirer.createPromptModule(); }); it('should close and create a new readline instances each time it\'s called', function () { var ctx = this; var rl1; var promise = this.prompt({ type: 'confirm', name: 'q1', message: 'message' }); rl1 = promise.ui.rl; rl1.emit('line'); return promise.then(function () { expect(rl1.close.called).to.be.true; expect(rl1.output.end.called).to.be.true; var rl2; var promise2 = ctx.prompt({ type: 'confirm', name: 'q1', message: 'message' }); rl2 = promise2.ui.rl; rl2.emit('line'); return promise2.then(function () { expect(rl2.close.called).to.be.true; expect(rl2.output.end.called).to.be.true; expect(rl1).to.not.equal(rl2); }); }); }); it('should take a prompts array and return answers', function () { var prompts = [{ type: 'confirm', name: 'q1', message: 'message' }, { type: 'confirm', name: 'q2', message: 'message', default: false }]; var promise = this.prompt(prompts); autosubmit(promise.ui); return promise.then(function (answers) { expect(answers.q1).to.be.true; expect(answers.q2).to.be.false; }); }); it('should take a prompts array with nested names', function () { var prompts = [{ type: 'confirm', name: 'foo.bar.q1', message: 'message' }, { type: 'confirm', name: 'foo.q2', message: 'message', default: false }]; var promise = this.prompt(prompts); autosubmit(promise.ui); return promise.then(function (answers) { expect(answers).to.deep.equal({ foo: { bar: { q1: true }, q2: false } }); }); }); it('should take a single prompt and return answer', function () { var prompt = { type: 'input', name: 'q1', message: 'message', default: 'bar' }; var promise = this.prompt(prompt); promise.ui.rl.emit('line'); return promise.then(function (answers) { expect(answers.q1).to.equal('bar'); }); }); it('should parse `message` if passed as a function', function () { var stubMessage = 'foo'; this.prompt.registerPrompt('stub', function (params) { this.opt = { when: function () { return true; } }; this.run = sinon.stub().returns(Promise.resolve()); expect(params.message).to.equal(stubMessage); }); var msgFunc = function (answers) { expect(answers.name1).to.equal('bar'); return stubMessage; }; var prompts = [{ type: 'input', name: 'name1', message: 'message', default: 'bar' }, { type: 'stub', name: 'name', message: msgFunc }]; var promise = this.prompt(prompts); promise.ui.rl.emit('line'); promise.ui.rl.emit('line'); return promise.then(function () { // Ensure we're not overwriting original prompt values. expect(prompts[1].message).to.equal(msgFunc); }); }); it('should run asynchronous `message`', function (done) { var stubMessage = 'foo'; this.prompt.registerPrompt('stub', function (params) { this.opt = { when: function () { return true; } }; this.run = sinon.stub().returns(Promise.resolve()); expect(params.message).to.equal(stubMessage); done(); }); var prompts = [{ type: 'input', name: 'name1', message: 'message', default: 'bar' }, { type: 'stub', name: 'name', message: function (answers) { expect(answers.name1).to.equal('bar'); var goOn = this.async(); setTimeout(function () { goOn(null, stubMessage); }, 0); } }]; var promise = this.prompt(prompts, function () {}); promise.ui.rl.emit('line'); }); it('should parse `default` if passed as a function', function (done) { var stubDefault = 'foo'; this.prompt.registerPrompt('stub', function (params) { this.opt = { when: function () { return true; } }; this.run = sinon.stub().returns(Promise.resolve()); expect(params.default).to.equal(stubDefault); done(); }); var prompts = [{ type: 'input', name: 'name1', message: 'message', default: 'bar' }, { type: 'stub', name: 'name', message: 'message', default: function (answers) { expect(answers.name1).to.equal('bar'); return stubDefault; } }]; var promise = this.prompt(prompts, function () {}); promise.ui.rl.emit('line'); }); it('should run asynchronous `default`', function () { var goesInDefault = false; var input2Default = 'foo'; var promise; var prompts = [{ type: 'input', name: 'name1', message: 'message', default: 'bar' }, { type: 'input2', name: 'q2', message: 'message', default: function (answers) { goesInDefault = true; expect(answers.name1).to.equal('bar'); var goOn = this.async(); setTimeout(function () { goOn(null, input2Default); }, 0); setTimeout(function () { promise.ui.rl.emit('line'); }, 10); } }]; promise = this.prompt(prompts); promise.ui.rl.emit('line'); return promise.then(function (answers) { expect(goesInDefault).to.be.true; expect(answers.q2).to.equal(input2Default); }); }); it('should pass previous answers to the prompt constructor', function (done) { this.prompt.registerPrompt('stub', function (params, rl, answers) { this.run = sinon.stub().returns(Promise.resolve()); expect(answers.name1).to.equal('bar'); done(); }); var prompts = [{ type: 'input', name: 'name1', message: 'message', default: 'bar' }, { type: 'stub', name: 'name', message: 'message' }]; var promise = this.prompt(prompts); promise.ui.rl.emit('line'); }); it('should parse `choices` if passed as a function', function (done) { var stubChoices = ['foo', 'bar']; this.prompt.registerPrompt('stub', function (params) { this.run = sinon.stub().returns(Promise.resolve()); this.opt = { when: function () { return true; } }; expect(params.choices).to.equal(stubChoices); done(); }); var prompts = [{ type: 'input', name: 'name1', message: 'message', default: 'bar' }, { type: 'stub', name: 'name', message: 'message', choices: function (answers) { expect(answers.name1).to.equal('bar'); return stubChoices; } }]; var promise = this.prompt(prompts, function () {}); promise.ui.rl.emit('line'); }); it('should returns a promise', function (done) { var prompt = { type: 'input', name: 'q1', message: 'message', default: 'bar' }; var promise = this.prompt(prompt); promise.then(function (answers) { expect(answers.q1).to.equal('bar'); done(); }); promise.ui.rl.emit('line'); }); it('should expose the Reactive interface', function (done) { var prompts = [{ type: 'input', name: 'name1', message: 'message', default: 'bar' }, { type: 'input', name: 'name', message: 'message', default: 'doe' }]; var promise = this.prompt(prompts); var spy = sinon.spy(); promise.ui.process.subscribe(spy, function () {}, function () { sinon.assert.calledWith(spy, {name: 'name1', answer: 'bar'}); sinon.assert.calledWith(spy, {name: 'name', answer: 'doe'}); done(); }); autosubmit(promise.ui); }); it('should expose the UI', function (done) { var promise = this.prompt([], function () {}); expect(promise.ui.answers).to.be.an('object'); done(); }); it('takes an Observable as question', function () { var promise; var prompts = rx.Observable.create(function (obs) { obs.onNext({ type: 'confirm', name: 'q1', message: 'message' }); setTimeout(function () { obs.onNext({ type: 'confirm', name: 'q2', message: 'message', default: false }); obs.onCompleted(); promise.ui.rl.emit('line'); }, 30); }); promise = this.prompt(prompts); promise.ui.rl.emit('line'); return promise.then(function (answers) { expect(answers.q1).to.be.true; expect(answers.q2).to.be.false; }); }); describe('hierarchical mode (`when`)', function () { it('should pass current answers to `when`', function () { var prompts = [{ type: 'confirm', name: 'q1', message: 'message' }, { name: 'q2', message: 'message', when: function (answers) { expect(answers).to.be.an('object'); expect(answers.q1).to.be.true; } }]; var promise = this.prompt(prompts); autosubmit(promise.ui); return promise; }); it('should run prompt if `when` returns true', function () { var goesInWhen = false; var prompts = [{ type: 'confirm', name: 'q1', message: 'message' }, { type: 'input', name: 'q2', message: 'message', default: 'bar-var', when: function () { goesInWhen = true; return true; } }]; var promise = this.prompt(prompts); autosubmit(promise.ui); return promise.then(function (answers) { expect(goesInWhen).to.be.true; expect(answers.q2).to.equal('bar-var'); }); }); it('should run prompt if `when` is true', function () { var prompts = [{ type: 'confirm', name: 'q1', message: 'message' }, { type: 'input', name: 'q2', message: 'message', default: 'bar-var', when: true }]; var promise = this.prompt(prompts); autosubmit(promise.ui); return promise.then(function (answers) { expect(answers.q2).to.equal('bar-var'); }); }); it('should not run prompt if `when` returns false', function () { var goesInWhen = false; var prompts = [{ type: 'confirm', name: 'q1', message: 'message' }, { type: 'confirm', name: 'q2', message: 'message', when: function () { goesInWhen = true; return false; } }, { type: 'input', name: 'q3', message: 'message', default: 'foo' }]; var promise = this.prompt(prompts); autosubmit(promise.ui); return promise.then(function (answers) { expect(goesInWhen).to.be.true; expect(answers.q2).to.not.exist; expect(answers.q3).to.equal('foo'); expect(answers.q1).to.be.true; }); }); it('should not run prompt if `when` is false', function () { var prompts = [{ type: 'confirm', name: 'q1', message: 'message' }, { type: 'confirm', name: 'q2', message: 'message', when: false }, { type: 'input', name: 'q3', message: 'message', default: 'foo' }]; var promise = this.prompt(prompts); autosubmit(promise.ui); return promise.then(function (answers) { expect(answers.q2).to.not.exist; expect(answers.q3).to.equal('foo'); expect(answers.q1).to.be.true; }); }); it('should run asynchronous `when`', function () { var promise; var goesInWhen = false; var prompts = [{ type: 'confirm', name: 'q1', message: 'message' }, { type: 'input', name: 'q2', message: 'message', default: 'foo-bar', when: function () { goesInWhen = true; var goOn = this.async(); setTimeout(function () { goOn(null, true); }, 0); setTimeout(function () { promise.ui.rl.emit('line'); }, 10); } }]; promise = this.prompt(prompts); autosubmit(promise.ui); return promise.then(function (answers) { expect(goesInWhen).to.be.true; expect(answers.q2).to.equal('foo-bar'); }); }); }); describe('#registerPrompt()', function () { it('register new prompt types', function (done) { var questions = [{type: 'foo', message: 'something'}]; inquirer.registerPrompt('foo', function (question, rl, answers) { expect(question).to.eql(questions[0]); expect(answers).to.eql({}); this.run = sinon.stub().returns(Promise.resolve()); done(); }); inquirer.prompt(questions, _.noop); }); it('overwrite default prompt types', function (done) { var questions = [{type: 'confirm', message: 'something'}]; inquirer.registerPrompt('confirm', function () { this.run = sinon.stub().returns(Promise.resolve()); done(); }); inquirer.prompt(questions, _.noop); inquirer.restoreDefaultPrompts(); }); }); describe('#restoreDefaultPrompts()', function () { it('restore default prompts', function () { var ConfirmPrompt = inquirer.prompt.prompts.confirm; inquirer.registerPrompt('confirm', _.noop); inquirer.restoreDefaultPrompts(); expect(ConfirmPrompt).to.equal(inquirer.prompt.prompts.confirm); }); }); // see: https://github.com/SBoudrias/Inquirer.js/pull/326 it('does not throw exception if cli-width reports width of 0', function () { var original = process.stdout.getWindowSize; process.stdout.getWindowSize = function () { return [0]; }; var prompt = inquirer.createPromptModule(); var prompts = [{ type: 'confirm', name: 'q1', message: 'message' }]; var promise = prompt(prompts); promise.ui.rl.emit('line'); return promise.then(function (answers) { process.stdout.getWindowSize = original; expect(answers.q1).to.equal(true); }); }); }); Inquirer.js-3.3.0/test/specs/objects/000077500000000000000000000000001315775736500174765ustar00rootroot00000000000000Inquirer.js-3.3.0/test/specs/objects/choice.js000066400000000000000000000025611315775736500212720ustar00rootroot00000000000000var expect = require('chai').expect; var Choice = require('../../../lib/objects/choice'); var Separator = require('../../../lib/objects/separator'); describe('Choice object', function () { it('should normalize accept String as value', function () { var choice = new Choice('foo'); expect(choice.name).to.equal('foo'); expect(choice.value).to.equal('foo'); }); it('should use value|name as default if default property is missing', function () { var onlyName = new Choice({name: 'foo'}); var onlyVal = new Choice({value: 'bar'}); expect(onlyName.name).to.equal('foo'); expect(onlyName.value).to.equal('foo'); expect(onlyName.short).to.equal('foo'); expect(onlyVal.name).to.equal('bar'); expect(onlyVal.value).to.equal('bar'); expect(onlyVal.short).to.equal('bar'); }); it('should keep extra keys', function () { var choice = new Choice({name: 'foo', extra: '1'}); expect(choice.extra).to.equal('1'); expect(choice.name).to.equal('foo'); expect(choice.value).to.equal('foo'); }); it('shouldn\'t process Separator object', function () { var sep = new Choice(new Separator()); expect(sep).to.be.instanceOf(Separator); }); it('shouldn\'t process object with property type=separator', function () { var obj = {type: 'separator'}; var sep = new Choice(obj); expect(sep).to.equal(obj); }); }); Inquirer.js-3.3.0/test/specs/objects/choices.js000066400000000000000000000047271315775736500214630ustar00rootroot00000000000000var expect = require('chai').expect; var inquirer = require('../../../lib/inquirer'); var Choices = require('../../../lib/objects/choices'); var Choice = require('../../../lib/objects/choice'); describe('Choices collection', function () { it('should create Choice object from array member', function () { var choices = new Choices(['bar', {name: 'foo'}]); expect(choices.getChoice(0)).to.be.instanceOf(Choice); expect(choices.getChoice(1)).to.be.instanceOf(Choice); }); it('should not process Separator object', function () { var sep = new inquirer.Separator(); var choices = new Choices(['Bar', sep]); expect(choices.get(0).name).to.equal('Bar'); expect(choices.get(1)).to.equal(sep); }); it('should provide access to length information', function () { var choices = new Choices(['Bar', new inquirer.Separator(), 'foo']); expect(choices.length).to.equal(3); expect(choices.realLength).to.equal(2); choices.length = 1; expect(choices.length).to.equal(1); expect(choices.get(1)).to.not.exist; expect(function () { choices.realLength = 0; }).to.throw; }); it('should allow plucking choice content', function () { var choices = new Choices([{name: 'n', key: 'foo'}, {name: 'a', key: 'lab'}]); expect(choices.pluck('key')).to.eql(['foo', 'lab']); }); it('should allow filtering value with where', function () { var choices = new Choices([{name: 'n', key: 'foo'}, {name: 'a', key: 'lab'}]); expect(choices.where({key: 'lab'})).to.eql([{ name: 'a', value: 'a', short: 'a', key: 'lab', disabled: undefined }]); }); it('should façade forEach', function () { var raw = ['a', 'b', 'c']; var choices = new Choices(raw); choices.forEach(function (val, i) { expect(val.name).to.equal(raw[i]); }); }); it('should façade filter', function () { var choices = new Choices(['a', 'b', 'c']); var filtered = choices.filter(function (val) { return val.name === 'a'; }); expect(filtered.length).to.equal(1); expect(filtered[0].name).to.equal('a'); }); it('should façade push and update the realChoices internally', function () { var choices = new Choices(['a']); choices.push('b', new inquirer.Separator()); expect(choices.length).to.equal(3); expect(choices.realLength).to.equal(2); expect(choices.getChoice(1)).to.be.instanceOf(Choice); expect(choices.get(2)).to.be.instanceOf(inquirer.Separator); }); }); Inquirer.js-3.3.0/test/specs/objects/separator.js000066400000000000000000000022741315775736500220410ustar00rootroot00000000000000var expect = require('chai').expect; var stripAnsi = require('strip-ansi'); var Separator = require('../../../lib/objects/separator'); var Inquirer = require('../../../lib/inquirer'); describe('Separator constructor', function () { it('should set a default', function () { var sep = new Separator(); expect(stripAnsi(sep.toString())).to.equal('──────────────'); }); it('should set user input as separator', function () { var sep = new Separator('foo bar'); expect(stripAnsi(sep.toString())).to.equal('foo bar'); }); it('instances should be stringified when appended to a string', function () { var sep = new Separator('foo bar'); expect(stripAnsi(String(sep))).to.equal('foo bar'); }); it('should be exposed on Inquirer object', function () { expect(Inquirer.Separator).to.equal(Separator); }); it('should expose a helper function to check for separator', function () { expect(Separator.exclude({})).to.be.true; expect(Separator.exclude(new Separator())).to.be.false; }); it('give the type \'separator\' to its object', function () { var sep = new Separator(); expect(sep.type).to.equal('separator'); }); }); Inquirer.js-3.3.0/test/specs/prompts/000077500000000000000000000000001315775736500175515ustar00rootroot00000000000000Inquirer.js-3.3.0/test/specs/prompts/base.js000066400000000000000000000013241315775736500210210ustar00rootroot00000000000000var expect = require('chai').expect; var ReadlineStub = require('../../helpers/readline'); var Base = require('../../../lib/prompts/base'); describe('`base` prompt (e.g. prompt helpers)', function () { beforeEach(function () { this.rl = new ReadlineStub(); this.base = new Base({ message: 'foo bar', name: 'name' }, this.rl); }); it('should not point by reference to the entry `question` object', function () { var question = { message: 'foo bar', name: 'name' }; var base = new Base(question, this.rl); expect(question).to.not.equal(base.opt); expect(question.name).to.equal(base.opt.name); expect(question.message).to.equal(base.opt.message); }); }); Inquirer.js-3.3.0/test/specs/prompts/checkbox.js000066400000000000000000000175251315775736500217070ustar00rootroot00000000000000var expect = require('chai').expect; var _ = require('lodash'); var ReadlineStub = require('../../helpers/readline'); var fixtures = require('../../helpers/fixtures'); var Checkbox = require('../../../lib/prompts/checkbox'); describe('`checkbox` prompt', function () { beforeEach(function () { this.fixture = _.clone(fixtures.checkbox); this.rl = new ReadlineStub(); this.checkbox = new Checkbox(this.fixture, this.rl); }); it('should return a single selected choice in an array', function (done) { this.checkbox.run().then(function (answer) { expect(answer).to.be.an('array'); expect(answer.length).to.equal(1); expect(answer[0]).to.equal('choice 1'); done(); }); this.rl.input.emit('keypress', ' ', {name: 'space'}); this.rl.emit('line'); }); it('should return multiples selected choices in an array', function (done) { this.checkbox.run().then(function (answer) { expect(answer).to.be.an('array'); expect(answer.length).to.equal(2); expect(answer[0]).to.equal('choice 1'); expect(answer[1]).to.equal('choice 2'); done(); }); this.rl.input.emit('keypress', ' ', {name: 'space'}); this.rl.input.emit('keypress', null, {name: 'down'}); this.rl.input.emit('keypress', ' ', {name: 'space'}); this.rl.emit('line'); }); it('should check defaults choices', function (done) { this.fixture.choices = [ {name: '1', checked: true}, {name: '2', checked: false}, {name: '3', checked: false} ]; this.checkbox = new Checkbox(this.fixture, this.rl); this.checkbox.run().then(function (answer) { expect(answer.length).to.equal(1); expect(answer[0]).to.equal('1'); done(); }); this.rl.emit('line'); }); it('provide an array of checked choice to validate', function () { this.fixture.choices = [ {name: '1', checked: true}, {name: '2', checked: 1}, {name: '3', checked: false} ]; this.fixture.validate = function (answer) { expect(answer).to.eql(['1', '2']); return true; }; this.checkbox = new Checkbox(this.fixture, this.rl); var promise = this.checkbox.run(); this.rl.emit('line'); return promise; }); it('should check defaults choices if given as array of values', function (done) { this.fixture.choices = [ {name: '1'}, {name: '2'}, {name: '3'} ]; this.fixture.default = ['1', '3']; this.checkbox = new Checkbox(this.fixture, this.rl); this.checkbox.run().then(function (answer) { expect(answer.length).to.equal(2); expect(answer[0]).to.equal('1'); expect(answer[1]).to.equal('3'); done(); }); this.rl.emit('line'); }); it('should toggle choice when hitting space', function (done) { this.checkbox.run().then(function (answer) { expect(answer.length).to.equal(1); expect(answer[0]).to.equal('choice 1'); done(); }); this.rl.input.emit('keypress', ' ', {name: 'space'}); this.rl.input.emit('keypress', null, {name: 'down'}); this.rl.input.emit('keypress', ' ', {name: 'space'}); this.rl.input.emit('keypress', ' ', {name: 'space'}); this.rl.emit('line'); }); it('should allow for arrow navigation', function (done) { this.checkbox.run().then(function (answer) { expect(answer.length).to.equal(1); expect(answer[0]).to.equal('choice 2'); done(); }); this.rl.input.emit('keypress', null, {name: 'down'}); this.rl.input.emit('keypress', null, {name: 'down'}); this.rl.input.emit('keypress', null, {name: 'up'}); this.rl.input.emit('keypress', ' ', {name: 'space'}); this.rl.emit('line'); }); it('should allow for vi-style navigation', function (done) { this.checkbox.run().then(function (answer) { expect(answer.length).to.equal(1); expect(answer[0]).to.equal('choice 2'); done(); }); this.rl.input.emit('keypress', 'j', {name: 'j'}); this.rl.input.emit('keypress', 'j', {name: 'j'}); this.rl.input.emit('keypress', 'k', {name: 'k'}); this.rl.input.emit('keypress', ' ', {name: 'space'}); this.rl.emit('line'); }); it('should allow for emacs-style navigation', function (done) { this.checkbox.run().then(function (answer) { expect(answer.length).to.equal(1); expect(answer[0]).to.equal('choice 2'); done(); }); this.rl.input.emit('keypress', 'n', {name: 'n', ctrl: true}); this.rl.input.emit('keypress', 'n', {name: 'n', ctrl: true}); this.rl.input.emit('keypress', 'p', {name: 'p', ctrl: true}); this.rl.input.emit('keypress', ' ', {name: 'space'}); this.rl.emit('line'); }); it('should allow 1-9 shortcut key', function (done) { this.checkbox.run().then(function (answer) { expect(answer.length).to.equal(1); expect(answer[0]).to.equal('choice 2'); done(); }); this.rl.input.emit('keypress', '2'); this.rl.emit('line'); }); it('should select all answers if is pressed', function () { var promise = this.checkbox.run(); this.rl.input.emit('keypress', 'a', {name: 'a'}); this.rl.emit('line'); return promise.then(function (answer) { expect(answer.length).to.equal(3); }); }); it('should select no answers if is pressed a second time', function () { var promise = this.checkbox.run(); this.rl.input.emit('keypress', 'a', {name: 'a'}); this.rl.input.emit('keypress', 'a', {name: 'a'}); this.rl.emit('line'); return promise.then(function (answer) { expect(answer.length).to.equal(0); }); }); it('should select the inverse of the current selection when is pressed', function () { var promise = this.checkbox.run(); this.rl.input.emit('keypress', 'i', {name: 'i'}); this.rl.emit('line'); return promise.then(function (answer) { expect(answer.length).to.equal(3); }); }); describe('with disabled choices', function () { beforeEach(function () { this.fixture.choices.push({ name: 'dis1', disabled: true }); this.fixture.choices.push({ name: 'dis2', disabled: 'uh oh' }); this.checkbox = new Checkbox(this.fixture, this.rl); }); it('output disabled choices and custom messages', function () { var promise = this.checkbox.run(); this.rl.emit('line'); return promise.then(function () { expect(this.rl.output.__raw__).to.contain('- dis1 (Disabled)'); expect(this.rl.output.__raw__).to.contain('- dis2 (uh oh)'); }.bind(this)); }); it('skip disabled choices', function (done) { this.checkbox.run().then(function (answer) { expect(answer[0]).to.equal('choice 1'); done(); }); this.rl.input.emit('keypress', null, {name: 'down'}); this.rl.input.emit('keypress', null, {name: 'down'}); this.rl.input.emit('keypress', null, {name: 'down'}); this.rl.input.emit('keypress', ' ', {name: 'space'}); this.rl.emit('line'); }); it('uncheck defaults choices who\'re disabled', function (done) { this.fixture.choices = [ {name: '1', checked: true, disabled: true}, {name: '2'} ]; this.checkbox = new Checkbox(this.fixture, this.rl); this.checkbox.run().then(function (answer) { expect(answer.length).to.equal(0); done(); }); this.rl.emit('line'); }); it('disabled can be a function', function () { this.fixture.choices = [ { name: 'dis1', disabled: function (answers) { expect(answers.foo).to.equal('foo'); return true; } } ]; this.checkbox = new Checkbox(this.fixture, this.rl, {foo: 'foo'}); var promise = this.checkbox.run(); this.rl.emit('line'); promise.then(function () { expect(this.rl.output.__raw__).to.contain('- dis1 (Disabled)'); }.bind(this)); }); }); }); Inquirer.js-3.3.0/test/specs/prompts/confirm.js000066400000000000000000000045031315775736500215460ustar00rootroot00000000000000var expect = require('chai').expect; var _ = require('lodash'); var ReadlineStub = require('../../helpers/readline'); var fixtures = require('../../helpers/fixtures'); var Confirm = require('../../../lib/prompts/confirm'); describe('`confirm` prompt', function () { beforeEach(function () { this.fixture = _.clone(fixtures.confirm); this.rl = new ReadlineStub(); this.confirm = new Confirm(this.fixture, this.rl); }); afterEach(function () { Confirm.prototype.write = this._write; }); it('should default to true', function (done) { this.confirm.run().then(function (answer) { expect(this.rl.output.__raw__).to.contain('Y/n'); expect(answer).to.be.true; done(); }.bind(this)); this.rl.emit('line', ''); }); it('should allow a default `false` value', function (done) { this.fixture.default = false; var falseConfirm = new Confirm(this.fixture, this.rl); falseConfirm.run().then(function (answer) { expect(this.rl.output.__raw__).to.contain('y/N'); expect(answer).to.be.false; done(); }.bind(this)); this.rl.emit('line', ''); }); it('should allow a default `true` value', function (done) { this.fixture.default = true; var falseConfirm = new Confirm(this.fixture, this.rl); falseConfirm.run().then(function (answer) { expect(this.rl.output.__raw__).to.contain('Y/n'); expect(answer).to.be.true; done(); }.bind(this)); this.rl.emit('line', ''); }); it('should parse \'Y\' value to boolean true', function (done) { this.confirm.run().then(function (answer) { expect(answer).to.be.true; done(); }); this.rl.emit('line', 'Y'); }); it('should parse \'Yes\' value to boolean true', function (done) { this.confirm.run().then(function (answer) { expect(answer).to.be.true; done(); }); this.rl.emit('line', 'Yes'); }); it('should parse \'No\' value to boolean false', function (done) { this.confirm.run().then(function (answer) { expect(answer).to.be.false; done(); }); this.rl.emit('line', 'No'); }); it('should parse every other string value to boolean false', function (done) { this.confirm.run().then(function (answer) { expect(answer).to.be.false; done(); }); this.rl.emit('line', 'bla bla foo'); }); }); Inquirer.js-3.3.0/test/specs/prompts/editor.js000066400000000000000000000016031315775736500213750ustar00rootroot00000000000000var expect = require('chai').expect; var _ = require('lodash'); var ReadlineStub = require('../../helpers/readline'); var fixtures = require('../../helpers/fixtures'); var Editor = require('../../../lib/prompts/editor'); describe('`editor` prompt', function () { beforeEach(function () { this.previousVisual = process.env.VISUAL; // Writes the word "testing" to the file process.env.VISUAL = 'node ./test/bin/write.js testing'; this.fixture = _.clone(fixtures.editor); this.rl = new ReadlineStub(); }); afterEach(function () { process.env.VISUAL = this.previousVisual; }); it('should retrieve temporary files contents', function () { var prompt = new Editor(this.fixture, this.rl); var promise = prompt.run(); this.rl.emit('line', ''); return promise.then(function (answer) { return expect(answer).to.equal('testing'); }); }); }); Inquirer.js-3.3.0/test/specs/prompts/expand.js000066400000000000000000000101421315775736500213640ustar00rootroot00000000000000var expect = require('chai').expect; var _ = require('lodash'); var ReadlineStub = require('../../helpers/readline'); var fixtures = require('../../helpers/fixtures'); var Expand = require('../../../lib/prompts/expand'); describe('`expand` prompt', function () { beforeEach(function () { this.fixture = _.clone(fixtures.expand); this.rl = new ReadlineStub(); this.expand = new Expand(this.fixture, this.rl); }); it('should throw if `key` is missing', function () { var mkPrompt = function () { this.fixture.choices = ['a', 'a']; return new Expand(this.fixture, this.rl); }.bind(this); expect(mkPrompt).to.throw(/Format error/); }); it('should throw if `key` is duplicate', function () { var mkPrompt = function () { this.fixture.choices = [ {key: 'a', name: 'foo'}, {key: 'a', name: 'foo'} ]; return new Expand(this.fixture, this.rl); }.bind(this); expect(mkPrompt).to.throw(/Duplicate key error/); }); it('should throw if `key` is `h`', function () { var mkPrompt = function () { this.fixture.choices = [ {key: 'h', name: 'foo'} ]; return new Expand(this.fixture, this.rl); }.bind(this); expect(mkPrompt).to.throw(/Reserved key error/); }); it('should allow false as a value', function () { var promise = this.expand.run(); this.rl.emit('line', 'd'); return promise.then(function (answer) { expect(answer).to.equal(false); }); }); it('pass the value as answer, and display short on the prompt', function () { this.fixture.choices = [ {key: 'a', name: 'A Name', value: 'a value', short: 'ShortA'}, {key: 'b', name: 'B Name', value: 'b value', short: 'ShortB'} ]; var prompt = new Expand(this.fixture, this.rl); var promise = prompt.run(); this.rl.emit('line', 'b'); return promise.then(function (answer) { expect(answer).to.equal('b value'); expect(this.rl.output.__raw__).to.match(/ShortB/); }.bind(this)); }); it('should use the `default` argument value', function (done) { this.fixture.default = 1; this.expand = new Expand(this.fixture, this.rl); this.expand.run().then(function (answer) { expect(answer).to.equal('bar'); done(); }); this.rl.emit('line'); }); it('should return the user input', function (done) { this.expand.run().then(function (answer) { expect(answer).to.equal('bar'); done(); }); this.rl.emit('line', 'b'); }); it('should strip the user input', function (done) { this.expand.run().then(function (answer) { expect(answer).to.equal('bar'); done(); }); this.rl.emit('line', ' b '); }); it('should have help option', function (done) { this.expand.run().then(function (answer) { expect(this.rl.output.__raw__).to.match(/a\) acab/); expect(this.rl.output.__raw__).to.match(/b\) bar/); expect(answer).to.equal('chile'); done(); }.bind(this)); this.rl.emit('line', 'h'); this.rl.emit('line', 'c'); }); it('should not allow invalid command', function () { var self = this; var promise = this.expand.run(); this.rl.emit('line', 'blah'); setTimeout(function () { self.rl.emit('line', 'a'); }, 10); return promise; }); it('should display and capitalize the default choice `key`', function () { this.fixture.default = 1; this.expand = new Expand(this.fixture, this.rl); this.expand.run(); expect(this.rl.output.__raw__).to.contain('(aBcdh)'); }); it('should display and capitalize the default choice H (Help) `key` if none provided', function () { delete this.fixture.default; this.expand = new Expand(this.fixture, this.rl); this.expand.run(); expect(this.rl.output.__raw__).to.contain('(abcdH)'); }); it('should \'autocomplete\' the user input', function (done) { this.expand = new Expand(this.fixture, this.rl); this.expand.run(); this.rl.line = 'a'; this.rl.emit('keypress'); setTimeout(function () { expect(this.rl.output.__raw__).to.contain('acab'); done(); }.bind(this), 10); }); }); Inquirer.js-3.3.0/test/specs/prompts/input.js000066400000000000000000000017441315775736500212540ustar00rootroot00000000000000var expect = require('chai').expect; var _ = require('lodash'); var ReadlineStub = require('../../helpers/readline'); var fixtures = require('../../helpers/fixtures'); var Input = require('../../../lib/prompts/input'); describe('`input` prompt', function () { beforeEach(function () { this.fixture = _.clone(fixtures.input); this.rl = new ReadlineStub(); }); it('should use raw value from the user', function (done) { var input = new Input(this.fixture, this.rl); input.run().then(function (answer) { expect(answer).to.equal('Inquirer'); done(); }); this.rl.emit('line', 'Inquirer'); }); it('should output filtered value', function () { this.fixture.filter = function () { return 'pass'; }; var prompt = new Input(this.fixture, this.rl); var promise = prompt.run(); this.rl.emit('line', ''); return promise.then(function () { expect(this.rl.output.__raw__).to.contain('pass'); }.bind(this)); }); }); Inquirer.js-3.3.0/test/specs/prompts/list.js000066400000000000000000000112171315775736500210640ustar00rootroot00000000000000var expect = require('chai').expect; var _ = require('lodash'); var ReadlineStub = require('../../helpers/readline'); var fixtures = require('../../helpers/fixtures'); var List = require('../../../lib/prompts/list'); describe('`list` prompt', function () { beforeEach(function () { this.fixture = _.clone(fixtures.list); this.rl = new ReadlineStub(); this.list = new List(this.fixture, this.rl); }); it('should default to first choice', function (done) { this.list.run().then(function (answer) { expect(answer).to.equal('foo'); done(); }); this.rl.emit('line'); }); it('should move selected cursor on keypress', function (done) { this.list.run().then(function (answer) { expect(answer).to.equal('bar'); done(); }); this.rl.input.emit('keypress', '', {name: 'down'}); this.rl.emit('line'); }); it('should allow for arrow navigation', function (done) { this.list.run().then(function (answer) { expect(answer).to.equal('bar'); done(); }); this.rl.input.emit('keypress', '', {name: 'down'}); this.rl.input.emit('keypress', '', {name: 'down'}); this.rl.input.emit('keypress', '', {name: 'up'}); this.rl.emit('line'); }); it('should allow for vi-style navigation', function (done) { this.list.run().then(function (answer) { expect(answer).to.equal('bar'); done(); }); this.rl.input.emit('keypress', 'j', {name: 'j'}); this.rl.input.emit('keypress', 'j', {name: 'j'}); this.rl.input.emit('keypress', 'k', {name: 'k'}); this.rl.emit('line'); }); it('should allow for emacs-style navigation', function (done) { this.list.run().then(function (answer) { expect(answer).to.equal('bar'); done(); }); this.rl.input.emit('keypress', 'n', {name: 'n', ctrl: true}); this.rl.input.emit('keypress', 'n', {name: 'n', ctrl: true}); this.rl.input.emit('keypress', 'p', {name: 'p', ctrl: true}); this.rl.emit('line'); }); it('should loop the choices when going out of boundaries', function () { var promise1 = this.list.run().then(function (answer) { expect(answer).to.equal('bar'); }); this.rl.input.emit('keypress', '', {name: 'up'}); this.rl.input.emit('keypress', '', {name: 'up'}); this.rl.emit('line'); return promise1 .then(function () { this.list.selected = 0; // reset var promise2 = this.list.run().then(function (answer) { expect(answer).to.equal('foo'); }); this.rl.input.emit('keypress', '', {name: 'down'}); this.rl.input.emit('keypress', '', {name: 'down'}); this.rl.input.emit('keypress', '', {name: 'down'}); this.rl.emit('line'); return promise2; }.bind(this)); }); it('should require a choices array', function () { var mkPrompt = function () { return new List({name: 'foo', message: 'bar'}); }; expect(mkPrompt).to.throw(/choices/); }); it('should allow a numeric default', function (done) { this.fixture.default = 1; var list = new List(this.fixture, this.rl); list.run().then(function (answer) { expect(answer).to.equal('bar'); done(); }); this.rl.emit('line'); }); it('should work from a numeric default being the index', function (done) { this.fixture.default = 1; var list = new List(this.fixture, this.rl); list.run().then(function (answer) { expect(answer).to.equal('bum'); done(); }); this.rl.input.emit('keypress', '', {name: 'down'}); this.rl.emit('line'); }); it('should allow a string default being the value', function (done) { this.fixture.default = 'bar'; var list = new List(this.fixture, this.rl); list.run().then(function (answer) { expect(answer).to.equal('bar'); done(); }); this.rl.emit('line'); }); it('should work from a string default', function (done) { this.fixture.default = 'bar'; var list = new List(this.fixture, this.rl); list.run().then(function (answer) { expect(answer).to.equal('bum'); done(); }); this.rl.input.emit('keypress', '', {name: 'down'}); this.rl.emit('line'); }); it('shouldn\'t allow an invalid index as default', function (done) { this.fixture.default = 4; var list = new List(this.fixture, this.rl); list.run().then(function (answer) { expect(answer).to.equal('foo'); done(); }); this.rl.emit('line'); }); it('should allow 1-9 shortcut key', function (done) { this.list.run().then(function (answer) { expect(answer).to.equal('bar'); done(); }); this.rl.input.emit('keypress', '2'); this.rl.emit('line'); }); }); Inquirer.js-3.3.0/test/specs/prompts/password.js000066400000000000000000000031351315775736500217530ustar00rootroot00000000000000var stripAnsi = require('strip-ansi'); var expect = require('chai').expect; var _ = require('lodash'); var ReadlineStub = require('../../helpers/readline'); var fixtures = require('../../helpers/fixtures'); var Password = require('../../../lib/prompts/password'); function testMasking(rl, mask) { return function (answer) { expect(answer).to.equal('Inquirer'); var expectOutput = expect(stripAnsi(rl.output.__raw__)); if (mask) { expectOutput.to.contain(mask); } else { expectOutput.to.not.contain('********'); } }; } describe('`password` prompt', function () { beforeEach(function () { this.fixture = _.clone(fixtures.password); this.rl = new ReadlineStub(); }); it('should use raw value from the user without masking', function () { var password = new Password(this.fixture, this.rl); var promise = password.run().then(testMasking(this.rl, false)); this.rl.emit('line', 'Inquirer'); return promise; }); it('should mask the input with "*" if the `mask` option was provided by the user was `true`', function () { this.fixture.mask = true; var password = new Password(this.fixture, this.rl); var promise = password.run().then(testMasking(this.rl, '********')); this.rl.emit('line', 'Inquirer'); return promise; }); it('should mask the input if a `mask` string was provided by the user', function () { this.fixture.mask = '#'; var password = new Password(this.fixture, this.rl); var promise = password.run().then(testMasking(this.rl, '########')); this.rl.emit('line', 'Inquirer'); return promise; }); }); Inquirer.js-3.3.0/test/specs/prompts/rawlist.js000066400000000000000000000034641315775736500216030ustar00rootroot00000000000000var expect = require('chai').expect; var _ = require('lodash'); var ReadlineStub = require('../../helpers/readline'); var fixtures = require('../../helpers/fixtures'); var Rawlist = require('../../../lib/prompts/rawlist'); describe('`rawlist` prompt', function () { beforeEach(function () { this.rl = new ReadlineStub(); this.fixture = _.clone(fixtures.rawlist); this.rawlist = new Rawlist(this.fixture, this.rl); }); it('should default to first choice', function (done) { this.rawlist.run().then(function (answer) { expect(answer).to.equal('foo'); done(); }); this.rl.emit('line'); }); it('should select given index', function (done) { this.rawlist.run().then(function (answer) { expect(answer).to.equal('bar'); done(); }); this.rl.emit('line', '2'); }); it('should not allow invalid index', function () { var self = this; var promise = this.rawlist.run(); this.rl.emit('line', 'blah'); setTimeout(function () { self.rl.emit('line', '1'); }, 10); return promise; }); it('should require a choices array', function () { var mkPrompt = function () { return new Rawlist({name: 'foo', message: 'bar'}); }; expect(mkPrompt).to.throw(/choices/); }); it('should allow a default index', function (done) { this.fixture.default = 1; var list = new Rawlist(this.fixture, this.rl); list.run().then(function (answer) { expect(answer).to.equal('bar'); done(); }); this.rl.emit('line'); }); it('shouldn\'t allow an invalid index as default', function (done) { this.fixture.default = 4; var list = new Rawlist(this.fixture, this.rl); list.run().then(function (answer) { expect(answer).to.equal('foo'); done(); }); this.rl.emit('line'); }); }); Inquirer.js-3.3.0/yarn.lock000066400000000000000000002654011315775736500156040ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 abbrev@1, abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" acorn-jsx@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" dependencies: acorn "^3.0.4" acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" acorn@^5.0.1: version "5.0.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" agent-base@2: version "2.0.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e" dependencies: extend "~3.0.0" semver "~5.0.1" ajv-keywords@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" ajv@^4.7.0: version "4.11.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.2.tgz#f166c3c11cbc6cb9dcc102a5bcfe5b72c95287e6" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" ajv@^5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.1.tgz#dcd03045175883ba1b636e5ae9ec3df9ab85323a" dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" json-schema-traverse "^0.3.0" json-stable-stringify "^1.0.1" align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" dependencies: kind-of "^3.0.2" longest "^1.0.1" repeat-string "^1.5.2" amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" ansi-escapes@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" ansi-styles@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.1.0.tgz#09c202d5c917ec23188caa5c9cb9179cd9547750" dependencies: color-convert "^1.0.0" any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" argparse@^1.0.7: version "1.0.9" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" dependencies: sprintf-js "~1.0.2" arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" dependencies: arr-flatten "^1.0.1" arr-flatten@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1, array-uniq@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" assertion-error@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" async@1.x, async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" async@~0.2.6: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" aws4@^1.2.1: version "1.5.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" babel-code-frame@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" dependencies: chalk "^1.1.0" esutils "^2.0.2" js-tokens "^3.0.0" balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" bcrypt-pbkdf@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" dependencies: tweetnacl "^0.14.3" beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" bl@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" dependencies: readable-stream "~2.0.5" bluebird@^2.3, bluebird@^2.9.x: version "2.11.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" bluebird@^3.0.5: version "3.5.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" dependencies: hoek "2.x.x" brace-expansion@^1.0.0, brace-expansion@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" dependencies: balanced-match "^1.0.0" concat-map "0.0.1" braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" dependencies: expand-range "^1.8.1" preserve "^0.2.0" repeat-element "^1.1.2" browser-stdout@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" buffer-shims@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" dependencies: callsites "^0.2.0" callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" caseless@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" dependencies: align-text "^0.1.3" lazy-cache "^1.0.3" chai@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/chai/-/chai-4.0.2.tgz#2f7327c4de6f385dd7787999e2ab02697a32b83b" dependencies: assertion-error "^1.0.1" check-error "^1.0.1" deep-eql "^2.0.1" get-func-name "^2.0.0" pathval "^1.0.0" type-detect "^4.0.0" chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" has-ansi "^2.0.0" strip-ansi "^3.0.0" supports-color "^2.0.0" chalk@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.0.1.tgz#dbec49436d2ae15f536114e76d14656cdbc0f44d" dependencies: ansi-styles "^3.1.0" escape-string-regexp "^1.0.5" supports-color "^4.0.0" check-error@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" circular-json@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" dependencies: restore-cursor "^2.0.0" cli-table@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" dependencies: colors "1.0.3" cli-width@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" cliclopts@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/cliclopts/-/cliclopts-1.1.1.tgz#69431c7cb5af723774b0d3911b4c37512431910f" cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" dependencies: center-align "^0.1.1" right-align "^0.1.1" wordwrap "0.0.2" clone-stats@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" clone@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" clone@^1.0.0, clone@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" cmdify@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/cmdify/-/cmdify-0.0.4.tgz#268d2a60afe026a8c33d3fbbacf0f7038c6113d2" co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" codacy-coverage@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/codacy-coverage/-/codacy-coverage-1.1.3.tgz#42cc65f7d8acf6c3f743283dda9164bd6bb2fd45" dependencies: bluebird "^2.9.x" commander "^2.x" joi "^6.4.x" lcov-parse "0.x" log-driver "^1.x" request-promise "^0.x" coffee-script@^1.10.0: version "1.12.2" resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.2.tgz#0d4cbdee183f650da95419570c4929d08ef91376" color-convert@^1.0.0: version "1.9.0" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: color-name "^1.1.1" color-name@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" dependencies: delayed-stream "~1.0.0" commander@2.9.0, commander@^2.9.0, commander@^2.x: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: graceful-readlink ">= 1.0.0" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" concat-stream@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: inherits "^2.0.3" readable-stream "^2.2.2" typedarray "^0.0.6" core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" coveralls@^2.11.2: version "2.11.15" resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.15.tgz#37d3474369d66c14f33fa73a9d25cee6e099fca0" dependencies: js-yaml "3.6.1" lcov-parse "0.0.10" log-driver "1.2.5" minimist "1.2.0" request "2.75.0" cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" dependencies: boom "2.x.x" dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" dependencies: assert-plus "^1.0.0" dateformat@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" debug@2, debug@^2.1.3, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: ms "2.0.0" debug@2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" dependencies: ms "0.7.2" decamelize@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" deep-eql@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-2.0.2.tgz#b1bac06e56f0a76777686d50c9feb75c2ed7679a" dependencies: type-detect "^3.0.0" deep-extend@~0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" defaults@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" dependencies: clone "^1.0.2" del@^2.0.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" dependencies: globby "^5.0.0" is-path-cwd "^1.0.0" is-path-in-cwd "^1.0.0" object-assign "^4.0.1" pify "^2.0.0" pinkie-promise "^2.0.0" rimraf "^2.2.8" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" deprecated@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" detect-file@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" dependencies: fs-exists-sync "^0.1.0" diff@3.2.0, diff@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" doctrine@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" dependencies: esutils "^2.0.2" isarray "^1.0.0" duplexer2@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" dependencies: readable-stream "~1.1.9" ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" dependencies: jsbn "~0.1.0" end-of-stream@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf" dependencies: once "~1.3.0" escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" escodegen@1.8.x: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" dependencies: esprima "^2.7.1" estraverse "^1.9.1" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: source-map "~0.2.0" eslint-config-xo-space@^0.16.0: version "0.16.0" resolved "https://registry.yarnpkg.com/eslint-config-xo-space/-/eslint-config-xo-space-0.16.0.tgz#5241a8adfaafec53a6f2236da5f9d6a41c5ff84d" dependencies: eslint-config-xo "^0.18.0" eslint-config-xo@^0.18.0: version "0.18.2" resolved "https://registry.yarnpkg.com/eslint-config-xo/-/eslint-config-xo-0.18.2.tgz#0a157120875619929e735ffd6b185c41e8a187af" eslint-scope@^3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" eslint@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.0.0.tgz#7277c01437fdf41dccd168d5aa0e49b75ca1f260" dependencies: babel-code-frame "^6.22.0" chalk "^1.1.3" concat-stream "^1.6.0" debug "^2.6.8" doctrine "^2.0.0" eslint-scope "^3.7.1" espree "^3.4.3" esquery "^1.0.0" estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" glob "^7.1.2" globals "^9.17.0" ignore "^3.3.3" imurmurhash "^0.1.4" inquirer "^3.0.6" is-my-json-valid "^2.16.0" is-resolvable "^1.0.0" js-yaml "^3.8.4" json-stable-stringify "^1.0.1" levn "^0.3.0" lodash "^4.17.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" path-is-inside "^1.0.2" pluralize "^4.0.0" progress "^2.0.0" require-uncached "^1.0.3" strip-json-comments "~2.0.1" table "^4.0.1" text-table "~0.2.0" eslint@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.2.0.tgz#a2b3184111b198e02e9c7f3cca625a5e01c56b3d" dependencies: ajv "^5.2.0" babel-code-frame "^6.22.0" chalk "^1.1.3" concat-stream "^1.6.0" debug "^2.6.8" doctrine "^2.0.0" eslint-scope "^3.7.1" espree "^3.4.3" esquery "^1.0.0" estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" glob "^7.1.2" globals "^9.17.0" ignore "^3.3.3" imurmurhash "^0.1.4" inquirer "^3.0.6" is-resolvable "^1.0.0" js-yaml "^3.8.4" json-stable-stringify "^1.0.1" levn "^0.3.0" lodash "^4.17.4" minimatch "^3.0.2" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" path-is-inside "^1.0.2" pluralize "^4.0.0" progress "^2.0.0" require-uncached "^1.0.3" strip-json-comments "~2.0.1" table "^4.0.1" text-table "~0.2.0" espree@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" dependencies: acorn "^5.0.1" acorn-jsx "^3.0.0" esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" esprima@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" esquery@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" dependencies: estraverse "^4.0.0" esrecurse@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" dependencies: estraverse "~4.1.0" object-assign "^4.0.1" estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" estraverse@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" dependencies: is-posix-bracket "^0.1.0" expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" dependencies: fill-range "^2.1.0" expand-tilde@^1.2.1, expand-tilde@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" dependencies: os-homedir "^1.0.1" extend@3, extend@^3.0.0, extend@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" external-editor@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972" dependencies: iconv-lite "^0.4.17" jschardet "^1.4.2" tmp "^0.0.31" extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" dependencies: is-extglob "^1.0.0" extsprintf@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" fancy-log@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" dependencies: chalk "^1.1.1" time-stamp "^1.0.0" fast-deep-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" dependencies: flat-cache "^1.2.1" object-assign "^4.0.1" filename-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" dependencies: is-number "^2.1.0" isobject "^2.0.0" randomatic "^1.1.3" repeat-element "^1.1.2" repeat-string "^1.5.2" find-index@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" findup-sync@^0.4.2: version "0.4.3" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12" dependencies: detect-file "^0.1.0" is-glob "^2.0.1" micromatch "^2.3.7" resolve-dir "^0.1.0" fined@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/fined/-/fined-1.0.2.tgz#5b28424b760d7598960b7ef8480dff8ad3660e97" dependencies: expand-tilde "^1.2.1" lodash.assignwith "^4.0.7" lodash.isempty "^4.2.1" lodash.isplainobject "^4.0.4" lodash.isstring "^4.0.1" lodash.pick "^4.2.1" parse-filepath "^1.0.1" first-chunk-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" flagged-respawn@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5" flat-cache@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" dependencies: circular-json "^0.3.1" del "^2.0.2" graceful-fs "^4.1.2" write "^0.2.1" for-in@^0.1.5: version "0.1.6" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" for-own@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" dependencies: for-in "^0.1.5" forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" form-data@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" mime-types "^2.1.11" formatio@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.2.0.tgz#f3b2167d9068c4698a8d51f4f760a39a54d818eb" dependencies: samsam "1.x" fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" gaze@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" dependencies: globule "~0.1.0" generate-function@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" generate-object-property@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" dependencies: is-property "^1.0.0" get-func-name@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" getpass@^0.1.1: version "0.1.6" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" dependencies: assert-plus "^1.0.0" glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" dependencies: is-glob "^2.0.0" glob-stream@^3.1.5: version "3.1.18" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b" dependencies: glob "^4.3.1" glob2base "^0.0.12" minimatch "^2.0.1" ordered-read-streams "^0.1.0" through2 "^0.6.1" unique-stream "^1.0.0" glob-watcher@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b" dependencies: gaze "^0.5.1" glob2base@^0.0.12: version "0.0.12" resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" dependencies: find-index "^0.1.1" glob@7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.0.2" once "^1.3.0" path-is-absolute "^1.0.0" glob@^4.3.1: version "4.5.3" resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" dependencies: inflight "^1.0.4" inherits "2" minimatch "^2.0.1" once "^1.3.0" glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" dependencies: inflight "^1.0.4" inherits "2" minimatch "2 || 3" once "^1.3.0" path-is-absolute "^1.0.0" glob@^7.0.3, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" glob@~3.1.21: version "3.1.21" resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" dependencies: graceful-fs "~1.2.0" inherits "1" minimatch "~0.2.11" global-modules@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" dependencies: global-prefix "^0.1.4" is-windows "^0.2.0" global-prefix@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" dependencies: homedir-polyfill "^1.0.0" ini "^1.3.4" is-windows "^0.2.0" which "^1.2.12" globals@^9.17.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" globby@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" dependencies: array-union "^1.0.1" arrify "^1.0.0" glob "^7.0.3" object-assign "^4.0.1" pify "^2.0.0" pinkie-promise "^2.0.0" globule@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5" dependencies: glob "~3.1.21" lodash "~1.0.1" minimatch "~0.2.11" glogg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" dependencies: sparkles "^1.0.0" graceful-fs@^3.0.0: version "3.0.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" dependencies: natives "^1.1.0" graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" graceful-fs@~1.2.0: version "1.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" growl@1.9.2: version "1.9.2" resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" gulp-codacy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gulp-codacy/-/gulp-codacy-1.0.0.tgz#e482765f2a6628396ae6c7bd3afe2da03d99502d" dependencies: bluebird "^3.0.5" codacy-coverage "^1.1.3" gulp-util "^3.0.7" lodash.defaults "^3.1.2" lodash.merge "^3.3.2" mz "^2.1.0" through2 "^2.0.0" gulp-coveralls@^0.1.0: version "0.1.4" resolved "https://registry.yarnpkg.com/gulp-coveralls/-/gulp-coveralls-0.1.4.tgz#2f620ac8df62d0b86b4bbde64da367cc41a190c9" dependencies: coveralls "^2.11.2" gulp-util "^3.0.4" through2 "^1.1.1" gulp-eslint@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/gulp-eslint/-/gulp-eslint-4.0.0.tgz#16d9ea4d696e7b7a9d65eeb1aa5bc4ba0a22c7f7" dependencies: eslint "^4.0.0" gulp-util "^3.0.8" gulp-exclude-gitignore@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/gulp-exclude-gitignore/-/gulp-exclude-gitignore-1.1.1.tgz#a9a4ff45e259cddb9e87213323848e9b98baadea" dependencies: gulp-ignore "^2.0.2" gulp-ignore@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/gulp-ignore/-/gulp-ignore-2.0.2.tgz#5c2ea2a0a4402e0ab4a2bcd12efd9295344d78f2" dependencies: gulp-match "^1.0.3" through2 "^2.0.1" gulp-istanbul@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/gulp-istanbul/-/gulp-istanbul-1.1.2.tgz#af65fa28bfdb3576daab95dcfaa732a6a27c5a07" dependencies: gulp-util "^3.0.1" istanbul "^0.4.0" istanbul-threshold-checker "^0.2.1" lodash "^4.0.0" through2 "^2.0.0" vinyl-sourcemaps-apply "^0.2.1" gulp-line-ending-corrector@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gulp-line-ending-corrector/-/gulp-line-ending-corrector-1.0.1.tgz#b9be88c24a00337c4983ff99a4f6c31af1d5654a" dependencies: coffee-script "^1.10.0" gulp-util "^3.0.6" line-ending-corrector "^1.0.0" through2 "^2.0.0" gulp-match@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/gulp-match/-/gulp-match-1.0.3.tgz#91c7c0d7f29becd6606d57d80a7f8776a87aba8e" dependencies: minimatch "^3.0.3" gulp-mocha@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/gulp-mocha/-/gulp-mocha-3.0.1.tgz#ab0ca2c39403718174dddad750e63a61be17e041" dependencies: gulp-util "^3.0.0" mocha "^3.0.0" plur "^2.1.0" req-cwd "^1.0.1" temp "^0.8.3" through "^2.3.4" gulp-nsp@^2.1.0: version "2.4.2" resolved "https://registry.yarnpkg.com/gulp-nsp/-/gulp-nsp-2.4.2.tgz#9ea6c091b8fadf2792aa4b0bd3af01cdde150ef2" dependencies: gulp-util "^3.0.6" nsp "^2.0.0" gulp-plumber@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/gulp-plumber/-/gulp-plumber-1.1.0.tgz#f12176c2d0422f60306c242fff6a01a394faba09" dependencies: gulp-util "^3" through2 "^2" gulp-util@^3, gulp-util@^3.0.0, gulp-util@^3.0.1, gulp-util@^3.0.4, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" dependencies: array-differ "^1.0.0" array-uniq "^1.0.2" beeper "^1.0.0" chalk "^1.0.0" dateformat "^2.0.0" fancy-log "^1.1.0" gulplog "^1.0.0" has-gulplog "^0.1.0" lodash._reescape "^3.0.0" lodash._reevaluate "^3.0.0" lodash._reinterpolate "^3.0.0" lodash.template "^3.0.0" minimist "^1.1.0" multipipe "^0.1.2" object-assign "^3.0.0" replace-ext "0.0.1" through2 "^2.0.0" vinyl "^0.5.0" gulp@^3.9.0: version "3.9.1" resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4" dependencies: archy "^1.0.0" chalk "^1.0.0" deprecated "^0.0.1" gulp-util "^3.0.0" interpret "^1.0.0" liftoff "^2.1.0" minimist "^1.1.0" orchestrator "^0.3.0" pretty-hrtime "^1.0.0" semver "^4.1.0" tildify "^1.0.0" v8flags "^2.0.2" vinyl-fs "^0.3.0" gulplog@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" dependencies: glogg "^1.0.0" handlebars@^4.0.1: version "4.0.6" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" dependencies: async "^1.4.0" optimist "^0.6.1" source-map "^0.4.4" optionalDependencies: uglify-js "^2.6" har-validator@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" dependencies: chalk "^1.1.1" commander "^2.9.0" is-my-json-valid "^2.12.4" pinkie-promise "^2.0.0" has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" dependencies: ansi-regex "^2.0.0" has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" has-gulplog@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" dependencies: sparkles "^1.0.0" hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: boom "2.x.x" cryptiles "2.x.x" hoek "2.x.x" sntp "1.x.x" hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" homedir-polyfill@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" dependencies: parse-passwd "^1.0.0" http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" dependencies: assert-plus "^0.2.0" jsprim "^1.2.2" sshpk "^1.7.0" https-proxy-agent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" dependencies: agent-base "2" debug "2" extend "3" iconv-lite@^0.4.17: version "0.4.17" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d" ignore@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" dependencies: once "^1.3.0" wrappy "1" inherits@1: version "1.0.2" resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" inherits@2, inherits@^2.0.3, inherits@~2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" ini@^1.3.4, ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" inquirer@^3.0.6: version "3.1.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.1.0.tgz#e05400d48b94937c2d3caa7038663ba9189aab01" dependencies: ansi-escapes "^2.0.0" chalk "^1.0.0" cli-cursor "^2.1.0" cli-width "^2.0.0" external-editor "^2.0.4" figures "^2.0.0" lodash "^4.3.0" mute-stream "0.0.7" run-async "^2.2.0" rx-lite "^4.0.8" rx-lite-aggregates "^4.0.8" string-width "^2.0.0" strip-ansi "^3.0.0" through "^2.3.6" interpret@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" irregular-plurals@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.2.0.tgz#38f299834ba8c00c30be9c554e137269752ff3ac" is-absolute@^0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" dependencies: is-relative "^0.2.1" is-windows "^0.2.0" is-buffer@^1.0.2: version "1.1.4" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" is-dotfile@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" dependencies: is-primitive "^2.0.0" is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" dependencies: is-extglob "^1.0.0" is-my-json-valid@^2.12.4, is-my-json-valid@^2.16.0: version "2.16.0" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" dependencies: generate-function "^2.0.0" generate-object-property "^1.1.0" jsonpointer "^4.0.0" xtend "^4.0.0" is-number@^2.0.2, is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: kind-of "^3.0.2" is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" is-path-in-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" dependencies: path-is-inside "^1.0.1" is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" is-relative@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" dependencies: is-unc-path "^0.1.1" is-resolvable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" dependencies: tryit "^1.0.1" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" is-unc-path@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" dependencies: unc-path-regex "^0.1.0" is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" is-windows@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" isemail@1.x.x: version "1.2.0" resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a" isexe@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" dependencies: isarray "1.0.0" isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul-threshold-checker@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/istanbul-threshold-checker/-/istanbul-threshold-checker-0.2.1.tgz#c5dc94e8f2cc5cd3ffd335452f84b553c4248331" dependencies: istanbul "~0.4.5" lodash "~4.17.2" istanbul@^0.4.0, istanbul@~0.4.5: version "0.4.5" resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" dependencies: abbrev "1.0.x" async "1.x" escodegen "1.8.x" esprima "2.7.x" glob "^5.0.15" handlebars "^4.0.1" js-yaml "3.x" mkdirp "0.5.x" nopt "3.x" once "1.x" resolve "1.1.x" supports-color "^3.1.0" which "^1.1.1" wordwrap "^1.0.0" jodid25519@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" dependencies: jsbn "~0.1.0" joi@^6.4.x, joi@^6.9.1: version "6.10.1" resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06" dependencies: hoek "2.x.x" isemail "1.x.x" moment "2.x.x" topo "1.x.x" js-tokens@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.0.tgz#a2f2a969caae142fb3cd56228358c89366957bd1" js-yaml@3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" dependencies: argparse "^1.0.7" esprima "^2.6.0" js-yaml@3.x, js-yaml@^3.8.4: version "3.8.4" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" dependencies: argparse "^1.0.7" esprima "^3.1.1" jsbn@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" jschardet@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.4.2.tgz#2aa107f142af4121d145659d44f50830961e699a" json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" dependencies: jsonify "~0.0.0" json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" json3@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" jsprim@^1.2.2: version "1.3.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" dependencies: extsprintf "1.0.2" json-schema "0.2.3" verror "1.3.6" kind-of@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" dependencies: is-buffer "^1.0.2" lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" lcov-parse@0.0.10, lcov-parse@0.x: version "0.0.10" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" liftoff@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385" dependencies: extend "^3.0.0" findup-sync "^0.4.2" fined "^1.0.1" flagged-respawn "^0.3.2" lodash.isplainobject "^4.0.4" lodash.isstring "^4.0.1" lodash.mapvalues "^4.4.0" rechoir "^0.6.2" resolve "^1.1.7" line-ending-corrector@^1.0.0: version "1.0.0" resolved "http://registry.npmjs.org/line-ending-corrector/-/line-ending-corrector-1.0.0.tgz#b13cdef8ad36aeec02a1f677621c41bd0253bd9b" dependencies: coffee-script "^1.10.0" lodash._arraycopy@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" lodash._arrayeach@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" lodash._baseassign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" dependencies: lodash._basecopy "^3.0.0" lodash.keys "^3.0.0" lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" lodash._basecreate@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" lodash._basefor@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" lodash._bindcallback@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" lodash._createassigner@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" dependencies: lodash._bindcallback "^3.0.0" lodash._isiterateecall "^3.0.0" lodash.restparam "^3.0.0" lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" lodash._isiterateecall@^3.0.0: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" lodash._reescape@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" lodash._reevaluate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" lodash._root@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" lodash.assign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" dependencies: lodash._baseassign "^3.0.0" lodash._createassigner "^3.0.0" lodash.keys "^3.0.0" lodash.assignwith@^4.0.7: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz#127a97f02adc41751a954d24b0de17e100e038eb" lodash.create@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" dependencies: lodash._baseassign "^3.0.0" lodash._basecreate "^3.0.0" lodash._isiterateecall "^3.0.0" lodash.defaults@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" dependencies: lodash.assign "^3.0.0" lodash.restparam "^3.0.0" lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" dependencies: lodash._root "^3.0.0" lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" lodash.isempty@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" lodash.isplainobject@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5" dependencies: lodash._basefor "^3.0.0" lodash.isarguments "^3.0.0" lodash.keysin "^3.0.0" lodash.isplainobject@^4.0.4: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" lodash.isstring@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" lodash.istypedarray@^3.0.0: version "3.0.6" resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" dependencies: lodash._getnative "^3.0.0" lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" lodash.keysin@^3.0.0: version "3.0.8" resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f" dependencies: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" lodash.mapvalues@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" lodash.merge@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994" dependencies: lodash._arraycopy "^3.0.0" lodash._arrayeach "^3.0.0" lodash._createassigner "^3.0.0" lodash._getnative "^3.0.0" lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" lodash.isplainobject "^3.0.0" lodash.istypedarray "^3.0.0" lodash.keys "^3.0.0" lodash.keysin "^3.0.0" lodash.toplainobject "^3.0.0" lodash.pick@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" lodash.template@^3.0.0: version "3.6.2" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" dependencies: lodash._basecopy "^3.0.0" lodash._basetostring "^3.0.0" lodash._basevalues "^3.0.0" lodash._isiterateecall "^3.0.0" lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" lodash.keys "^3.0.0" lodash.restparam "^3.0.0" lodash.templatesettings "^3.0.0" lodash.templatesettings@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" dependencies: lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" lodash.toplainobject@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d" dependencies: lodash._basecopy "^3.0.0" lodash.keysin "^3.0.0" lodash@^3.10.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" lodash@^4.0.0, lodash@^4.17.4, lodash@^4.3.0, lodash@~4.17.2: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" lodash@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" log-driver@1.2.5, log-driver@^1.x: version "1.2.5" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" lolex@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.6.0.tgz#3a9a0283452a47d7439e72731b9e07d7386e49f6" longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" lru-cache@2: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" map-cache@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: arr-diff "^2.0.0" array-unique "^0.2.1" braces "^1.8.2" expand-brackets "^0.1.4" extglob "^0.3.1" filename-regex "^2.0.0" is-extglob "^1.0.0" is-glob "^2.0.1" kind-of "^3.0.2" normalize-path "^2.0.1" object.omit "^2.0.0" parse-glob "^3.0.4" regex-cache "^0.4.2" mime-db@~1.26.0: version "1.26.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" mime-types@^2.1.11, mime-types@~2.1.7: version "2.1.14" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" dependencies: mime-db "~1.26.0" mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" "minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: brace-expansion "^1.1.7" minimatch@^2.0.1: version "2.0.10" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" dependencies: brace-expansion "^1.0.0" minimatch@~0.2.11: version "0.2.14" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" dependencies: lru-cache "2" sigmund "~1.0.0" minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" minimist@1.2.0, minimist@^1.1.0, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" mocha@^3.0.0, mocha@^3.4.2: version "3.4.2" resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.4.2.tgz#d0ef4d332126dbf18d0d640c9b382dd48be97594" dependencies: browser-stdout "1.3.0" commander "2.9.0" debug "2.6.0" diff "3.2.0" escape-string-regexp "1.0.5" glob "7.1.1" growl "1.9.2" json3 "3.3.2" lodash.create "3.1.1" mkdirp "0.5.1" supports-color "3.1.2" mockery@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mockery/-/mockery-2.1.0.tgz#5b0aef1ff564f0f8139445e165536c7909713470" moment@2.x.x: version "2.17.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82" ms@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" multipipe@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" dependencies: duplexer2 "0.0.2" mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" mz@^2.1.0: version "2.6.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce" dependencies: any-promise "^1.0.0" object-assign "^4.0.1" thenify-all "^1.0.0" native-promise-only@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" natives@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" node-uuid@~1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" nodesecurity-npm-utils@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nodesecurity-npm-utils/-/nodesecurity-npm-utils-5.0.0.tgz#05aa30de30ca8c845c4048e94fd78e5e08b55ed9" nopt@3.x: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" dependencies: abbrev "1" normalize-path@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" nsp@^2.0.0: version "2.6.2" resolved "https://registry.yarnpkg.com/nsp/-/nsp-2.6.2.tgz#93dfb4c5b2885cc354d8ca18b73f09e52b9c8b16" dependencies: chalk "^1.1.1" cli-table "^0.3.1" https-proxy-agent "^1.0.0" joi "^6.9.1" nodesecurity-npm-utils "^5.0.0" path-is-absolute "^1.0.0" rc "^1.1.2" semver "^5.0.3" subcommand "^2.0.3" wreck "^6.3.0" oauth-sign@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" object-assign@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" dependencies: for-own "^0.1.4" is-extendable "^0.1.1" once@1.x, once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" once@~1.3.0: version "1.3.3" resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" dependencies: wrappy "1" onetime@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.0.tgz#52aa8110e52fc5126ffc667bd8ec21c2ed209ce6" dependencies: mimic-fn "^1.0.0" optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" dependencies: minimist "~0.0.1" wordwrap "~0.0.2" optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.4" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" wordwrap "~1.0.0" orchestrator@^0.3.0: version "0.3.8" resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e" dependencies: end-of-stream "~0.1.5" sequencify "~0.0.7" stream-consume "~0.1.0" ordered-read-streams@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126" os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" os-tmpdir@^1.0.0, os-tmpdir@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" parse-filepath@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73" dependencies: is-absolute "^0.2.3" map-cache "^0.2.0" path-root "^0.1.1" parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" is-extglob "^1.0.0" is-glob "^2.0.0" parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" path-root-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" path-root@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" dependencies: path-root-regex "^0.1.0" path-to-regexp@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" dependencies: isarray "0.0.1" pathval@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" plur@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a" dependencies: irregular-plurals "^1.0.0" pluralize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762" prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" pretty-hrtime@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" qs@~6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" randomatic@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" dependencies: is-number "^2.0.2" kind-of "^3.0.2" rc@^1.1.2: version "1.1.6" resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" dependencies: deep-extend "~0.4.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~1.0.4" "readable-stream@>=1.0.33-1 <1.1.0-0": version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" "readable-stream@>=1.1.13-1 <1.2.0-0", readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" readable-stream@^2.1.5, readable-stream@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" dependencies: buffer-shims "^1.0.0" core-util-is "~1.0.0" inherits "~2.0.1" isarray "~1.0.0" process-nextick-args "~1.0.6" string_decoder "~0.10.x" util-deprecate "~1.0.1" readable-stream@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "~1.0.0" process-nextick-args "~1.0.6" string_decoder "~0.10.x" util-deprecate "~1.0.1" rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" dependencies: resolve "^1.1.6" regex-cache@^0.4.2: version "0.4.3" resolved "http://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" dependencies: is-equal-shallow "^0.1.3" is-primitive "^2.0.0" repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" repeat-string@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" req-cwd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-1.0.1.tgz#0d73aeae9266e697a78f7976019677e76acf0fff" dependencies: req-from "^1.0.1" req-from@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/req-from/-/req-from-1.0.1.tgz#bf81da5147947d32d13b947dc12a58ad4587350e" dependencies: resolve-from "^2.0.0" request-promise@^0.x: version "0.4.3" resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-0.4.3.tgz#3c8ddc82f06f8908d720aede1d6794258e22121c" dependencies: bluebird "^2.3" chalk "^1.1.0" lodash "^3.10.0" request "^2.34" request@2.75.0, request@^2.34: version "2.75.0" resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" bl "~1.1.2" caseless "~0.11.0" combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" form-data "~2.0.0" har-validator "~2.0.6" hawk "~3.1.3" http-signature "~1.1.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.7" node-uuid "~1.4.7" oauth-sign "~0.8.1" qs "~6.2.0" stringstream "~0.0.4" tough-cookie "~2.3.0" tunnel-agent "~0.4.1" require-uncached@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" dependencies: caller-path "^0.1.0" resolve-from "^1.0.0" resolve-dir@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" dependencies: expand-tilde "^1.2.2" global-modules "^0.2.3" resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" resolve-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" resolve@^1.1.6, resolve@^1.1.7: version "1.2.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" dependencies: onetime "^2.0.0" signal-exit "^3.0.2" right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" dependencies: align-text "^0.1.1" rimraf@^2.2.8, rimraf@~2.2.6: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" dependencies: is-promise "^2.1.0" rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" dependencies: rx-lite "*" rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" samsam@1.x, samsam@^1.1.3: version "1.2.1" resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.2.1.tgz#edd39093a3184370cb859243b2bdf255e7d8ea67" semver@^4.1.0: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" semver@^5.0.3: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" semver@~5.0.1: version "5.0.3" resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" sequencify@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" sigmund@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" sinon@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/sinon/-/sinon-2.3.6.tgz#95378e7e0f976a9712e9b4591ff5b39e73dc3dde" dependencies: diff "^3.1.0" formatio "1.2.0" lolex "^1.6.0" native-promise-only "^0.8.1" path-to-regexp "^1.7.0" samsam "^1.1.3" text-encoding "0.6.4" type-detect "^4.0.0" slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" dependencies: hoek "2.x.x" source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: amdefine ">=0.0.4" source-map@^0.5.1, source-map@~0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" source-map@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" dependencies: amdefine ">=0.0.4" sparkles@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: version "1.10.2" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.2.tgz#d5a804ce22695515638e798dbe23273de070a5fa" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" dashdash "^1.12.0" getpass "^0.1.1" optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" jodid25519 "^1.0.0" jsbn "~0.1.0" tweetnacl "~0.14.0" stream-consume@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f" string-width@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^3.0.0" string-width@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.0.tgz#030664561fc146c9423ec7d978fe2457437fe6d0" dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" dependencies: ansi-regex "^3.0.0" strip-bom@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" dependencies: first-chunk-stream "^1.0.0" is-utf8 "^0.2.0" strip-json-comments@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" subcommand@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/subcommand/-/subcommand-2.1.0.tgz#5e4ceca5a3779e3365b1511e05f866877302f760" dependencies: cliclopts "^1.1.0" debug "^2.1.3" minimist "^1.2.0" xtend "^4.0.0" supports-color@3.1.2, supports-color@^3.1.0: version "3.1.2" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" dependencies: has-flag "^1.0.0" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" supports-color@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.0.tgz#ad986dc7eb2315d009b4d77c8169c2231a684037" dependencies: has-flag "^2.0.0" table@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435" dependencies: ajv "^4.7.0" ajv-keywords "^1.0.0" chalk "^1.1.1" lodash "^4.0.0" slice-ansi "0.0.4" string-width "^2.0.0" temp@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" dependencies: os-tmpdir "^1.0.0" rimraf "~2.2.6" text-encoding@0.6.4: version "0.6.4" resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" dependencies: thenify ">= 3.1.0 < 4" "thenify@>= 3.1.0 < 4": version "3.3.0" resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" dependencies: any-promise "^1.0.0" through2@^0.6.1: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" dependencies: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" through2@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/through2/-/through2-1.1.1.tgz#0847cbc4449f3405574dbdccd9bb841b83ac3545" dependencies: readable-stream ">=1.1.13-1 <1.2.0-0" xtend ">=4.0.0 <4.1.0-0" through2@^2, through2@^2.0.0, through2@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" dependencies: readable-stream "^2.1.5" xtend "~4.0.1" through@^2.3.4, through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" tildify@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" dependencies: os-homedir "^1.0.0" time-stamp@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151" tmp@^0.0.31: version "0.0.31" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" dependencies: os-tmpdir "~1.0.1" topo@1.x.x: version "1.1.0" resolved "https://registry.yarnpkg.com/topo/-/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5" dependencies: hoek "2.x.x" tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" dependencies: punycode "^1.4.1" tryit@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" tunnel-agent@~0.4.1: version "0.4.3" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" dependencies: prelude-ls "~1.1.2" type-detect@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-3.0.0.tgz#46d0cc8553abb7b13a352b0d6dea2fd58f2d9b55" type-detect@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.3.tgz#0e3f2670b44099b0b46c284d136a7ef49c74c2ea" typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" uglify-js@^2.6: version "2.7.5" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" dependencies: async "~0.2.6" source-map "~0.5.1" uglify-to-browserify "~1.0.0" yargs "~3.10.0" uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" unc-path-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" unique-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" v8flags@^2.0.2: version "2.0.11" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881" dependencies: user-home "^1.1.1" verror@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" dependencies: extsprintf "1.0.2" vinyl-fs@^0.3.0: version "0.3.14" resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6" dependencies: defaults "^1.0.0" glob-stream "^3.1.5" glob-watcher "^0.0.6" graceful-fs "^3.0.0" mkdirp "^0.5.0" strip-bom "^1.0.0" through2 "^0.6.1" vinyl "^0.4.0" vinyl-sourcemaps-apply@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705" dependencies: source-map "^0.5.1" vinyl@^0.4.0: version "0.4.6" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" dependencies: clone "^0.2.0" clone-stats "^0.0.1" vinyl@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" dependencies: clone "^1.0.0" clone-stats "^0.0.1" replace-ext "0.0.1" which@^1.1.1, which@^1.2.12: version "1.2.12" resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" dependencies: isexe "^1.1.1" window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" wordwrap@^1.0.0, wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" wreck@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/wreck/-/wreck-6.3.0.tgz#a1369769f07bbb62d6a378336a7871fc773c740b" dependencies: boom "2.x.x" hoek "2.x.x" write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" dependencies: mkdirp "^0.5.1" "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" dependencies: camelcase "^1.0.2" cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0"