Commit b9029d0

Anton Medvedev <anton@medv.io>
2023-10-12 00:27:40
wip
1 parent 86b7d95
Changed files (18)
src
all-badges
abc-commit
bad-words
chore-commit
covid-19
dead-commit
delorean
fix-commit
github-anniversary
mass-delete-commit
my-badges-contributor
revert-revert-commit
star-gazer
stars
time-of-commit
yeti
collect
src/all-badges/abc-commit/abc-commit.ts
@@ -1,7 +1,7 @@
 import { Commit, Repo } from '../../collect/collect.js'
 import { BadgePresenter, ID, Present } from '../../badges.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   tiers = true
   badges = [
src/all-badges/bad-words/bad-words.ts
@@ -2,7 +2,7 @@ import { Commit, Repo } from '../../collect/collect.js'
 import { Present, BadgePresenter } from '../../badges.js'
 import { linkCommit } from '../../utils.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   badges = ['bad-words'] as const
   present: Present = (data, grant) => {
src/all-badges/chore-commit/chore-commit.ts
@@ -1,6 +1,6 @@
 import { BadgePresenter, Present } from '../../badges.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   badges = ['chore-commit'] as const
   tiers = false
src/all-badges/covid-19/covid-19.ts
@@ -1,6 +1,6 @@
 import { BadgePresenter, Present } from '../../badges.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   badges = ['covid-19'] as const
   present: Present = (data, grant) => {
src/all-badges/dead-commit/dead-commit.ts
@@ -1,7 +1,7 @@
 import { Commit, Repo } from '../../collect/collect.js'
 import { BadgePresenter, Present } from '../../badges.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   badges = ['dead-commit'] as const
   present: Present = (data, grant) => {
src/all-badges/delorean/delorean.ts
@@ -1,6 +1,6 @@
 import { BadgePresenter, Present } from '../../badges.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   badges = ['delorean'] as const
   present: Present = (data, grant) => {
src/all-badges/fix-commit/fix-commit.ts
@@ -1,7 +1,7 @@
 import { BadgePresenter, Grant, Present } from '../../badges.js'
 import { Commit } from '../../collect/collect.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   tiers = true
   badges = [
src/all-badges/github-anniversary/github-anniversary.ts
@@ -1,6 +1,6 @@
 import { BadgePresenter, Present } from '../../badges.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   badges = [
     'github-anniversary-5',
src/all-badges/mass-delete-commit/mass-delete-commit.ts
@@ -1,6 +1,6 @@
 import { BadgePresenter, Present } from '../../badges.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   tiers = true
   badges = ['mass-delete-commit-10k', 'mass-delete-commit'] as const
src/all-badges/my-badges-contributor/my-badges-contributor.ts
@@ -1,7 +1,7 @@
 import { Pull } from '../../collect/collect.js'
 import { BadgePresenter, Present } from '../../badges.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   badges = ['my-badges-contributor'] as const
   present: Present = (data, grant) => {
src/all-badges/revert-revert-commit/revert-revert-commit.ts
@@ -1,7 +1,7 @@
 import { Commit } from '../../collect/collect.js'
 import { BadgePresenter, Present } from '../../badges.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   badges = ['revert-revert-commit'] as const
   present: Present = (data, grant) => {
src/all-badges/star-gazer/star-gazer.ts
@@ -1,6 +1,6 @@
 import { BadgePresenter, Present } from '../../badges.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   badges = ['star-gazer'] as const
   present: Present = (data, grant) => {
src/all-badges/stars/stars.ts
@@ -1,6 +1,6 @@
 import { BadgePresenter, Present } from '../../badges.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   tiers = true
   badges = [
src/all-badges/time-of-commit/time-of-commit.ts
@@ -1,7 +1,7 @@
 import { BadgePresenter, Present } from '../../badges.js'
 import { Commit, User } from '../../collect/collect.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   badges = ['midnight-commits', 'morning-commits', 'evening-commits'] as const
   present: Present = (data, grant) => {
src/all-badges/yeti/yeti.ts
@@ -1,6 +1,6 @@
 import { BadgePresenter, Present } from '../../badges.js'
 
-export default new (class extends BadgePresenter {
+export default new (class implements BadgePresenter {
   url = new URL(import.meta.url)
   badges = ['yeti'] as const
   present: Present = (data, grant) => {
src/collect/collect.ts
@@ -3,7 +3,7 @@ import { Endpoints } from '@octokit/types'
 import { PullsQuery } from './pulls.js'
 import { CommitsQuery } from './commits.js'
 import fs from 'node:fs'
-import { fileURLToPath } from 'url'
+import { fileURLToPath } from 'node:url'
 import { IssuesQuery } from './issues.js'
 import { UserQuery } from './user.js'
 
src/badges.ts
@@ -1,5 +1,5 @@
 import { allBadges } from './all-badges/index.js'
-import { Data, Commit, Pull } from './collect/collect.js'
+import { Commit, Data, Pull } from './collect/collect.js'
 import { expectType, linkCommit, linkPull } from './utils.js'
 import { fileURLToPath } from 'url'
 import * as path from 'path'
@@ -12,11 +12,11 @@ for (const {
 
 export type ID = (typeof allBadges)[number]['default']['badges'][number]
 
-export abstract class BadgePresenter {
-  abstract url: URL
-  tiers = false
-  abstract badges: unknown
-  abstract present: Present
+export interface BadgePresenter {
+  url: URL
+  tiers?: boolean
+  badges: unknown
+  present: Present
 }
 
 export type Grant = ReturnType<typeof badgeCollection>
@@ -33,7 +33,7 @@ export type Badge = {
 
 export function badgeCollection(
   userBadges: Badge[],
-  presenter: (typeof allBadges)[number]['default'],
+  presenter: BadgePresenter,
   compact: boolean,
 ) {
   const indexes = new Map(userBadges.map((x, i) => [x.id, i]))
@@ -48,15 +48,17 @@ export function badgeCollection(
       image: `https://github.com/my-badges/my-badges/blob/master/src/all-badges/${baseDir}/${id}.png?raw=true`,
     }
 
-    if (compact) {
+    if (compact && presenter.tiers) {
       let found = false
-      for (const badgeId of presenter.badges) {
+      for (const badgeId of presenter.badges as ID[]) {
         if (indexes.has(badgeId)) {
+          found = true
           const index = indexes.get(badgeId)!
           const alreadyExistingBadge = userBadges[index]
-          if (alreadyExistingBadge.tier < badge.tier) {
+          if (alreadyExistingBadge.tier <= badge.tier) {
             userBadges[index] = badge
           }
+          break
         }
       }
       if (!found) {
src/main.ts
@@ -108,7 +108,6 @@ void (async function main() {
     )
     presenter.present(data, grant)
   }
-  console.log('Badges', userBadges)
 
   if (pickBadges.length > 0) {
     userBadges = userBadges.filter((x) => pickBadges.includes(x.id))
@@ -117,6 +116,8 @@ void (async function main() {
     userBadges = userBadges.filter((x) => !omitBadges.includes(x.id))
   }
 
+  console.log(JSON.stringify(userBadges, null, 2))
+
   if (owner && repo) {
     await updateBadges(
       octokit,