@nntdgrss/node-modules-cleaner
Version:
Утилита для поиска и удаления неиспользуемых node_modules директорий
71 lines (70 loc) • 3.46 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FindCommand = void 0;
const os_1 = __importDefault(require("os"));
const path_1 = __importDefault(require("path"));
const file_utils_1 = require("../utils/file.utils");
const spinner_1 = require("../ui/spinner");
const tree_view_1 = require("../ui/tree.view");
/**
* Класс для поиска директорий node_modules
*/
class FindCommand {
/**
* Поиск node_modules с настраиваемой конфигурацией
* @param startPath - начальная директория поиска (по умолчанию домашняя директория)
* @param maxDepth - максимальная глубина поиска (-1 для неограниченной)
* @returns Promise<NodeModulesInfo[]>
*/
static async execute(startPath = os_1.default.homedir(), maxDepth = -1) {
spinner_1.Spinner.start("Начинаем поиск директорий node_modules...");
spinner_1.Spinner.update(`Сканирование: ${startPath}`);
try {
const searchConfig = {
startPath: path_1.default.resolve(startPath),
maxDepth,
exclude: this.defaultExcludes,
};
const results = await file_utils_1.FileUtils.findNodeModules(searchConfig);
if (results.length === 0) {
spinner_1.Spinner.warn("Директории node_modules не найдены");
return [];
}
const totalSize = results.reduce((acc, info) => acc + info.size, 0);
const unusedCount = results.filter((r) => r.isUnused).length;
spinner_1.Spinner.success(`Найдено ${results.length} директорий (${file_utils_1.FileUtils.formatSize(totalSize)}, неиспользуемых: ${unusedCount})`);
// Отображаем древовидную структуру
tree_view_1.TreeView.display(results);
return results;
}
catch (err) {
spinner_1.Spinner.error(`Ошибка при поиске node_modules: ${err}`);
return [];
}
}
/**
* Получение человекочитаемой информации о node_modules
* @param info - информация о директории
* @returns string - форматированная строка
*/
static formatNodeModulesInfo(info) {
const size = file_utils_1.FileUtils.formatSize(info.size);
const date = info.lastModified.toLocaleDateString("ru-RU");
const status = info.isUnused ? "Не используется" : "Активный";
return `${info.path}\n Размер: ${size} | Последнее изменение: ${date} | Статус: ${status}`;
}
}
exports.FindCommand = FindCommand;
/**
* Стандартные пути для исключения из поиска
*/
FindCommand.defaultExcludes = [
"**/node_modules/node_modules/**", // Вложенные node_modules
"**/.*/**", // Скрытые директории
"**/snap/**", // Системные директории
"**/AppData/**", // Windows AppData
"**/Library/**", // macOS Library
];