mirror of https://github.com/lukechilds/node.git
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.
51 lines
1.2 KiB
51 lines
1.2 KiB
module.exports = spinner
|
|
|
|
function spinner(opt) {
|
|
opt = opt || {}
|
|
var str = opt.stream || process.stderr
|
|
var tty = typeof opt.tty === 'boolean' ? opt.tty : true
|
|
var string = opt.string || '/-\\|'
|
|
var ms = typeof opt.interval === 'number' ? opt.interval : 50
|
|
if (ms < 0) ms = 0
|
|
if (tty && !str.isTTY) return false
|
|
var CR = str.isTTY ? '\u001b[0G' : '\u000d';
|
|
var CLEAR = str.isTTY ? '\u001b[2K' : '\u000d \u000d';
|
|
|
|
var s = 0
|
|
var sprite = string.split('')
|
|
var wrote = false
|
|
|
|
var delay = typeof opt.delay === 'number' ? opt.delay : 2
|
|
|
|
var interval = setInterval(function() {
|
|
if (--delay >= 0) return
|
|
s = ++s % sprite.length
|
|
var c = sprite[s]
|
|
str.write(c + CR)
|
|
wrote = true
|
|
}, ms)
|
|
|
|
var unref = typeof opt.unref === 'boolean' ? opt.unref : true
|
|
if (unref && typeof interval.unref === 'function') {
|
|
interval.unref()
|
|
}
|
|
|
|
var cleanup = typeof opt.cleanup === 'boolean' ? opt.cleanup : true
|
|
if (cleanup) {
|
|
process.on('exit', function() {
|
|
if (wrote) {
|
|
str.write(CLEAR);
|
|
}
|
|
})
|
|
}
|
|
|
|
module.exports.clear = function () {
|
|
str.write(CLEAR);
|
|
};
|
|
|
|
return interval
|
|
}
|
|
|
|
module.exports.clear = function () {};
|
|
|
|
|
|
|