UNPKG

hubspy

Version:

A package to extract github metadata and total contributions for a github user.

59 lines (58 loc) 3.04 kB
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; }); }