devghost
Version:
👻 Find dead code, dead imports, and dead dependencies before they haunt your project
63 lines • 2.77 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.removeDependency = removeDependency;
exports.removeDependencies = removeDependencies;
const node_child_process_1 = require("node:child_process");
const node_fs_1 = __importDefault(require("node:fs"));
const node_path_1 = __importDefault(require("node:path"));
const chalk_1 = __importDefault(require("chalk"));
const packageManager_1 = require("../utils/packageManager");
async function removeDependency(packageName, projectRoot, isDev, dryRun = false) {
const packageManager = (0, packageManager_1.detectPackageManager)(projectRoot);
const uninstallCommand = (0, packageManager_1.getUninstallCommand)(packageManager, packageName, isDev);
try {
if (dryRun) {
console.log(chalk_1.default.blue(`[Dry Run] Would execute: ${uninstallCommand} in ${projectRoot}`));
return {
success: true,
packageName,
};
}
else {
(0, node_child_process_1.execSync)(uninstallCommand, { cwd: projectRoot, stdio: 'inherit' });
return {
success: true,
packageName,
};
}
}
catch (error) {
const errorMessage = error.message;
// Check for common error patterns and provide friendly messages
let friendlyMessage = errorMessage;
if (errorMessage.includes('ENOTFOUND') || errorMessage.includes('ETIMEDOUT')) {
friendlyMessage = 'Network error - check your internet connection';
}
else if (errorMessage.includes('ENOENT')) {
friendlyMessage = 'Package manager not found - ensure npm/yarn/pnpm is installed';
}
else if (errorMessage.toLowerCase().includes('permission')) {
friendlyMessage = 'Permission denied - try running with elevated privileges';
}
return {
success: false,
packageName,
error: friendlyMessage,
};
}
}
async function removeDependencies(packages, projectRoot, _includeDevDeps, dryRun = false) {
const pkgJsonPath = node_path_1.default.join(projectRoot, 'package.json');
const pkgJson = JSON.parse(node_fs_1.default.readFileSync(pkgJsonPath, 'utf-8'));
const results = [];
for (const packageName of packages) {
const isDev = pkgJson.devDependencies && packageName in pkgJson.devDependencies;
const result = await removeDependency(packageName, projectRoot, isDev, dryRun);
results.push(result);
}
return results;
}
//# sourceMappingURL=dependencyFixer.js.map