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
JavaScript
;
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;