UNPKG

node-tidy

Version:

A CLI tool to find and remove unused NPM packages and Install Missing packages in your Node.js projects.

90 lines (89 loc) 3.88 kB
#!/usr/bin/env node "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = __importDefault(require("fs")); const execCommand_1 = __importDefault(require("../utils/execCommand")); const askUser_1 = __importDefault(require("../utils/askUser")); const findUnusedPackages_1 = __importDefault(require("../utils/findUnusedPackages")); const getDependencies_1 = __importDefault(require("../utils/getDependencies")); const InstallMissingPackages_1 = __importDefault(require("../utils/InstallMissingPackages")); // Handle the removal of unused packages async function handlePackageRemoval({ dependencies, devDependencies, packageJson, }) { if (dependencies.length === 0 && devDependencies.length === 0) { console.log("No unused packages found. You're all set!"); return; } console.log("Unused packages found:"); if (dependencies.length > 0) { console.log("Dependencies:"); dependencies.forEach((pkg) => console.log(`- ${pkg}`)); } if (devDependencies.length > 0) { console.log("DevDependencies:"); devDependencies.forEach((pkg) => console.log(`- ${pkg}`)); } const answer = await (0, askUser_1.default)("Do you want to remove these unused packages? (yes/no): "); if (answer === "yes" || answer === "y") { await removePackages({ dependencies, devDependencies }); await handleRollback(packageJson); } else { console.log("No packages were removed."); } } // Remove unused packages function removePackages({ dependencies, devDependencies }) { [...dependencies, ...devDependencies].forEach((pkg) => { console.log(`Removing ${pkg}...`); (0, execCommand_1.default)(`npm uninstall ${pkg}`); }); console.log("Unused packages removed successfully."); } // Handle the rollback process if needed async function handleRollback(packageJson) { const rollbackAnswer = await (0, askUser_1.default)("Do you want to rollback the changes? (yes/no): "); if (rollbackAnswer === "yes" || rollbackAnswer === "y") { // const { packageJson } = getDependencies(); const backupPackageJson = JSON.stringify(packageJson, null, 2); fs_1.default.writeFileSync("package.json", backupPackageJson); console.log("package.json restored to its original state."); console.log("....Installing Removed Package....."); (0, execCommand_1.default)("npm install"); } else { console.log("Changes retained."); } } const installMissingPackages = async () => { // Show missing packages const missingPackages = await (0, InstallMissingPackages_1.default)(); if (missingPackages.length > 0) { console.log("\nMissing packages detected:"); missingPackages.forEach((pkg) => console.log(`- ${pkg}`)); const answer = await (0, askUser_1.default)("\nDo you want to install these missing packages? (yes/no): "); if (answer === "yes" || answer === "y") { missingPackages.forEach((pkg) => { console.log(`Installing ${pkg}...`); (0, execCommand_1.default)(`npm install ${pkg}`); }); console.log("Missing packages installed successfully."); } } else { console.log("\nNo missing packages detected."); } }; async function main() { const packageJson = (0, getDependencies_1.default)(); const unusedPackages = await (0, findUnusedPackages_1.default)(); await handlePackageRemoval({ dependencies: unusedPackages.dependencies, devDependencies: unusedPackages.devDependencies, packageJson: packageJson.packageJson, }); await installMissingPackages(); } exports.default = main;