30 lines
768 B
JavaScript
30 lines
768 B
JavaScript
'use strict';
|
|
|
|
const SPINNER_FRAMES = ['⠙','⠹','⠸','⠼','⠴','⠦','⠧','⠇','⠏'];
|
|
const SPINNER_INTERVAL_MS = 80;
|
|
const SPINNER_INDENT = ' ';
|
|
|
|
function startSpinner(initialLabel) {
|
|
let i = 0;
|
|
let label = initialLabel;
|
|
const timer = setInterval(() => {
|
|
const frame = SPINNER_FRAMES[i % SPINNER_FRAMES.length];
|
|
process.stdout.write(`\r${SPINNER_INDENT}${frame}${label}`);
|
|
i += 1;
|
|
}, SPINNER_INTERVAL_MS);
|
|
return {
|
|
timer,
|
|
setLabel(nextLabel) {
|
|
label = nextLabel || '';
|
|
}
|
|
};
|
|
}
|
|
|
|
function stopSpinner(spinner, finalText) {
|
|
clearInterval(spinner.timer);
|
|
const clear = '\r' + ' '.repeat(80) + '\r';
|
|
process.stdout.write(clear + SPINNER_INDENT + finalText + '\n');
|
|
}
|
|
|
|
module.exports = { startSpinner, stopSpinner };
|