summaryrefslogtreecommitdiff
path: root/node_modules/read/lib/read.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2021-12-21 16:50:49 +0100
committerMinteck <contact@minteck.org>2021-12-21 16:50:49 +0100
commit20204baf1807825af4798ad03bfb329e4da05bc5 (patch)
tree1568515fa1e4592206ed5d2327b39e6b443cbd03 /node_modules/read/lib/read.js
downloadbingoloto-remote-20204baf1807825af4798ad03bfb329e4da05bc5.tar.gz
bingoloto-remote-20204baf1807825af4798ad03bfb329e4da05bc5.tar.bz2
bingoloto-remote-20204baf1807825af4798ad03bfb329e4da05bc5.zip
Commit
Diffstat (limited to 'node_modules/read/lib/read.js')
-rw-r--r--node_modules/read/lib/read.js113
1 files changed, 113 insertions, 0 deletions
diff --git a/node_modules/read/lib/read.js b/node_modules/read/lib/read.js
new file mode 100644
index 0000000..a93d1b3
--- /dev/null
+++ b/node_modules/read/lib/read.js
@@ -0,0 +1,113 @@
+
+module.exports = read
+
+var readline = require('readline')
+var Mute = require('mute-stream')
+
+function read (opts, cb) {
+ if (opts.num) {
+ throw new Error('read() no longer accepts a char number limit')
+ }
+
+ if (typeof opts.default !== 'undefined' &&
+ typeof opts.default !== 'string' &&
+ typeof opts.default !== 'number') {
+ throw new Error('default value must be string or number')
+ }
+
+ var input = opts.input || process.stdin
+ var output = opts.output || process.stdout
+ var prompt = (opts.prompt || '').trim() + ' '
+ var silent = opts.silent
+ var editDef = false
+ var timeout = opts.timeout
+
+ var def = opts.default || ''
+ if (def) {
+ if (silent) {
+ prompt += '(<default hidden>) '
+ } else if (opts.edit) {
+ editDef = true
+ } else {
+ prompt += '(' + def + ') '
+ }
+ }
+ var terminal = !!(opts.terminal || output.isTTY)
+
+ var m = new Mute({ replace: opts.replace, prompt: prompt })
+ m.pipe(output, {end: false})
+ output = m
+ var rlOpts = { input: input, output: output, terminal: terminal }
+
+ if (process.version.match(/^v0\.6/)) {
+ var rl = readline.createInterface(rlOpts.input, rlOpts.output)
+ } else {
+ var rl = readline.createInterface(rlOpts)
+ }
+
+
+ output.unmute()
+ rl.setPrompt(prompt)
+ rl.prompt()
+ if (silent) {
+ output.mute()
+ } else if (editDef) {
+ rl.line = def
+ rl.cursor = def.length
+ rl._refreshLine()
+ }
+
+ var called = false
+ rl.on('line', onLine)
+ rl.on('error', onError)
+
+ rl.on('SIGINT', function () {
+ rl.close()
+ onError(new Error('canceled'))
+ })
+
+ var timer
+ if (timeout) {
+ timer = setTimeout(function () {
+ onError(new Error('timed out'))
+ }, timeout)
+ }
+
+ function done () {
+ called = true
+ rl.close()
+
+ if (process.version.match(/^v0\.6/)) {
+ rl.input.removeAllListeners('data')
+ rl.input.removeAllListeners('keypress')
+ rl.input.pause()
+ }
+
+ clearTimeout(timer)
+ output.mute()
+ output.end()
+ }
+
+ function onError (er) {
+ if (called) return
+ done()
+ return cb(er)
+ }
+
+ function onLine (line) {
+ if (called) return
+ if (silent && terminal) {
+ output.unmute()
+ output.write('\r\n')
+ }
+ done()
+ // truncate the \n at the end.
+ line = line.replace(/\r?\n$/, '')
+ var isDefault = !!(editDef && line === def)
+ if (def && !line) {
+ isDefault = true
+ line = def
+ }
+ cb(null, line, isDefault)
+ }
+}