1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- 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)
- }
- })
|