dependency-guardian
Version:
A powerful dependency management and analysis tool for Node.js projects
64 lines (54 loc) • 1.97 kB
JavaScript
const path = require('path');
const fs = require('fs').promises;
const logger = require('./logger');
const bundleAnalyzer = require('../core/analyzers/bundle-analyzer');
class ImpactAnalyzer {
async analyzeImpact(packageName, version) {
try {
const impacts = {
size: await this.analyzeSizeImpact(packageName, version),
dependencies: await this.analyzeDependencyImpact(packageName),
breaking: await this.analyzeBreakingChanges(packageName, version),
security: await this.analyzeSecurityImpact(packageName, version)
};
return {
...impacts,
score: this.calculateImpactScore(impacts)
};
} catch (error) {
logger.error(`Failed to analyze impact for ${packageName}:`, error);
throw error;
}
}
async analyzeSizeImpact(packageName, version) {
const bundleStats = await bundleAnalyzer.analyzeBundleSize({
[packageName]: version
});
return {
size: bundleStats.size,
gzip: bundleStats.gzip,
percentage: this.calculatePercentage(bundleStats.size)
};
}
async analyzeDependencyImpact(packageName) {
// Implementation for analyzing dependency tree impact
// This would check for potential conflicts, duplicates, etc.
}
async analyzeBreakingChanges(packageName, version) {
// Implementation for detecting breaking changes
// This would compare API signatures, check changelogs, etc.
}
async analyzeSecurityImpact(packageName, version) {
// Implementation for security impact analysis
// This would check for known vulnerabilities, audit results, etc.
}
calculateImpactScore(impacts) {
// Calculate a normalized impact score (0-100)
// based on various impact metrics
}
calculatePercentage(size) {
// Calculate size impact percentage
// based on current project size
}
}
module.exports = new ImpactAnalyzer();