@@ -11,10 +11,16 @@ const fetcher = (variables, token) => {
11
11
return request (
12
12
{
13
13
query : `
14
- query userInfo($login: String!) {
14
+ query userInfo($login: String!, $first: Int!, $after: String ) {
15
15
user(login: $login) {
16
16
# 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
+ }
18
24
nodes {
19
25
name
20
26
languages(first: 10, orderBy: {field: SIZE, direction: DESC}) {
@@ -47,14 +53,28 @@ const fetcher = (variables, token) => {
47
53
async function fetchTopLanguages ( username , exclude_repo = [ ] ) {
48
54
if ( ! username ) throw new MissingParamError ( [ "username" ] ) ;
49
55
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
+ }
51
69
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 ;
55
76
}
56
77
57
- let repoNodes = res . data . data . user . repositories . nodes ;
58
78
let repoToHide = { } ;
59
79
60
80
// populate repoToHide map for quick lookup
0 commit comments