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})