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.
38 lines
902 B
38 lines
902 B
'use strict'; |
|
|
|
module.exports = prompt => { |
|
prompt.timers = prompt.timers || {}; |
|
|
|
let timers = prompt.options.timers; |
|
if (!timers) return; |
|
|
|
for (let key of Object.keys(timers)) { |
|
let opts = timers[key]; |
|
if (typeof opts === 'number') { |
|
opts = { interval: opts }; |
|
} |
|
create(prompt, key, opts); |
|
} |
|
}; |
|
|
|
function create(prompt, name, options = {}) { |
|
let timer = prompt.timers[name] = { name, start: Date.now(), ms: 0, tick: 0 }; |
|
let ms = options.interval || 120; |
|
timer.frames = options.frames || []; |
|
timer.loading = true; |
|
|
|
let interval = setInterval(() => { |
|
timer.ms = Date.now() - timer.start; |
|
timer.tick++; |
|
prompt.render(); |
|
}, ms); |
|
|
|
timer.stop = () => { |
|
timer.loading = false; |
|
clearInterval(interval); |
|
}; |
|
|
|
Reflect.defineProperty(timer, 'interval', { value: interval }); |
|
prompt.once('close', () => timer.stop()); |
|
return timer.stop; |
|
}
|
|
|