UNPKG

depnudge

Version:

🚀 Advanced NPM package manager with intelligent updates, security scanning, and dependency optimization

68 lines (54 loc) • 2.41 kB
const { askConfirmation } = require("./readline"); const { console_styled, colors } = require("../utils/console"); const { t } = require("../utils/lang"); async function showInteractiveMenu(outdatedPackages) { const packageCount = Object.keys(outdatedPackages).length; console_styled.header(await t("update.outdated_found", { count: packageCount })); console.log(); Object.keys(outdatedPackages).forEach(pkgName => { const info = outdatedPackages[pkgName]; console_styled.log(` ${colors.bright}${pkgName}${colors.reset}: ${colors.dim}${info.current}${colors.reset} → ${colors.green}${info.latest}${colors.reset}`); }); console.log(); console_styled.bright(await t("menu.what_to_do")); console_styled.log(` [u] ${await t("menu.update_all")}`, colors.green); console_styled.log(` [s] ${await t("menu.select_specific")}`, colors.yellow); console_styled.log(` [c] ${await t("menu.cancel_exit")}`, colors.red); console.log(); const choice = await askConfirmation(await t("menu.enter_choice")); switch (choice) { case "u": case "update": return Object.keys(outdatedPackages); case "s": case "select": return await selectPackages(outdatedPackages); case "c": case "cancel": case "exit": console_styled.info(await t("general.cancelled")); return []; default: console_styled.error(await t("general.invalid_choice")); throw new Error("Invalid menu choice"); } } async function selectPackages(outdatedPackages) { const packageNames = Object.keys(outdatedPackages); console_styled.info(await t("menu.enter_packages")); const selection = await askConfirmation(await t("menu.packages_to_update")); if (selection === "all") { return packageNames; } const selectedPackages = selection.split(" ").filter(pkg => pkg.trim()); const validPackages = selectedPackages.filter(pkg => packageNames.includes(pkg)); const invalidPackages = selectedPackages.filter(pkg => !packageNames.includes(pkg)); if (invalidPackages.length > 0) { console_styled.warn(await t("menu.ignoring_invalid", { packages: invalidPackages.join(", ") })); } if (validPackages.length === 0) { console_styled.error(await t("menu.no_valid_packages")); } return validPackages; } module.exports = { showInteractiveMenu, selectPackages };