UNPKG

libyear

Version:

A simple measure of software dependency freshness

47 lines (46 loc) 1.8 kB
import { merge } from "lodash-es"; import { valid } from "semver"; import { execute } from "./execute.js"; const getParsedDependencies = async (packageManager, cmd) => execute(cmd).then((stdout) => { 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):/) .at(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 list ${flags?.all ? "--recursive" : ""} --json`, }[packageManager] ?? `npm ls --depth=0 --json ${flags?.dev ? "" : "--omit=dev"} --silent ${flags?.all ? "--workspaces" : ""}`; return getParsedDependencies(packageManager, cmd).then((json) => Object.fromEntries(Object.entries({ ...json.dependencies, ...(flags?.dev ? json.devDependencies : {}), }) .map(([dependency, data]) => [ dependency, data.version ?? (data.required?.version || data.required)?.replace(/[<=>^~]+/u, ""), ]) .filter(([, version]) => valid(version)))); };