Skip to content

Commit e2a5537

Browse files
committed
feat: compare by likes
1 parent bf0c8f7 commit e2a5537

File tree

5 files changed

+29
-2
lines changed

5 files changed

+29
-2
lines changed

app/composables/usePackageComparison.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ export interface PackageComparisonData {
4444
}
4545
/** Whether this is a binary-only package (CLI without library entry points) */
4646
isBinaryOnly?: boolean
47+
/** Total likes from atproto */
48+
totalLikes: number
4749
}
4850

4951
/**
@@ -104,16 +106,19 @@ export function usePackageComparison(packageNames: MaybeRefOrGetter<string[]>) {
104106
if (!latestVersion) return null
105107

106108
// Fetch fast additional data in parallel (optional - failures are ok)
107-
const [downloads, analysis, vulns] = await Promise.all([
109+
const [downloads, analysis, vulns, likes] = await Promise.all([
108110
$fetch<{ downloads: number }>(
109111
`https://api.npmjs.org/downloads/point/last-week/${encodePackageName(name)}`,
110112
).catch(() => null),
111113
$fetch<PackageAnalysisResponse>(`/api/registry/analysis/${name}`).catch(() => null),
112114
$fetch<VulnerabilityTreeResult>(`/api/registry/vulnerabilities/${name}`).catch(
113115
() => null,
114116
),
117+
$fetch<PackageLikes>(`/api/social/likes/${name}`).catch(() => ({
118+
totalLikes: 0,
119+
userHasLiked: false,
120+
})),
115121
])
116-
117122
const versionData = pkgData.versions[latestVersion]
118123
const packageSize = versionData?.dist?.unpackedSize
119124

@@ -160,6 +165,7 @@ export function usePackageComparison(packageNames: MaybeRefOrGetter<string[]>) {
160165
deprecated: versionData?.deprecated,
161166
},
162167
isBinaryOnly: isBinary,
168+
totalLikes: likes.totalLikes,
163169
}
164170
} catch {
165171
return null
@@ -384,6 +390,14 @@ function computeFacetValue(
384390
status: isDeprecated ? 'bad' : 'good',
385391
}
386392
}
393+
case 'totalLikes': {
394+
if (data.totalLikes === undefined) return null
395+
return {
396+
raw: data.totalLikes,
397+
display: formatCompactNumber(data.totalLikes),
398+
status: 'neutral',
399+
}
400+
}
387401
// Coming soon facets
388402
case 'totalDependencies': {
389403
if (!data.installSize) return null

i18n/locales/en.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -935,6 +935,9 @@
935935
"vulnerabilities": {
936936
"label": "Vulnerabilities",
937937
"description": "Known security vulnerabilities"
938+
},
939+
"totalLikes": {
940+
"label": "Likes"
938941
}
939942
},
940943
"values": {

lunaria/files/en-GB.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -935,6 +935,9 @@
935935
"vulnerabilities": {
936936
"label": "Vulnerabilities",
937937
"description": "Known security vulnerabilities"
938+
},
939+
"totalLikes": {
940+
"label": "Likes"
938941
}
939942
},
940943
"values": {

lunaria/files/en-US.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -935,6 +935,9 @@
935935
"vulnerabilities": {
936936
"label": "Vulnerabilities",
937937
"description": "Known security vulnerabilities"
938+
},
939+
"totalLikes": {
940+
"label": "Likes"
938941
}
939942
},
940943
"values": {

shared/types/comparison.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export type ComparisonFacet =
1616
| 'dependencies'
1717
| 'totalDependencies'
1818
| 'deprecated'
19+
| 'totalLikes'
1920

2021
/** Facet metadata for UI display */
2122
export interface FacetInfo {
@@ -52,6 +53,9 @@ export const FACET_INFO: Record<ComparisonFacet, Omit<FacetInfo, 'id'>> = {
5253
deprecated: {
5354
category: 'health',
5455
},
56+
totalLikes: {
57+
category: 'health',
58+
},
5559
// Compatibility
5660
engines: {
5761
category: 'compatibility',

0 commit comments

Comments
 (0)