UNPKG

libyear

Version:

A simple measure of software dependency freshness

47 lines (46 loc) 1.7 kB
import { merge } from "lodash-es"; import { default as semver } from "semver"; import { execute } from "./execute.js"; const { valid } = semver; const getParsedDependencies = async (packageManager, cmd) => { const stdout = await execute(cmd); switch (packageManager) { case "pnpm": return merge(...JSON.parse(stdout)); case "berry": return { dependencies: merge(...stdout .split("\n") .map((dependency) => JSON.parse(dependency)) .filter((dependency) => !/@workspace:/.test(dependency.value)) .map((dependency) => ({ [dependency.value.split(/@(npm|patch|workspace):/)[0]]: { version: dependency.children.Version, }, }))), devDependencies: {}, }; case "npm": case "yarn": default: return JSON.parse(stdout); } }; export const getDependencies = async (packageManager, flags) => { const cmd = { berry: `yarn info ${flags?.all ? "--all" : ""} --json`, pnpm: `pnpm ${flags?.all ? "recursive" : ""} list --depth=0 --json`, }[packageManager] ?? "npm ls --depth=0 --json --silent"; const json = await getParsedDependencies(packageManager, cmd); return new Map(Object.entries({ ...json.dependencies, ...json.devDependencies, }) .map(([dependency, data]) => [ dependency, data.version ?? (data.required?.version || data.required).replace(/[<=>^~]+/u, ""), ]) .filter(([_, version]) => valid(version))); };