@@ -79,6 +79,47 @@ exports.createPages = async ({ graphql, actions, reporter }) => {
79
79
} )
80
80
}
81
81
82
+ const fetchGithubData = async ( { owner, repo, reporter } , retry = 0 ) => {
83
+ return githubApiClient
84
+ . request (
85
+ `
86
+ query {
87
+ repository(owner:"${ owner } ", name:"${ repo } ") {
88
+ name
89
+ stargazers {
90
+ totalCount
91
+ }
92
+ createdAt
93
+ pushedAt
94
+ owner {
95
+ login
96
+ }
97
+ nameWithOwner
98
+ }
99
+ }
100
+ `
101
+ )
102
+ . catch ( async err => {
103
+ // we only try to do a fetch once because we want to track the new owner's username.
104
+ if ( retry > 0 ) {
105
+ throw err
106
+ }
107
+
108
+ const githubUrl = `https://github.com/${ owner } /${ repo } `
109
+ const { url } = await fetch ( githubUrl , { method : "HEAD" } )
110
+ const { owner : newOwner , name : newRepo } = parseGHUrl ( url )
111
+
112
+ reporter . warn (
113
+ `Starter showcase entry "${ owner } /${ repo } " was renamed to "${ newOwner } /${ newRepo } ". Retrying....`
114
+ )
115
+
116
+ return fetchGithubData (
117
+ { owner : newOwner , repo : newRepo , reporter } ,
118
+ retry + 1
119
+ )
120
+ } )
121
+ }
122
+
82
123
exports . onCreateNode = ( { node, actions, getNode, reporter } ) => {
83
124
const { createNodeField } = actions
84
125
if ( node . internal . type === `StartersYaml` && node . repo ) {
@@ -125,22 +166,7 @@ exports.onCreateNode = ({ node, actions, getNode, reporter }) => {
125
166
} else {
126
167
return Promise . all ( [
127
168
getpkgjson ( node . repo ) ,
128
- githubApiClient . request ( `
129
- query {
130
- repository(owner:"${ owner } ", name:"${ repoStub } ") {
131
- name
132
- stargazers {
133
- totalCount
134
- }
135
- createdAt
136
- pushedAt
137
- owner {
138
- login
139
- }
140
- nameWithOwner
141
- }
142
- }
143
- ` ) ,
169
+ fetchGithubData ( { owner, repo : repoStub , reporter } ) ,
144
170
] )
145
171
. then ( results => {
146
172
const [ pkgjson , githubData ] = results
0 commit comments