| 'use strict'; | 
| /** | 
|  * `confirm` type prompt | 
|  */ | 
|   | 
| var _ = { | 
|   extend: require('lodash/extend'), | 
|   isBoolean: require('lodash/isBoolean'), | 
| }; | 
| var chalk = require('chalk'); | 
| var { take, takeUntil } = require('rxjs/operators'); | 
| var Base = require('./base'); | 
| var observe = require('../utils/events'); | 
|   | 
| class ConfirmPrompt extends Base { | 
|   constructor(questions, rl, answers) { | 
|     super(questions, rl, answers); | 
|   | 
|     var rawDefault = true; | 
|   | 
|     _.extend(this.opt, { | 
|       filter: function (input) { | 
|         var value = rawDefault; | 
|         if (input != null && input !== '') { | 
|           value = /^y(es)?/i.test(input); | 
|         } | 
|   | 
|         return value; | 
|       }, | 
|     }); | 
|   | 
|     if (_.isBoolean(this.opt.default)) { | 
|       rawDefault = this.opt.default; | 
|     } | 
|   | 
|     this.opt.default = rawDefault ? 'Y/n' : 'y/N'; | 
|   } | 
|   | 
|   /** | 
|    * Start the Inquiry session | 
|    * @param  {Function} cb   Callback when prompt is done | 
|    * @return {this} | 
|    */ | 
|   | 
|   _run(cb) { | 
|     this.done = cb; | 
|   | 
|     // Once user confirm (enter key) | 
|     var events = observe(this.rl); | 
|     events.keypress.pipe(takeUntil(events.line)).forEach(this.onKeypress.bind(this)); | 
|   | 
|     events.line.pipe(take(1)).forEach(this.onEnd.bind(this)); | 
|   | 
|     // Init | 
|     this.render(); | 
|   | 
|     return this; | 
|   } | 
|   | 
|   /** | 
|    * Render the prompt to screen | 
|    * @return {ConfirmPrompt} self | 
|    */ | 
|   | 
|   render(answer) { | 
|     var message = this.getQuestion(); | 
|   | 
|     if (typeof answer === 'boolean') { | 
|       message += chalk.cyan(answer ? 'Yes' : 'No'); | 
|     } else { | 
|       message += this.rl.line; | 
|     } | 
|   | 
|     this.screen.render(message); | 
|   | 
|     return this; | 
|   } | 
|   | 
|   /** | 
|    * When user press `enter` key | 
|    */ | 
|   | 
|   onEnd(input) { | 
|     this.status = 'answered'; | 
|   | 
|     var output = this.opt.filter(input); | 
|     this.render(output); | 
|   | 
|     this.screen.done(); | 
|     this.done(output); | 
|   } | 
|   | 
|   /** | 
|    * When user press a key | 
|    */ | 
|   | 
|   onKeypress() { | 
|     this.render(); | 
|   } | 
| } | 
|   | 
| module.exports = ConfirmPrompt; |