master
1import { task } from '../../task.js'
2import { paginate } from '../../utils.js'
3import { IssuesQuery } from './issues.graphql.js'
4
5export default task({
6 name: 'issues' as const,
7 run: async ({ octokit, data, batch }, { username }: { username: string }) => {
8 const issues = paginate(octokit, IssuesQuery, {
9 username,
10 })
11
12 data.issues = []
13
14 const batchReactions = batch('reactions-issue', 'reactions-batch')
15 const batchIssueTimeline = batch('issue-timeline', 'issue-timeline-batch')
16
17 for await (const resp of issues) {
18 if (!resp.user?.issues.nodes) {
19 throw new Error('Failed to load issues')
20 }
21
22 octokit.log.info(
23 `| issues ${data.issues.length + resp.user.issues.nodes.length}/${
24 resp.user.issues.totalCount
25 } (cost: ${resp.rateLimit?.cost}, remaining: ${
26 resp.rateLimit?.remaining
27 })`,
28 )
29 for (const issue of resp.user.issues.nodes) {
30 if (issue.repository.isPrivate) continue
31 data.issues.push(issue)
32 batchReactions(issue.reactionsTotal.totalCount, issue.id)
33 batchIssueTimeline(issue.timelineItemsTotal.totalCount, issue.id)
34 }
35 }
36 },
37})