master
1import { define, Issue, plural } from '#src'
2
3export default define({
4 url: import.meta.url,
5 tiers: true,
6 badges: [
7 'old-issue-1',
8 'old-issue-2',
9 'old-issue-3',
10 'old-issue-4',
11 'old-issue-5',
12 'old-issue-6',
13 'old-issue-7',
14 'old-issue-8',
15 'old-issue-9',
16 'old-issue-10',
17 ] as const,
18 present(data, grant) {
19 const buckets: { [years: number]: Issue[] } = {}
20
21 for (const issue of data.issues.sort(age)) {
22 if (!issue.closed) continue
23 if (issue.closedBy != data.user.login) continue
24 const createdAt = new Date(issue.createdAt)
25 const closedAt = new Date(issue.closedAt!)
26 let years = Math.floor(
27 (closedAt.getTime() - createdAt.getTime()) / 1000 / 60 / 60 / 24 / 365,
28 )
29 if (years > 10) years = 10
30 buckets[years] = buckets[years] || []
31 buckets[years].push(issue)
32 }
33
34 for (let years = 1; years <= 10; years++) {
35 if (!buckets[years]) continue
36 grant(
37 `old-issue-${years}` as (typeof this.badges)[number],
38 `I closed an issue that was open for ${plural(
39 years,
40 'a year',
41 '%d years',
42 )}`,
43 )
44 .evidenceIssuesWithTitles(...buckets[years])
45 .tier(years)
46 }
47 },
48})
49
50function age(a: Issue, b: Issue) {
51 return new Date(a.closedAt!).getTime() - new Date(b.closedAt!).getTime()
52}