@plugjs/plug
Version:
PlugJS Build System ===================
73 lines (72 loc) • 1.88 kB
JavaScript
// logging/spinner.ts
import { runningTasks } from "../async.mjs";
import { $cyn, $gry, $plur, $t } from "./colors.mjs";
import { logOptions } from "./options.mjs";
var zapSpinner = "\x1B[0G\x1B[2K";
var disableWrap = "\x1B[?7l";
var enableWrap = "\x1B[?7h";
var _output = logOptions.output;
var _colors = logOptions.colors;
var _format = logOptions.format;
var _spinner = logOptions.spinner;
var _taskLength = logOptions.taskLength;
logOptions.on("changed", ({ output, colors, format, spinner, taskLength }) => {
_output = output;
_colors = colors;
_format = format;
_spinner = spinner;
_taskLength = taskLength;
setupSpinner();
});
var _spins = [
$cyn("\u2809"),
// ⠉ - 14
$cyn("\u2819"),
// ⠙ - 145
$cyn("\u2818"),
// ⠘ - 45
$cyn("\u2838"),
// ⠸ - 456
$cyn("\u2830"),
// ⠰ - 56
$cyn("\u2834"),
// ⠴ - 356
$cyn("\u2824"),
// ⠤ - 36
$cyn("\u2826"),
// ⠦ - 236
$cyn("\u2806"),
// ⠆ - 23
$cyn("\u2807"),
// ⠇ - 123
$cyn("\u2803"),
// ⠃ - 12
$cyn("\u280B")
// ⠋ - 124
];
var _nextSpin = 0;
var _interval;
function spin() {
if (!_colors) return clearInterval(_interval);
if (!_spinner) return clearInterval(_interval);
const tasks = runningTasks();
if (!tasks.length) return;
const pad = "".padStart(_taskLength, " ");
const names = tasks.map((task2) => $t(task2)).join($gry(", "));
const task = $plur(tasks.length, "task", "tasks");
_nextSpin = ++_nextSpin % _spins.length;
_output.write(`${zapSpinner}${disableWrap}${pad} ${_spins[_nextSpin]} Running ${task}: ${$gry(names)}${enableWrap}`);
}
function setupSpinner() {
if (_interval) clearInterval(_interval);
if (_colors && _spinner && _format === "fancy") {
_interval = setInterval(spin, 150).unref();
}
}
export {
disableWrap,
enableWrap,
setupSpinner,
zapSpinner
};
//# sourceMappingURL=spinner.mjs.map