| 50 | } |
| 51 | |
| 52 | async function fetchNpmDownloads(packageName: string): Promise<number> { |
| 53 | try { |
| 54 | // Use a range from 2020 to current year + 5 years to ensure it works forever |
| 55 | const currentYear = new Date().getFullYear() |
| 56 | const endYear = currentYear + 5 |
| 57 | const response = await fetch(`https://api.npmjs.org/downloads/range/2020-01-01:${endYear}-12-31/${packageName}`) |
| 58 | if (!response.ok) { |
| 59 | console.warn(`Failed to fetch npm downloads for ${packageName}: ${response.status}`) |
| 60 | return 0 |
| 61 | } |
| 62 | const data: NpmDownloadsRange = await response.json() |
| 63 | return data.downloads.reduce((total, day) => total + day.downloads, 0) |
| 64 | } catch (error) { |
| 65 | console.warn(`Error fetching npm downloads for ${packageName}:`, error) |
| 66 | return 0 |
| 67 | } |
| 68 | } |
| 69 | |
| 70 | async function fetchReleases(): Promise<Release[]> { |
| 71 | const releases: Release[] = [] |