UNPKG

agentsqripts

Version:

Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems

62 lines (60 loc) 2.75 kB
/** * @file Calculate severity counts for issue aggregation * @description Single responsibility: Count issues by severity level for reporting * * This utility aggregates issues by their severity levels to provide statistical * summaries for analysis reports. The function handles missing severity properties * gracefully and maintains consistent counting across all analyzers. * * Design rationale: * - Uses reduce for efficient single-pass counting * - Defaults missing severity to 'INFO' for consistent categorization * - Returns object for O(1) lookup performance in reporting * - Handles edge cases like null/undefined severity gracefully */ /** * Calculate counts of issues grouped by severity level * * Technical function: Aggregates issue array into severity-keyed count object * * Implementation rationale: * - reduce() provides efficient single-pass aggregation over forEach + object updates * - Default severity fallback ('INFO') ensures all issues are counted * - Object accumulator pattern enables dynamic key creation for unknown severities * - Logical OR (||) handles falsy values (null, undefined, empty string) * * Severity handling strategy: * - Uses issue.severity property as primary categorization key * - Defaults to 'INFO' when severity is missing/falsy for graceful degradation * - Supports any severity string (not limited to predefined set) * - Maintains case sensitivity for accurate categorization * * Performance considerations: * - O(n) time complexity for single pass through issues * - O(k) space complexity where k is number of unique severities * - No sorting or additional iterations required * - Efficient object property access for counting * * Edge cases handled: * - Empty issues array: Returns empty object {} * - Issues without severity property: Counted as 'INFO' * - Null/undefined severity values: Counted as 'INFO' * - Unknown severity levels: Creates new count categories dynamically * * Alternative approaches considered: * - forEach with external object: Rejected as less functional and more verbose * - Map/Set based counting: Rejected as objects provide better serialization * - Predefined severity validation: Rejected to support analyzer flexibility * * @param {Array<Object>} issues - Array of issue objects with optional severity property * @returns {Object<string, number>} Object mapping severity levels to counts * Example: { "LOW": 5, "MEDIUM": 3, "HIGH": 1, "INFO": 2 } */ function calculateSeverityCounts(issues) { return issues.reduce((counts, issue) => { const severity = issue.severity || 'INFO'; counts[severity] = (counts[severity] || 0) + 1; return counts; }, {}); } module.exports = calculateSeverityCounts;