Skip to content

Instantly share code, notes, and snippets.

@auchenberg
Created July 28, 2014 12:16
Show Gist options
  • Save auchenberg/4069101643d4c44f2fc3 to your computer and use it in GitHub Desktop.
Save auchenberg/4069101643d4c44f2fc3 to your computer and use it in GitHub Desktop.
A quick script to generate a JSON blob of dependencies with license info from Bower/NPM.
var fs = require('fs');
var npm = require('npm');
var bower = require('bower');
var Q = require('q');
var npmConfig = JSON.parse(fs.readFileSync('package.json'));
var bowerConfig = JSON.parse(fs.readFileSync('bower.json'));
function gatherNpmInfo(dependencies) {
dependencies = dependencies || {};
var dfd = new Q.defer();
npm.load(function(er) {
var promises = Object.keys(npmConfig.dependencies).map(function(packageName) {
var pDfd = new Q.defer();
var packageInfo = {
name: packageName
};
npm.commands.view([packageName, 'description', 'license', 'repository'], true, function(err, data) {
if(err) {
return pDfd.resolve();
}
var versionKey = Object.keys(data)[0]
var metaData = data[versionKey];
packageInfo.description = metaData.description || '';
if(metaData.license) {
packageInfo.license = typeof metaData.license === 'string' ? metaData.license : metaData.license.type
}
if(metaData.repository) {
packageInfo.repository = metaData.repository.url;
}
dependencies[packageName] = packageInfo
pDfd.resolve();
});
return pDfd.promise;
});
Q.all(promises).then(function() {
var array = Object.keys(dependencies).map(function(key) {
return dependencies[key];
})
dfd.resolve(array);
})
});
return dfd.promise;
}
function gatherBowerInfo(dependencies) {
dependencies = dependencies || {};
var dfd = new Q.defer();
var promises = Object.keys(bowerConfig.dependencies).map(function(packageName) {
var pDfd = new Q.defer();
var packageInfo = {
name: packageName
};
var command = bower.commands.search(packageName, {});
command.on('end', function (data) {
data = data[0];
if(data.url) {
packageInfo.repository = data.url;
}
dependencies[packageName] = packageInfo
pDfd.resolve();
});
command.on('error', function (error) {
return pDfd.resolve();
});
return pDfd.promise;
});
Q.all(promises).then(function() {
var array = Object.keys(dependencies).map(function(key) {
return dependencies[key];
})
dfd.resolve(array);
})
return dfd.promise;
}
gatherNpmInfo().then(function(npsDeps) {
gatherBowerInfo(npsDeps).then(function(deps) {
console.log(JSON.stringify(deps, null, 4));
})
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment