@nntdgrss/node-modules-cleaner
Version:
Утилита для поиска и удаления неиспользуемых node_modules директорий
88 lines (87 loc) • 3.15 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Progress = void 0;
const cli_progress_1 = __importDefault(require("cli-progress"));
const chalk_1 = __importDefault(require("chalk"));
const file_utils_1 = require("../utils/file.utils");
/**
* Класс для отображения прогресса операций в консоли
*/
class Progress {
/**
* Создание и старт прогресс-бара
* @param total - общее количество операций
* @param message - сообщение прогресс-бара
*/
static start(total, message) {
// Очищаем консоль для лучшего отображения
console.clear();
this.bar = new cli_progress_1.default.SingleBar({
format: `${message} |${chalk_1.default.cyan("{bar}")}| {percentage}% | {value}/{total} | {size}`,
barCompleteChar: "█",
barIncompleteChar: "░",
hideCursor: true,
clearOnComplete: true,
});
this.bar.start(total, 0, { size: "0 Б" });
}
/**
* Обновление прогресса
* @param current - текущий прогресс
* @param size - обработанный размер (в байтах)
*/
static update(current, size = 0) {
if (this.bar) {
this.bar.update(current, { size: file_utils_1.FileUtils.formatSize(size) });
}
}
/**
* Остановка прогресс-бара
*/
static stop() {
if (this.bar) {
this.bar.stop();
}
}
/**
* Группировка node_modules по размеру
* @param sizes - массив размеров в байтах
* @returns объект с группами
*/
static getSizeGroup(size) {
const GB = 1024 * 1024 * 1024;
const MB = 1024 * 1024;
if (size >= GB) {
return { color: chalk_1.default.red, label: "Очень большой" };
}
else if (size >= 100 * MB) {
return { color: chalk_1.default.yellow, label: "Большой" };
}
else if (size >= 10 * MB) {
return { color: chalk_1.default.blue, label: "Средний" };
}
else {
return { color: chalk_1.default.green, label: "Малый" };
}
}
/**
* Форматирование текста с цветом в зависимости от размера
* @param text - текст для форматирования
* @param size - размер в байтах
* @returns отформатированный текст
*/
static colorizeBySize(text, size) {
const { color } = this.getSizeGroup(size);
return color(text);
}
/**
* Очистка консоли
*/
static clearConsole() {
console.clear();
}
}
exports.Progress = Progress;