npm-ls-flat
Version:
detects dependency version mismatches for streamlined dependency management
29 lines (28 loc) • 1.37 kB
JavaScript
import semver from 'semver';
export const isPackageType = (obj) => typeof obj === 'object' && typeof obj.version === 'string' && semver.valid(obj.version) !== null;
export const hasDependencies = (obj) => typeof obj === 'object' && typeof obj.dependencies === 'object';
const transformToPackageInfo = (pkg, path = []) => {
const result = [];
if (isPackageType(pkg)) {
result.push({
name: path[path.length - 1].name, // Get the name from the last element of the path
version: pkg.version,
invalid: pkg.invalid,
path: path.length <= 1 ? undefined : path.slice(0, -1) // Set to undefined if path is empty
});
}
if (hasDependencies(pkg)) {
for (const [key, value] of Object.entries(pkg.dependencies)) {
result.push(...transformToPackageInfo(value, [...path, { name: key, version: value.version }]));
}
}
return result;
};
export const traverseDependencyTree = (dependencyTree) => {
const result = [];
for (const [name, pkg] of Object.entries(dependencyTree)) {
result.push(...transformToPackageInfo(pkg, [{ name, version: pkg.version }]));
}
return result;
};
export const sortPackageVersions = (pkg, order = 'ASC') => pkg.sort((a, b) => (order === 'ASC' ? semver.compare(a.version, b.version) : semver.rcompare(a.version, b.version)));