summaryrefslogtreecommitdiff
path: root/node_modules/mz/readline.js
diff options
context:
space:
mode:
authorPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:54:57 +0100
committerPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:57:48 +0100
commitb1e2c8fd5cb5dfa46bc440a12eafaf56cd844b1c (patch)
tree49d360fd6cbc6a2754efe93524ac47ff0fbe0f7d /node_modules/mz/readline.js
Docs
Diffstat (limited to 'node_modules/mz/readline.js')
-rw-r--r--node_modules/mz/readline.js64
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)
+ }
+})