Skip to content

Commit 2c4e1cb

Browse files
authored
feat(ui): adds social likes to compare page (#940)
1 parent 8d3bff4 commit 2c4e1cb

8 files changed

Lines changed: 40 additions & 2 deletions

File tree

app/composables/usePackageComparison.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import type {
55
Packument,
66
VulnerabilityTreeResult,
77
} from '#shared/types'
8+
import type { PackageLikes } from '#shared/types/social'
89
import { encodePackageName } from '#shared/utils/npm'
910
import type { PackageAnalysisResponse } from './usePackageAnalysis'
1011
import { isBinaryOnlyPackage } from '#shared/utils/binary-detection'
@@ -28,6 +29,8 @@ export const NoDependencyDisplay = {
2829
export interface PackageComparisonData {
2930
package: ComparisonPackage
3031
downloads?: number
32+
/** Total likes from atproto */
33+
totalLikes?: number
3134
/** Package's own unpacked size (from dist.unpackedSize) */
3235
packageSize?: number
3336
/** Number of direct dependencies */
@@ -127,7 +130,7 @@ export function usePackageComparison(packageNames: MaybeRefOrGetter<string[]>) {
127130
if (!latestVersion) return null
128131

129132
// Fetch fast additional data in parallel (optional - failures are ok)
130-
const [downloads, analysis, vulns] = await Promise.all([
133+
const [downloads, analysis, vulns, likes] = await Promise.all([
131134
$fetch<{ downloads: number }>(
132135
`https://api.npmjs.org/downloads/point/last-week/${encodePackageName(name)}`,
133136
).catch(() => null),
@@ -137,8 +140,8 @@ export function usePackageComparison(packageNames: MaybeRefOrGetter<string[]>) {
137140
$fetch<VulnerabilityTreeResult>(
138141
`/api/registry/vulnerabilities/${encodePackageName(name)}`,
139142
).catch(() => null),
143+
$fetch<PackageLikes>(`/api/social/likes/${name}`).catch(() => null),
140144
])
141-
142145
const versionData = pkgData.versions[latestVersion]
143146
const packageSize = versionData?.dist?.unpackedSize
144147

@@ -188,6 +191,7 @@ export function usePackageComparison(packageNames: MaybeRefOrGetter<string[]>) {
188191
deprecated: versionData?.deprecated,
189192
},
190193
isBinaryOnly: isBinary,
194+
totalLikes: likes?.totalLikes,
191195
}
192196
} catch {
193197
return null
@@ -299,6 +303,7 @@ function createNoDependencyData(): PackageComparisonData {
299303
},
300304
isNoDependency: true,
301305
downloads: undefined,
306+
totalLikes: undefined,
302307
packageSize: 0,
303308
directDeps: 0,
304309
installSize: {
@@ -353,6 +358,14 @@ function computeFacetValue(
353358
status: 'neutral',
354359
}
355360
}
361+
case 'totalLikes': {
362+
if (data.totalLikes === undefined) return null
363+
return {
364+
raw: data.totalLikes,
365+
display: formatCompactNumber(data.totalLikes),
366+
status: 'neutral',
367+
}
368+
}
356369
case 'packageSize': {
357370
// A size of zero is valid
358371
if (data.packageSize == null) return null

i18n/locales/en.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -931,6 +931,10 @@
931931
"label": "Downloads/wk",
932932
"description": "Weekly download count"
933933
},
934+
"totalLikes": {
935+
"label": "Likes",
936+
"description": "Number of likes"
937+
},
934938
"lastUpdated": {
935939
"label": "Published",
936940
"description": "When this version was published"

i18n/locales/fr-FR.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -903,6 +903,10 @@
903903
"label": "Téléch./semaine",
904904
"description": "Nombre de téléchargements par semaine"
905905
},
906+
"totalLikes": {
907+
"label": "Likes",
908+
"description": "Nombre de likes"
909+
},
906910
"lastUpdated": {
907911
"label": "Publié",
908912
"description": "Quand cette version a été publiée"

lunaria/files/en-GB.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -931,6 +931,10 @@
931931
"label": "Downloads/wk",
932932
"description": "Weekly download count"
933933
},
934+
"totalLikes": {
935+
"label": "Likes",
936+
"description": "Number of likes"
937+
},
934938
"lastUpdated": {
935939
"label": "Published",
936940
"description": "When this version was published"

lunaria/files/en-US.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -931,6 +931,10 @@
931931
"label": "Downloads/wk",
932932
"description": "Weekly download count"
933933
},
934+
"totalLikes": {
935+
"label": "Likes",
936+
"description": "Number of likes"
937+
},
934938
"lastUpdated": {
935939
"label": "Published",
936940
"description": "When this version was published"

lunaria/files/fr-FR.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -903,6 +903,10 @@
903903
"label": "Téléch./semaine",
904904
"description": "Nombre de téléchargements par semaine"
905905
},
906+
"totalLikes": {
907+
"label": "Likes",
908+
"description": "Nombre de likes"
909+
},
906910
"lastUpdated": {
907911
"label": "Publié",
908912
"description": "Quand cette version a été publiée"

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 {
@@ -46,6 +47,9 @@ export const FACET_INFO: Record<ComparisonFacet, Omit<FacetInfo, 'id'>> = {
4647
downloads: {
4748
category: 'health',
4849
},
50+
totalLikes: {
51+
category: 'health',
52+
},
4953
lastUpdated: {
5054
category: 'health',
5155
},

test/nuxt/components/compare/FacetSelector.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const facetLabels: Record<ComparisonFacet, { label: string; description: string
3131
description: 'Total number of dependencies including transitive',
3232
},
3333
deprecated: { label: 'Deprecated?', description: 'Whether the package is deprecated' },
34+
totalLikes: { label: 'Likes', description: 'Number of likes' },
3435
}
3536

3637
const categoryLabels: Record<string, string> = {

0 commit comments

Comments
 (0)