@syntropysoft/praetorian
Version:
Praetorian CLI – A universal multi-environment configuration validator for DevSecOps teams. Validate, compare, and secure YAML/ENV files with ease.
119 lines • 3.88 kB
JavaScript
;
/**
* TODO: IMPERATIVE PROGRAMMING PATTERN - NEEDS REFACTORING
*
* This file demonstrates imperative programming practices that make testing difficult:
* - Imperative forEach loops with mutable state (lines 32-50)
* - Mutable variables (let) instead of immutable transformations
* - Complex nested conditionals
* - Multiple responsibilities in single methods
* - Side effects in loops
*
* Mutation Score: 0% - Imperative patterns make testing impossible!
*
* RECOMMENDATION: Refactor to use:
* - Functional array methods (reduce, map, filter)
* - Immutable data transformations
* - Pure functions with clear contracts
* - Composition over mutation
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.AuditCalculator = void 0;
class AuditCalculator {
/**
* Calculate audit summary from validation results
*/
calculateSummary(results) {
const metrics = this.calculateMetrics(results);
const score = this.calculateScore(metrics);
const grade = this.calculateGrade(score);
const recommendations = this.generateRecommendations(results);
return {
score,
grade,
criticalIssues: metrics.criticalIssues,
securityIssues: metrics.securityIssues,
complianceIssues: metrics.complianceIssues,
recommendations,
totalChecks: metrics.totalChecks,
passedChecks: metrics.passedChecks,
failedChecks: metrics.failedChecks,
warnings: metrics.warnings
};
}
/**
* Calculate metrics from validation results
*/
calculateMetrics(results) {
let totalChecks = 0;
let passedChecks = 0;
let failedChecks = 0;
let warnings = 0;
let criticalIssues = 0;
let securityIssues = 0;
let complianceIssues = 0;
results.forEach(result => {
totalChecks += result.metadata?.rulesChecked || 0;
passedChecks += result.metadata?.rulesPassed || 0;
failedChecks += result.metadata?.rulesFailed || 0;
warnings += result.warnings.length;
result.errors.forEach(error => {
if (error.severity === 'error') {
criticalIssues++;
}
if (error.code.includes('SECURITY')) {
securityIssues++;
}
if (error.code.includes('COMPLIANCE')) {
complianceIssues++;
}
});
});
return {
totalChecks,
passedChecks,
failedChecks,
warnings,
criticalIssues,
securityIssues,
complianceIssues
};
}
/**
* Calculate score based on passed vs total checks
*/
calculateScore(metrics) {
return metrics.totalChecks > 0
? Math.round((metrics.passedChecks / metrics.totalChecks) * 100)
: 100;
}
/**
* Calculate grade based on score
*/
calculateGrade(score) {
if (score >= 90)
return 'A';
if (score >= 80)
return 'B';
if (score >= 70)
return 'C';
if (score >= 60)
return 'D';
return 'F';
}
/**
* Generate recommendations based on validation results
*/
generateRecommendations(results) {
const recommendations = [];
results.forEach(result => {
if (result.errors.length > 0) {
const auditType = result.metadata?.auditType || 'unknown';
recommendations.push(`Fix ${result.errors.length} issues in ${auditType} audit`);
}
});
return recommendations;
}
}
exports.AuditCalculator = AuditCalculator;
//# sourceMappingURL=AuditCalculator.js.map