( results: Partial<Record<DependencyGroup, AuditResult>>, )
| 139 | } |
| 140 | |
| 141 | function logAuditSummary( |
| 142 | results: Partial<Record<DependencyGroup, AuditResult>>, |
| 143 | ): void { |
| 144 | const { totalCount, countsPerLevel } = aggregateAuditResults(results); |
| 145 | const formattedLevels = objectToEntries(countsPerLevel) |
| 146 | .filter(([, count]) => count > 0) |
| 147 | .map(([level, count]) => `${count} ${level}`) |
| 148 | .join(', '); |
| 149 | |
| 150 | logger.info( |
| 151 | [ |
| 152 | `Found ${pluralizeToken('vulnerability', totalCount)} in total`, |
| 153 | formattedLevels && `(${formattedLevels})`, |
| 154 | ] |
| 155 | .filter(Boolean) |
| 156 | .join(' '), |
| 157 | ); |
| 158 | |
| 159 | if (!logger.isVerbose()) { |
| 160 | return; |
| 161 | } |
| 162 | logger.debug( |
| 163 | formatAsciiTable({ |
| 164 | columns: [ |
| 165 | { key: 'depGroup', label: 'Dep. group' }, |
| 166 | ...[...packageAuditLevels, 'total'].map( |
| 167 | (level): TableColumnObject => ({ |
| 168 | key: level, |
| 169 | label: capitalize(level), |
| 170 | align: 'right', |
| 171 | }), |
| 172 | ), |
| 173 | ], |
| 174 | rows: objectToEntries(results).map( |
| 175 | ([depGroup, result]): TableRowObject => ({ |
| 176 | depGroup, |
| 177 | ...result?.summary, |
| 178 | }), |
| 179 | ), |
| 180 | }), |
| 181 | ); |
| 182 | } |
| 183 | |
| 184 | function aggregateAuditResults( |
| 185 | results: Partial<Record<DependencyGroup, AuditResult>>, |
no test coverage detected