diff --git a/src/components/App.tsx b/src/components/App.tsx index 0b5202e..cd8af8b 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -1,7 +1,11 @@ // @ts-expect-error semver has no types import semver from "semver"; import { createSignal, For, onMount, Show } from "solid-js"; -import { getBasePackageSize, getSortedDependents } from "#lib/api"; +import { + getBasePackageSize, + getPackageIsDeprecated, + getSortedDependents, +} from "#lib/api"; import { escapeMdTable, formatDownloads, @@ -14,6 +18,7 @@ interface AnalysisResult { version: string; downloads: number; traffic: number; + deprecated: boolean; } type State = @@ -128,9 +133,9 @@ export default function App() { isDev: dev, onProgress, }); - onProgress(99, "Calculating traffic and versions..."); + onProgress(90, "Calculating traffic and versions..."); - const items = sortedDeps + const items: AnalysisResult[] = sortedDeps .filter((d) => { if (!requestedRange) return true; if (d.v === requestedRange) return true; @@ -141,13 +146,32 @@ export default function App() { return false; } }) + .slice(0, limit) .map((d) => ({ name: d.n, version: d.v, downloads: d.d, traffic: d.d * pkgSize, - })) - .slice(0, limit); + deprecated: false, + })); + + onProgress(90, "Checking deprecation status..."); + + const chunkSize = 50; + for (let i = 0; i < items.length; i += chunkSize) { + const chunk = items.slice(i, i + chunkSize); + await Promise.all( + chunk.map(async (item) => { + item.deprecated = await getPackageIsDeprecated(item.name).catch( + () => false, + ); + }), + ); + onProgress( + 90 + Math.floor(((i + chunk.length) / items.length) * 9), + "Checking deprecation status...", + ); + } setState( items.length > 0 @@ -181,7 +205,7 @@ export default function App() { const downloadsStr = formatDownloads(pkg.downloads); const trafficStr = formatTraffic(pkg.traffic); const versionStr = pkg.version || "any"; - const pkgLink = `[${pkg.name}](https://npmx.dev/${pkg.name})`; + const pkgLink = `[${pkg.name}](https://npmx.dev/${pkg.name})${pkg.deprecated ? " ⚠️" : ""}`; if (!isDev()) { md += escapeMdTable`| ${indexStr} | ${downloadsStr} | ${trafficStr} | ${versionStr} | ${pkgLink} |\n`; @@ -500,14 +524,34 @@ export default function App() { - - {pkg.name} - +
+ + {pkg.name} + + + + Deprecated + + + +
)}