UNPKG

contributor

Version:

A simple module to add git contributors to your package.json.

140 lines (128 loc) 3.51 kB
/* * contributor.js: a package.json contributor customizer * * (C) 2014 Jake LeBoeuf * MIT LICENCE * */ var path = require('path'), fs = require('fs'), request = require('request'), _ = require('underscore'), color = require("ansi-color").set, rootDir = process.cwd(), sourceJson = path.join(rootDir, 'package.json'), dupJson = path.join(rootDir, '.package.json'), pack = require(sourceJson), contribApi = pack.repository.url.split('/'); // // Contributor Module + Defaults // var contributor = module.exports = { complete: 0 }; // // Main Magic // contributor.start = function (next) { // // Request info from github repo // var options = { url: 'https://api.github.com/repos/'+ contribApi[3]+ '/'+contribApi[4].split('.')[0]+ '/contributors', headers: { 'User-Agent': 'request' } }; function callback(error, response, body) { if(response.statusCode === 403) { console.log(color('✖', 'red+bold'), color('You\'ve exceeded github\'s API limit. Try again in a minute or two.', 'red+bold')); } if (!error && response.statusCode === 200) { var info = JSON.parse(body); var contributors = []; i=0; info.forEach(function(contributor){ var contributions = 0; // // User info request // var userOptions = { url: contributor.url, headers: { 'User-Agent': 'request' } }; function userCallback(error, response, body) { if (!error && response.statusCode === 200) { var userInfo = JSON.parse(body); var user = new Object(); user.name = userInfo.name; user.email = userInfo.email; user.url = userInfo.html_url; user.contributions = contributor.contributions; user.hireable = userInfo.hireable; contributors.push(user); } i++; if(i == info.length){ saveData(sourceJson, contributors); } } // Make user info request request(userOptions, userCallback); }); } } // Make request for info from repo request(options, callback); // // Save new file // function saveData(file, data) { if (!fs.existsSync(dupJson)) { // Save backup to .package.json fs.writeFile(dupJson, JSON.stringify(pack, null, 2), function(err) { if(err) { new Error(err); } else { console.log(color("✔", "green+bold"), "Saved a backup as", color(".package.json", "magenta")); status(); writePackage(); } }); } else { status(); writePackage(); } // Rewrite package.json // Fill the array with list from github pack.contributors = data; function writePackage() { fs.writeFile(file, JSON.stringify(pack, null, 2), function(err) { if(err) { console.log(err); } else { console.log(color("✔", "green+bold"), "Contributors added to your", color("package.json", "magenta"), 'from Github'); status(); } }); } function status() { contributor.complete ++; if(contributor.complete === 2) { console.log(color("✔", "green+bold"), "All done"); } } } }