license-md
Version:
Generate markdown npm package license badges
145 lines (119 loc) • 3.45 kB
JavaScript
var checker = require('npm-license'); // AceMetrix/npm-license
var sort = require('sort-component'); // npmjs.org/package/sort-component
var thispack;
try {
thispack = require('../../package.json');
} catch(e) {
thispack = require('./package.json');
}
var results = "\n<!--- :angleman@license-md/begin -->\n";
checker.init({
start: './',
suppress: true
}, function(json) {
var green = '?bg=%23339e00';
var yellow = '?bg=%23ddcb02';
var grey = '';
var colors = {
'Apache' : green,
'Apache*' : green,
'BSD' : green,
'BSD*' : green,
'GPL' : green,
'GPL*' : green,
'MIT' : green,
'MIT*' : green,
'PD' : green,
'PD*' : green,
'Unknown': grey
};
var bylicense = {
'Apache' : {},
'Apache*' : {},
'BSD' : {},
'BSD*' : {},
'GPL' : {},
'GPL*' : {},
'MIT' : {},
'MIT*' : {},
'PD' : {},
'PD*' : {},
'Unknown': {}
}
var asterix = ' (text scan guess)';
var licenseDesc = {
'Apache' : 'Apache',
'Apache*' : 'Apache'+asterix,
'BSD' : 'Berkeley Software Distribution',
'BSD*' : 'Berkeley Software Distribution'+asterix,
'GPL' : 'GNU General Public License',
'GPL*' : 'GNU General Public License'+asterix,
'MIT' : 'Massachusetts Institute of Technology',
'MIT*' : 'Massachusetts Institute of Technology'+asterix,
'PD' : 'Public Domain',
'PD*' : 'Public Domain'+asterix,
'Unknown' : 'Unknown License'
}
var packlist = [];
Object.keys(json).forEach(function(key) {
var item = json[key];
var licenses = item.licenses;
if (typeof licenses == 'string') {
licenses = [licenses];
}
try {
var license = licenses[0];
} catch(err) {
license = 'Unknown';
}
if (license == 'UNKNOWN') {
license = 'Unknown';
}
if (!bylicense[license]) {
bylicense[license] = {};
}
if (typeof item.repository == 'string') {
item.repository = item.repository.replace('git@github.com:', 'https://github.com/');
}
delete item.licenses;
var keyparts = key.split('@');
item.id = keyparts[0];
item.ver = keyparts[1];
item.license = license;
item.repository = item.repository || '#';
var color = (colors[license]) ? colors[license] : '';
item.badge_url = 'http://badgr.co/'+ item.id+'/'+ license +'.png'+color;
item.lic_desc = licenseDesc[license];
section = (thispack.dependencies && thispack.dependencies[item.id]) ? 'Dependencies'
: (thispack.peerDependencies && thispack.peerDependencies[item.id]) ? 'Peer Dependencies'
: (thispack.devDependencies && thispack.devDependencies[item.id]) ? 'Development Dependencies'
: undefined
;
if (section) {
item.section = section;
// }
// if (!(thispack.name && thispack.name == item.id)) {
packlist.push(item);
}
});
//console.log(thispack);
sort(packlist, { section:1, id: 1 });
// console.log(packlist);
var prior_section = '';
for (var i=0; i<packlist.length; i++) {
item = packlist[i];
if (item.section != prior_section) {
if (prior_section && prior_section.length && prior_section.length > 0) {
results = results + "\n\n";
}
results = results + item.section + ":\n\n";
prior_section = item.section;
}
results = results + '[]("+ item.repository + ")\n"
;
}
results = results + "\n<!--- :angleman@license-md/end -->";
console.log(results);
});