UNPKG

libyear

Version:

A simple measure of software dependency freshness

74 lines (73 loc) 2.59 kB
import { execute } from "./execute.js"; let registry; const getRegistry = async (packageManager) => { if (registry != null) { return Promise.resolve(registry); } const cmd = { berry: "yarn config get npmRegistryServer", npm: "npm config get registry", pnpm: "pnpm config get registry", yarn: "yarn config get registry", }[packageManager].replace(/\/$/, ""); registry = await execute(cmd); return registry; }; const getPackageInfoFromRegistry = async (packageManager, packageName) => { const registry = await getRegistry(packageManager); const { deprecated, time, versions } = (await (await fetch(`${registry}/${packageName}`)).json()); return { deprecated, versions: Object.fromEntries(Object.entries(versions).map(([version, { deprecated }]) => [ version, { deprecated, time: time[version], }, ])), }; }; export const getPackageInfoFromPackageManager = async (packageManager, packageName) => { const cmd = { berry: `yarn npm info ${packageName} --fields deprecated,time,versions --json`, npm: `npm view ${packageName} deprecated time versions --json`, pnpm: `npm view ${packageName} deprecated time versions --json`, yarn: `yarn info ${packageName} --json`, }[packageManager]; return execute(cmd).then((stdout) => { if (!stdout) { return {}; } const json = JSON.parse(stdout); switch (packageManager) { case "yarn": { const { data: { deprecated, time, versions }, } = json; return { deprecated, versions: Object.fromEntries(versions.map((version) => [ version, { time: time[version] }, ])), }; } default: { const { deprecated, time, versions } = json; return { deprecated, versions: Object.fromEntries(versions.map((version) => [ version, { time: time[version] }, ])), }; } } }); }; export const getPackageInfo = async (packageManager, packageName) => { try { return await getPackageInfoFromRegistry(packageManager, packageName); } catch { return await getPackageInfoFromPackageManager(packageManager, packageName); } };