From 75739533c400c56aef2b504077ce68f954a0b372 Mon Sep 17 00:00:00 2001 From: Roman Date: Sat, 2 May 2026 20:19:55 +0100 Subject: [PATCH 1/8] fix: show license from correct version (#2662) --- app/composables/npm/usePackage.ts | 22 +++++++++++----------- shared/types/npm-registry.ts | 4 +++- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/app/composables/npm/usePackage.ts b/app/composables/npm/usePackage.ts index 747de4992e..7864f1b6f5 100644 --- a/app/composables/npm/usePackage.ts +++ b/app/composables/npm/usePackage.ts @@ -16,6 +16,13 @@ function getTrustLevel(version: PackumentVersion): PublishTrustLevel { return 'none' } +function normalizeLicense(license?: PackumentLicense): string | undefined { + if (!license) return undefined + if (typeof license === 'string') return license + if (typeof license.type === 'string') return license.type + return undefined +} + /** * Transform a full Packument into a slimmed version for client-side use. * Reduces payload size by: @@ -72,6 +79,7 @@ export function transformPackument( for (const v of includedVersions) { const version = pkg.versions[v] if (version) { + const versionLicense = normalizeLicense(version.license) if (version.version === requestedVersion) { // Strip readme from each version, extract install scripts info const { readme: _readme, scripts, ...slimVersion } = version @@ -80,25 +88,20 @@ export function transformPackument( const installScripts = scripts ? extractInstallScriptsInfo(scripts) : null versionData = { ...slimVersion, + license: versionLicense, installScripts: installScripts ?? undefined, } } const trustLevel = getTrustLevel(version) const hasProvenance = trustLevel !== 'none' - // Normalize license: some versions use { type: "MIT" } instead of "MIT" - let versionLicense = version.license - if (versionLicense && typeof versionLicense === 'object' && 'type' in versionLicense) { - versionLicense = (versionLicense as { type: string }).type - } - filteredVersions[v] = { hasProvenance, trustLevel, version: version.version, deprecated: version.deprecated, tags: version.tags as string[], - license: typeof versionLicense === 'string' ? versionLicense : undefined, + license: versionLicense, type: typeof version.type === 'string' ? version.type : undefined, } } @@ -113,10 +116,7 @@ export function transformPackument( } // Normalize license field - let license = pkg.license - if (license && typeof license === 'object' && 'type' in license) { - license = license.type - } + const license = normalizeLicense(requestedVersion ? versionData?.license : pkg.license) // Extract storybook field from the requested version (custom package.json field) const requestedPkgVersion = requestedVersion ? pkg.versions[requestedVersion] : null diff --git a/shared/types/npm-registry.ts b/shared/types/npm-registry.ts index 6ffe94aded..2c568e2503 100644 --- a/shared/types/npm-registry.ts +++ b/shared/types/npm-registry.ts @@ -23,10 +23,12 @@ export interface PackumentVersion extends PackumentVersionWithoutAttestations { dist: PackumentVersionWithoutAttestations['dist'] & { attestations?: NpmVersionAttestations } } +export type PackumentLicense = string | { type: string; url?: string } + export type Packument = Omit & { // Fix for license field being incorrectly typed in @npm/types // TODO: Remove this type override when @npm/types fixes the license field typing - license?: string | { type: string; url?: string } + license?: PackumentLicense versions: Record } From 1cd4f82a788963a8111d4acd3ba67ecdf9b83e3d Mon Sep 17 00:00:00 2001 From: Roman Date: Sat, 2 May 2026 20:28:12 +0100 Subject: [PATCH 2/8] feat: add SolidJS data anomalies to download-anomalies.data.ts (#2661) --- app/utils/download-anomalies.data.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/utils/download-anomalies.data.ts b/app/utils/download-anomalies.data.ts index 3cb23fb858..55fdafe989 100644 --- a/app/utils/download-anomalies.data.ts +++ b/app/utils/download-anomalies.data.ts @@ -22,6 +22,11 @@ export const DOWNLOAD_ANOMALIES: DownloadAnomaly[] = [ start: { date: '2023-11-18', weeklyDownloads: 59_611 }, end: { date: '2023-11-21', weeklyDownloads: 150_680 }, }, + { + packageName: 'solid-js', + start: { date: '2024-12-22', weeklyDownloads: 21_395 }, + end: { date: '2024-12-24', weeklyDownloads: 28_308 }, + }, /** * NOTE: * - please add new entries above this comment. From 1fef8da3e8df902d3d992d2151d44f514aed967a Mon Sep 17 00:00:00 2001 From: Philippe Serhal Date: Sun, 3 May 2026 08:29:06 -0400 Subject: [PATCH 3/8] feat: show badge on top liked packages, link to leaderboard (#2459) --- app/components/Package/Likes.vue | 196 +++--- app/pages/leaderboard/likes.vue | 569 ++++++++++++++++++ i18n/locales/en.json | 16 +- i18n/locales/fr-FR.json | 16 +- i18n/schema.json | 42 ++ nuxt.config.ts | 2 + server/api/leaderboard/likes.get.ts | 10 + server/api/social/likes/[...pkg].get.ts | 12 +- server/utils/atproto/utils/likes.ts | 9 +- server/utils/likes-leaderboard.ts | 253 ++++++++ server/utils/npm-homepage.ts | 111 ++++ shared/types/social.ts | 18 + shared/utils/constants.ts | 4 + shared/utils/fetch-cache-config.ts | 9 +- test/fixtures/likes-leaderboard.ts | 23 + test/fixtures/microlink/kit.svelte.dev.json | 11 + test/fixtures/microlink/nuxt.com.json | 11 + test/fixtures/microlink/react.dev.json | 11 + test/fixtures/microlink/vuejs.org.json | 15 + test/fixtures/mock-routes.cjs | 24 + test/nuxt/a11y.spec.ts | 68 ++- test/nuxt/components/Package/Likes.spec.ts | 117 ++++ test/nuxt/pages/LikesLeaderboardPage.spec.ts | 88 +++ .../server/utils/likes-leaderboard.spec.ts | 295 +++++++++ test/unit/server/utils/npm-homepage.spec.ts | 110 ++++ 25 files changed, 1958 insertions(+), 82 deletions(-) create mode 100644 app/pages/leaderboard/likes.vue create mode 100644 server/api/leaderboard/likes.get.ts create mode 100644 server/utils/likes-leaderboard.ts create mode 100644 server/utils/npm-homepage.ts create mode 100644 test/fixtures/likes-leaderboard.ts create mode 100644 test/fixtures/microlink/kit.svelte.dev.json create mode 100644 test/fixtures/microlink/nuxt.com.json create mode 100644 test/fixtures/microlink/react.dev.json create mode 100644 test/fixtures/microlink/vuejs.org.json create mode 100644 test/nuxt/components/Package/Likes.spec.ts create mode 100644 test/nuxt/pages/LikesLeaderboardPage.spec.ts create mode 100644 test/unit/server/utils/likes-leaderboard.spec.ts create mode 100644 test/unit/server/utils/npm-homepage.spec.ts diff --git a/app/components/Package/Likes.vue b/app/components/Package/Likes.vue index 5c7b68089b..e48f543e62 100644 --- a/app/components/Package/Likes.vue +++ b/app/components/Package/Likes.vue @@ -1,4 +1,5 @@ -