diff options
Diffstat (limited to 'node_modules/mz/readline.js')
| -rw-r--r-- | node_modules/mz/readline.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/node_modules/mz/readline.js b/node_modules/mz/readline.js new file mode 100644 index 0000000..eb70c46 --- /dev/null +++ b/node_modules/mz/readline.js @@ -0,0 +1,64 @@ +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) + } +}) |