Skip to content

Commit 1a81573

Browse files
authored
fix: correct vulnerability data parsing and severity type (#769)
1 parent 44c6c4c commit 1a81573

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

app/composables/usePackageComparison.ts

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import type { FacetValue, ComparisonFacet, ComparisonPackage, Packument } from '#shared/types'
1+
import type {
2+
FacetValue,
3+
ComparisonFacet,
4+
ComparisonPackage,
5+
Packument,
6+
VulnerabilityTreeResult,
7+
} from '#shared/types'
28
import { encodePackageName } from '#shared/utils/npm'
39
import type { PackageAnalysisResponse } from './usePackageAnalysis'
410
import { isBinaryOnlyPackage } from '#shared/utils/binary-detection'
@@ -17,7 +23,7 @@ export interface PackageComparisonData {
1723
analysis?: PackageAnalysisResponse
1824
vulnerabilities?: {
1925
count: number
20-
severity: { critical: number; high: number; medium: number; low: number }
26+
severity: { critical: number; high: number; moderate: number; low: number }
2127
}
2228
metadata?: {
2329
license?: string
@@ -98,9 +104,9 @@ export function usePackageComparison(packageNames: MaybeRefOrGetter<string[]>) {
98104
`https://api.npmjs.org/downloads/point/last-week/${encodePackageName(name)}`,
99105
).catch(() => null),
100106
$fetch<PackageAnalysisResponse>(`/api/registry/analysis/${name}`).catch(() => null),
101-
$fetch<{
102-
vulnerabilities: Array<{ severity: string }>
103-
}>(`/api/registry/vulnerabilities/${name}`).catch(() => null),
107+
$fetch<VulnerabilityTreeResult>(`/api/registry/vulnerabilities/${name}`).catch(
108+
() => null,
109+
),
104110
])
105111

106112
const versionData = pkgData.versions[latestVersion]
@@ -115,12 +121,14 @@ export function usePackageComparison(packageNames: MaybeRefOrGetter<string[]>) {
115121
exports: versionData?.exports,
116122
})
117123

118-
// Count vulnerabilities by severity
119-
const vulnCounts = { critical: 0, high: 0, medium: 0, low: 0 }
120-
const vulnList = vulns?.vulnerabilities ?? []
121-
for (const v of vulnList) {
122-
const sev = v.severity.toLowerCase() as keyof typeof vulnCounts
123-
if (sev in vulnCounts) vulnCounts[sev]++
124+
// Vulnerabilities
125+
let vulnsTotal: number = 0
126+
let vulnsSeverity = { critical: 0, high: 0, moderate: 0, low: 0 }
127+
128+
if (vulns) {
129+
const { total, ...severity } = vulns.totalCounts
130+
vulnsTotal = total
131+
vulnsSeverity = severity
124132
}
125133

126134
return {
@@ -134,8 +142,8 @@ export function usePackageComparison(packageNames: MaybeRefOrGetter<string[]>) {
134142
installSize: undefined, // Will be filled in second pass
135143
analysis: analysis ?? undefined,
136144
vulnerabilities: {
137-
count: vulnList.length,
138-
severity: vulnCounts,
145+
count: vulnsTotal,
146+
severity: vulnsSeverity,
139147
},
140148
metadata: {
141149
license: pkgData.license,

0 commit comments

Comments
 (0)