@@ -23,19 +23,45 @@ const ScanResults = ({ results, usedCache, onRefreshRequest, scanning }) => {
2323
2424 const { findings = { } , summary = { } } = results ;
2525
26- // Handle both array and object formats of findings
27- // Convert findings object to array and sort by severity
28- const vulnerabilities = Object . entries ( findings ) . map ( ( [ type , data ] ) => ( {
29- type,
30- ...data ,
31- description : data . description || 'No description provided' ,
32- severity : data . severity || 'LOW' ,
33- // Extract all file paths from allLineNumbers
34- files : Object . keys ( data . allLineNumbers || { } ) . sort ( )
35- } ) ) . sort ( ( a , b ) => {
36- const severityOrder = { CRITICAL : 0 , HIGH : 1 , MEDIUM : 2 , LOW : 3 } ;
37- return severityOrder [ a . severity ] - severityOrder [ b . severity ] ;
38- } ) ;
26+ // Group findings by description and severity
27+ const groupedFindings = Object . entries ( findings ) . reduce ( ( acc , [ type , data ] ) => {
28+ const description = data . description || 'No description provided' ;
29+ const severity = data . severity || 'LOW' ;
30+ const key = `${ description } _${ severity } ` ;
31+
32+ if ( ! acc [ key ] ) {
33+ acc [ key ] = {
34+ type,
35+ description,
36+ severity,
37+ files : [ ] ,
38+ allLineNumbers : { } ,
39+ ...data ,
40+ } ;
41+ } else {
42+ // Merge file information
43+ Object . entries ( data . allLineNumbers || { } ) . forEach ( ( [ file , lines ] ) => {
44+ if ( ! acc [ key ] . allLineNumbers [ file ] ) {
45+ acc [ key ] . allLineNumbers [ file ] = lines ;
46+ } else {
47+ acc [ key ] . allLineNumbers [ file ] = [ ...new Set ( [ ...acc [ key ] . allLineNumbers [ file ] , ...lines ] ) ] . sort ( ( a , b ) => a - b ) ;
48+ }
49+ } ) ;
50+ }
51+
52+ return acc ;
53+ } , { } ) ;
54+
55+ // Convert grouped findings to array and sort by severity
56+ const vulnerabilities = Object . values ( groupedFindings )
57+ . map ( data => ( {
58+ ...data ,
59+ files : Object . keys ( data . allLineNumbers || { } ) . sort ( )
60+ } ) )
61+ . sort ( ( a , b ) => {
62+ const severityOrder = { CRITICAL : 0 , HIGH : 1 , MEDIUM : 2 , LOW : 3 } ;
63+ return severityOrder [ a . severity ] - severityOrder [ b . severity ] ;
64+ } ) ;
3965
4066 // State for filtering
4167 const [ severityFilter , setSeverityFilter ] = React . useState ( 'ALL' ) ;
0 commit comments