EasyAgent/demo/lib/ui/spinner.js
2026-02-28 03:00:08 +08:00

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 };