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 () {};