UNPKG

@plugjs/plug

Version:
73 lines (72 loc) 1.88 kB
// 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