11import { graphql } from "@octokit/graphql" ;
2- import commaNumber from "comma-number" ;
32import { GitForkIcon , StarIcon } from "lucide-react" ;
43import PageTitle from "../../components/PageTitle" ;
54import Link from "../../components/Link" ;
65import RelativeTime from "../../components/RelativeTime" ;
76import { addMetadata } from "../../lib/helpers/metadata" ;
87import * as config from "../../lib/config" ;
9- import type { User , Repository } from "@octokit/graphql-schema" ;
8+ import type { User } from "@octokit/graphql-schema" ;
109
1110import styles from "./page.module.css" ;
1211
@@ -18,25 +17,12 @@ export const metadata = addMetadata({
1817 } ,
1918} ) ;
2019
21- type Project = {
22- name : string ;
23- url : string ;
24- description ?: string ;
25- language ?: {
26- name : string ;
27- color ?: string ;
28- } ;
29- stars ?: number ;
30- forks ?: number ;
31- updatedAt : string ;
32- } ;
33-
34- const getRepos = async ( ) : Promise < Project [ ] | null > => {
20+ const getRepos = async ( ) => {
3521 // don't fail the entire site build if the required API key for this page is missing
3622 if ( ! process . env . GITHUB_TOKEN ) {
3723 console . warn ( `ERROR: I can't fetch any GitHub projects without "GITHUB_TOKEN" set! Skipping for now...` ) ;
3824
39- return null ;
25+ return undefined ;
4026 }
4127
4228 // https://docs.github.com/en/graphql/reference/objects#repository
@@ -95,19 +81,7 @@ const getRepos = async (): Promise<Project[] | null> => {
9581 }
9682 ) ;
9783
98- const results = user . repositories . edges as Array < { node : Repository } > ;
99-
100- const repos = results . map < Project > ( ( { node : repo } ) => ( {
101- name : repo . name ,
102- url : repo . url ,
103- description : repo . description as string ,
104- updatedAt : repo . pushedAt ,
105- stars : repo . stargazerCount ,
106- forks : repo . forkCount ,
107- language : repo . primaryLanguage as Project [ "language" ] ,
108- } ) ) ;
109-
110- return repos ;
84+ return user . repositories . edges ?. map ( ( edge ) => edge ! . node ) ;
11185} ;
11286
11387const Page = async ( ) => {
@@ -119,50 +93,50 @@ const Page = async () => {
11993
12094 < div className = { styles . grid } >
12195 { repos ?. map ( ( repo ) => (
122- < div key = { repo . name } className = { styles . card } >
123- < Link href = { repo . url } className = { styles . name } >
124- { repo . name }
96+ < div key = { repo ! . name } className = { styles . card } >
97+ < Link href = { repo ! . url } className = { styles . name } >
98+ { repo ! . name }
12599 </ Link >
126100
127- { repo . description && < p className = { styles . description } > { repo . description } </ p > }
101+ { repo ! . description && < p className = { styles . description } > { repo ! . description } </ p > }
128102
129103 < div className = { styles . meta } >
130- { repo . language && (
104+ { repo ! . primaryLanguage && (
131105 < div className = { styles . metaItem } >
132- { repo . language . color && (
106+ { repo ! . primaryLanguage . color && (
133107 < span
134108 className = { styles . metaIcon }
135- style = { { backgroundColor : repo . language . color , borderRadius : "50%" } }
109+ style = { { backgroundColor : repo ! . primaryLanguage . color , borderRadius : "50%" } }
136110 />
137111 ) }
138- < span > { repo . language . name } </ span >
112+ < span > { repo ! . primaryLanguage . name } </ span >
139113 </ div >
140114 ) }
141115
142- { repo . stars && repo . stars > 0 && (
116+ { repo ! . stargazerCount > 0 && (
143117 < div className = { styles . metaItem } >
144118 < Link
145- href = { `${ repo . url } /stargazers` }
146- title = { `${ commaNumber ( repo . stars ) } ${ repo . stars === 1 ? "star" : "stars" } ` }
119+ href = { `${ repo ! . url } /stargazers` }
120+ title = { `${ Intl . NumberFormat ( config . siteLocale || "en-US" ) . format ( repo ! . stargazerCount ) } ${ repo ! . stargazerCount === 1 ? "star" : "stars" } ` }
147121 plain
148122 className = { styles . metaLink }
149123 >
150124 < StarIcon size = "1.25em" className = { styles . metaIcon } />
151- < span > { commaNumber ( repo . stars ) } </ span >
125+ < span > { Intl . NumberFormat ( config . siteLocale || "en-US" ) . format ( repo ! . stargazerCount ) } </ span >
152126 </ Link >
153127 </ div >
154128 ) }
155129
156- { repo . forks && repo . forks > 0 && (
130+ { repo ! . forkCount > 0 && (
157131 < div className = { styles . metaItem } >
158132 < Link
159- href = { `${ repo . url } /network/members` }
160- title = { `${ commaNumber ( repo . forks ) } ${ repo . forks === 1 ? "fork" : "forks" } ` }
133+ href = { `${ repo ! . url } /network/members` }
134+ title = { `${ Intl . NumberFormat ( config . siteLocale || "en-US" ) . format ( repo ! . forkCount ) } ${ repo ! . forkCount === 1 ? "fork" : "forks" } ` }
161135 plain
162136 className = { styles . metaLink }
163137 >
164138 < GitForkIcon size = "1.25em" className = { styles . metaIcon } />
165- < span > { commaNumber ( repo . forks ) } </ span >
139+ < span > { Intl . NumberFormat ( config . siteLocale || "en-US" ) . format ( repo ! . forkCount ) } </ span >
166140 </ Link >
167141 </ div >
168142 ) }
@@ -177,7 +151,7 @@ const Page = async () => {
177151 } }
178152 />
179153 < span >
180- Updated < RelativeTime date = { repo . updatedAt } />
154+ Updated < RelativeTime date = { repo ! . pushedAt } />
181155 </ span >
182156 </ div >
183157 </ div >
0 commit comments