Skip to content

Instantly share code, notes, and snippets.

@voxpelli
Last active February 25, 2016 20:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save voxpelli/84a2ffec90b21a969be2 to your computer and use it in GitHub Desktop.
Save voxpelli/84a2ffec90b21a969be2 to your computer and use it in GitHub Desktop.
var validateInstalledDependencies = function () {
var readJson = require('read-package-json');
var readInstalled = require('read-installed');
var semver = require('semver');
var packagePromise = new Promise(function (resolve, reject) {
readJson('package.json', function (err, data) {
if (err) { return reject(err); }
resolve(data);
});
});
var installedPromise = new Promise(function (resolve, reject) {
readInstalled('.', { dev: true, depth: 1 }, function (err, data) {
if (err) { return reject(err); }
resolve(data);
});
});
return Promise.all([
packagePromise,
installedPromise
])
.then(result => {
var requiredDependencies = Object.assign({}, result[0].dependencies, result[0].devDependencies);
var installedDependencies = result[1];
var errors = [];
Object.keys(requiredDependencies).forEach(dependency => {
var version = (installedDependencies.dependencies[dependency] || installedDependencies.devDependencies[dependency] || {}).version;
if (!version) {
errors.push(dependency + ': Missing dependency');
} else if (!semver.satisfies(version, requiredDependencies[dependency])) {
errors.push(dependency + ': Invalid version, expected a ' + requiredDependencies[dependency]);
}
});
if (errors) {
throw new Error('Dependency errors: \n\n' + errors.join('\n') + '\n');
}
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment