libyear
Version:
A simple measure of software dependency freshness
74 lines (73 loc) • 2.59 kB
JavaScript
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);
}
};