UNPKG

made-in

Version:

Get GitHub projects created by users from a specific location.

74 lines (67 loc) 2 kB
"use strict"; var GitHub = require("gh.js"), ul = require("ul"), bindy = require("bindy"), sameTime = require("same-time"); /** * madeIn * Get GitHub projects created by users from a specific location. * * @name madeIn * @function * @param {String} loc The user location. * @param {Object} options An object containing the following fields: * * - language (String): The repository language. * - token (String): The GitHub token. * * @param {Function} cb The callback function. */ module.exports = function madeIn(loc, options, cb) { options = ul.merge(options, { language: "", token: undefined }); if (options.language) { options.language = "language:\"" + options.language + "\""; } var gh = new GitHub(options.token); gh.get("search/users", { opts: { q: "location:" + loc + " " + options.language, sort: "followers" // 30 requests per minute // - 1 for users // - 29 requests (one for each user) , per_page: 29 } }, function (err, data) { if (err) { return cb(err); } var users = data.items; var repos = []; sameTime(bindy(users, function (cUser, done) { gh.get("search/repositories", { opts: { q: "user:" + cUser.login + " fork:false stars:>1 " + options.language, sort: "stars" } }, function (err, data) { if (err) { data = { items: [] }; } repos = repos.concat(data.items); done(); }); }), function (err, data) { if (err) { return cb(err); } repos.sort(function (a, b) { return a.stargazers_count < b.stargazers_count ? 1 : -1; }); cb(null, repos); }); }); };