mirror of
https://github.com/lainbo/component-party.git
synced 2026-04-05 13:09:03 +08:00
47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import { frameworks } from "../frameworks";
|
|
|
|
const mainPackageNames = frameworks.map((f) => f.mainPackageName);
|
|
|
|
interface PackageDownloadStats {
|
|
packageName: string;
|
|
downloads: number;
|
|
}
|
|
|
|
async function getPackageDownloads(
|
|
packageName: string,
|
|
): Promise<number | null> {
|
|
try {
|
|
const response = await fetch(
|
|
`https://api.npmjs.org/downloads/point/last-month/${packageName}`,
|
|
);
|
|
const data = await response.json();
|
|
return data.downloads;
|
|
} catch (error) {
|
|
console.error(
|
|
`Failed to fetch download stats for package ${packageName}: `,
|
|
error,
|
|
);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
async function sortPackagesByDownloads(
|
|
packages: string[],
|
|
): Promise<PackageDownloadStats[] | null> {
|
|
try {
|
|
const downloadStats = await Promise.all(packages.map(getPackageDownloads));
|
|
|
|
return packages
|
|
.map((packageName, index) => ({
|
|
packageName,
|
|
downloads: downloadStats[index] || 0,
|
|
}))
|
|
.sort((a, b) => b.downloads - a.downloads); // sort in descending order
|
|
} catch (error) {
|
|
console.error(`Failed to sort packages: `, error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
sortPackagesByDownloads(mainPackageNames).then(console.log);
|