hubspy
Version:
A package to extract github metadata and total contributions for a github user.
59 lines (58 loc) • 3.04 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import * as cheerio from 'cheerio';
import fetchGithubUserMetadata from "./getusermetadata.js";
export default function GetRepositoriesData(name) {
return __awaiter(this, void 0, void 0, function* () {
const user_info = yield fetchGithubUserMetadata(name);
if (user_info === undefined) {
throw new Error(`Error in getting user data for ${name}`);
}
const { public_repos } = user_info;
const pages = Math.ceil(public_repos / 30);
let repositoriesPromise = [];
for (let page = 1; page <= pages; page++) {
const url = `https://github.com/${name}?page=${page}&tab=repositories`;
repositoriesPromise.push(fetch(url, {
headers: {
connection: "keep-alive",
"X-Requested-With": "XMLHttpRequest",
},
}));
}
const allData = yield Promise.all(repositoriesPromise);
let repositories = [];
for (let repo_data of allData) {
if (!repo_data.ok) {
throw new Error(`Error in getting repositories data for ${name} ${repo_data.status} ${repo_data.statusText}`);
}
``;
let content = yield repo_data.text();
let $ = cheerio.load(content);
let repos = $("ul[data-filterable-for='your-repos-filter']").find("li").each((i, repo) => {
var _a;
let name = $("a[itemprop='name codeRepository']", repo).text().trim();
let description = $("p[itemprop='description']", repo).text().trim();
let starred = ((_a = $("a.Link--muted", repo)) === null || _a === void 0 ? void 0 : _a.text().trim()) || "0";
let top_language = $("span[itemprop='programmingLanguage']", repo).text().trim();
let updated_at = $("relative-time", repo).attr("datetime") || "";
repositories.push({
name,
description,
starred: isNaN(parseInt(starred)) ? 0 : parseInt(starred.replace(/,/g, '')),
last_updated_at: new Date(updated_at).getFullYear(),
top_language,
link_href: `https://github.com/${name}/${name}`
});
});
}
return repositories;
});
}