UNPKG

dependency-guardian

Version:

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

103 lines (90 loc) 2.9 kB
const dependencyScanner = require('./analyzers/dependency-scanner'); const logger = require('../utils/logger'); const semver = require('semver'); class DependencyAnalyzer { constructor() { this.scanner = dependencyScanner; } async analyze(projectPath) { try { // Read package.json const packageJson = await this.scanner.readPackageJson(projectPath); // Scan dependencies const dependencies = { ...(packageJson.dependencies || {}), // Optionally include devDependencies if needed // ...(packageJson.devDependencies || {}) }; const results = await this.scanner.scanDependencies(dependencies); // Process and categorize results const analysis = { summary: { total: results.length, issues: 0, critical: 0, updates: { major: 0, minor: 0, patch: 0 } }, dependencies: results.map(dep => ({ name: dep.name, version: dep.version, latestVersion: dep.latestVersion, updateType: dep.updateType, license: dep.license, issues: this.validateDependency(dep) })) }; // Update summary counts analysis.dependencies.forEach(dep => { analysis.summary.issues += dep.issues.length; analysis.summary.critical += dep.issues.filter(i => i.level === 'high').length; if (dep.updateType && dep.updateType !== 'current') { analysis.summary.updates[dep.updateType]++; } }); return analysis; } catch (error) { logger.error('Analysis failed:', error); throw error; } } validateDependency(dep) { const issues = []; // Check update type if (dep.updateType === 'unknown') { issues.push({ type: 'updates', level: 'warning', message: `Unable to determine update status for ${dep.name}` }); } else if (dep.updateType !== 'current') { const level = dep.updateType === 'major' ? 'high' : 'warning'; issues.push({ type: 'updates', level, message: `${dep.updateType} update available (${dep.version}${dep.latestVersion})` }); } // Check license if (!dep.license || dep.license === 'UNKNOWN') { issues.push({ type: 'license', level: 'warning', message: `No license information found for ${dep.name}` }); } // Check if version is valid if (!semver.valid(semver.clean(dep.version))) { issues.push({ type: 'version', level: 'warning', message: `Invalid version format: ${dep.version}` }); } return issues; } } module.exports = new DependencyAnalyzer();