Skip to content

Commit fd74b04

Browse files
authored
Merge pull request #1 from tc-imba/master
This fixed anuraghazra#1177
2 parents 38a7ad4 + 0b90293 commit fd74b04

File tree

2 files changed

+33
-7
lines changed

2 files changed

+33
-7
lines changed

src/fetchers/top-languages-fetcher.js

+27-7
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,16 @@ const fetcher = (variables, token) => {
1111
return request(
1212
{
1313
query: `
14-
query userInfo($login: String!) {
14+
query userInfo($login: String!, $first: Int!, $after: String) {
1515
user(login: $login) {
1616
# fetch only owner repos & not forks
17-
repositories(ownerAffiliations: OWNER, isFork: false, first: 100) {
17+
repositories(
18+
ownerAffiliations: OWNER, isFork: false,
19+
first: $first, after: $after
20+
) {
21+
edges {
22+
cursor
23+
}
1824
nodes {
1925
name
2026
languages(first: 10, orderBy: {field: SIZE, direction: DESC}) {
@@ -47,14 +53,28 @@ const fetcher = (variables, token) => {
4753
async function fetchTopLanguages(username, exclude_repo = []) {
4854
if (!username) throw new MissingParamError(["username"]);
4955

50-
const res = await retryer(fetcher, { login: username });
56+
const pageSize = 100;
57+
let pageCursor = null;
58+
59+
let repoNodes = [];
60+
61+
while (true) {
62+
const variables = { login: username, first: pageSize, after: pageCursor };
63+
const res = await retryer(fetcher, variables);
64+
65+
if (res.data.errors) {
66+
logger.error(res.data.errors);
67+
throw Error(res.data.errors[0].message || "Could not fetch user");
68+
}
5169

52-
if (res.data.errors) {
53-
logger.error(res.data.errors);
54-
throw Error(res.data.errors[0].message || "Could not fetch user");
70+
repoNodes = repoNodes.concat(res.data.data.user.repositories.nodes);
71+
if (!res.data.data.user.repositories.edges ||
72+
res.data.data.user.repositories.edges.length < pageSize) {
73+
break;
74+
}
75+
pageCursor = res.data.data.user.repositories.edges[pageSize - 1].cursor;
5576
}
5677

57-
let repoNodes = res.data.data.user.repositories.nodes;
5878
let repoToHide = {};
5979

6080
// populate repoToHide map for quick lookup

tests/fetchTopLanguages.test.js

+6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ const data_langs = {
1313
data: {
1414
user: {
1515
repositories: {
16+
edges: [
17+
{ cursor: "1" },
18+
{ cursor: "2" },
19+
{ cursor: "3" },
20+
{ cursor: "4" },
21+
],
1622
nodes: [
1723
{
1824
name: "test-repo-1",

0 commit comments

Comments
 (0)