UNPKG

dependency-guardian

Version:

A powerful dependency management and analysis tool for Node.js projects

92 lines (78 loc) 2.86 kB
const { exec } = require('child_process'); const util = require('util'); const execPromise = util.promisify(exec); const logger = require('./logger'); const fs = require('fs').promises; const path = require('path'); class PackageUtils { constructor() { this.supportedManagers = ['npm', 'yarn', 'pnpm']; } async detectPackageManager() { try { // Check for lock files const files = await fs.readdir(process.cwd()); if (files.includes('yarn.lock')) return 'yarn'; if (files.includes('pnpm-lock.yaml')) return 'pnpm'; if (files.includes('package-lock.json')) return 'npm'; // Default to npm return 'npm'; } catch (error) { logger.error('Failed to detect package manager:', error); return 'npm'; } } async installDependencies(dependencies, options = {}) { const { dev = false, exact = false, manager = await this.detectPackageManager() } = options; const cmd = this.buildInstallCommand(dependencies, { dev, exact, manager }); try { const { stdout, stderr } = await execPromise(cmd); return { success: true, output: stdout }; } catch (error) { logger.error('Installation failed:', error); return { success: false, error: error.message }; } } async uninstallDependencies(dependencies, options = {}) { const { manager = await this.detectPackageManager() } = options; const cmd = this.buildUninstallCommand(dependencies, { manager }); try { const { stdout, stderr } = await execPromise(cmd); return { success: true, output: stdout }; } catch (error) { logger.error('Uninstallation failed:', error); return { success: false, error: error.message }; } } buildInstallCommand(dependencies, options) { const { dev, exact, manager } = options; const deps = Array.isArray(dependencies) ? dependencies : [dependencies]; switch (manager) { case 'yarn': return `yarn add${dev ? ' -D' : ''}${exact ? ' --exact' : ''} ${deps.join(' ')}`; case 'pnpm': return `pnpm add${dev ? ' -D' : ''}${exact ? ' --save-exact' : ''} ${deps.join(' ')}`; default: // npm return `npm install${dev ? ' --save-dev' : ' --save'}${exact ? ' --save-exact' : ''} ${deps.join(' ')}`; } } buildUninstallCommand(dependencies, options) { const { manager } = options; const deps = Array.isArray(dependencies) ? dependencies : [dependencies]; switch (manager) { case 'yarn': return `yarn remove ${deps.join(' ')}`; case 'pnpm': return `pnpm remove ${deps.join(' ')}`; default: // npm return `npm uninstall ${deps.join(' ')}`; } } } module.exports = new PackageUtils();