You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					65 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					65 lines
				
				1.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								var readline = require('readline')
							 | 
						||
| 
								 | 
							
								var Promise = require('any-promise')
							 | 
						||
| 
								 | 
							
								var objectAssign = require('object-assign')
							 | 
						||
| 
								 | 
							
								var Interface = readline.Interface
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function wrapCompleter (completer) {
							 | 
						||
| 
								 | 
							
								  if (completer.length === 2) return completer
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return function (line, cb) {
							 | 
						||
| 
								 | 
							
								    var result = completer(line)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (typeof result.then !== 'function') {
							 | 
						||
| 
								 | 
							
								      return cb(null, result)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    result.catch(cb).then(function (result) {
							 | 
						||
| 
								 | 
							
								      process.nextTick(function () { cb(null, result) })
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function InterfaceAsPromised (input, output, completer, terminal) {
							 | 
						||
| 
								 | 
							
								  if (arguments.length === 1) {
							 | 
						||
| 
								 | 
							
								    var options = input
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (typeof options.completer === 'function') {
							 | 
						||
| 
								 | 
							
								      options = objectAssign({}, options, {
							 | 
						||
| 
								 | 
							
								        completer: wrapCompleter(options.completer)
							 | 
						||
| 
								 | 
							
								      })
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Interface.call(this, options)
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    if (typeof completer === 'function') {
							 | 
						||
| 
								 | 
							
								      completer = wrapCompleter(completer)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Interface.call(this, input, output, completer, terminal)
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								InterfaceAsPromised.prototype = Object.create(Interface.prototype)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								InterfaceAsPromised.prototype.question = function (question, callback) {
							 | 
						||
| 
								 | 
							
								  if (typeof callback === 'function') {
							 | 
						||
| 
								 | 
							
								    return Interface.prototype.question.call(this, question, callback)
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var self = this
							 | 
						||
| 
								 | 
							
								  return new Promise(function (resolve) {
							 | 
						||
| 
								 | 
							
								    Interface.prototype.question.call(self, question, resolve)
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								objectAssign(exports, readline, {
							 | 
						||
| 
								 | 
							
								  Interface: InterfaceAsPromised,
							 | 
						||
| 
								 | 
							
								  createInterface: function (input, output, completer, terminal) {
							 | 
						||
| 
								 | 
							
								    if (arguments.length === 1) {
							 | 
						||
| 
								 | 
							
								      return new InterfaceAsPromised(input)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return new InterfaceAsPromised(input, output, completer, terminal)
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								})
							 |