mop-cli
Version:
Lint and maintain many projects at once
58 lines (49 loc) • 1.55 kB
JavaScript
const latestVersion = require('latest-version');
const semver = require('semver');
const isDepKey = require('../is-dep-key');
const depCache = new Map();
const processDepMap = async (depMap) => {
const result = {};
for (const [name, wanted] of Object.entries(depMap)) {
const isCached = depCache.has(name);
// eslint-disable-next-line no-await-in-loop
const latest = isCached ? depCache.get(name) : await latestVersion(name);
if (!isCached) {
depCache.set(name, latest);
}
if (!semver.satisfies(latest, wanted)) {
result[name] = {
wanted,
latest
};
}
}
return result;
};
const processPkg = async (pkg) => {
const result = {};
for (const depType of Object.keys(pkg).filter(isDepKey)) {
// eslint-disable-next-line no-await-in-loop
const processed = await processDepMap(pkg[depType]);
if (Object.keys(processed).length > 0) {
result[depType] = processed;
}
}
return result;
};
const latestDeps = async (project) => {
if (!project.pkg) {
return;
}
const depContainer = await processPkg(project.pkg);
const hasOutdated = Object.values(depContainer).some((depMap) => {
return Object.keys(depMap).length > 0;
});
return hasOutdated && {
message : 'Package has outdated dependencies',
path : 'package.json',
data : depContainer
};
};
module.exports = latestDeps;
;