--- /dev/null
+'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;
+}