UNPKG

@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
"use strict"; /** * 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