Commit ce165d4

Anton Medvedev <anton@medv.io>
2023-10-12 00:07:52
Move filter logic
1 parent ca2cd33
src/all-badges/index.ts
@@ -15,5 +15,3 @@ export const allBadges = [
   await import('./delorean/delorean.js'),
   await import('./covid-19/covid-19.js'),
 ] as const
-
-export const names = allBadges.flatMap(({ default: { badges } }) => badges)
src/badges.ts
@@ -34,21 +34,12 @@ export type Badge = {
 export function badgeCollection(
   userBadges: Badge[],
   presenter: (typeof allBadges)[number]['default'],
-  pickBadges: string[],
-  omitBadges: string[],
   compact: boolean,
 ) {
   const indexes = new Map(userBadges.map((x, i) => [x.id, i]))
   const baseDir = path.basename(path.dirname(fileURLToPath(presenter.url)))
 
   return function grant(id: ID, desc: string) {
-    // if (!pickBadges.includes(id) || omitBadges.includes(id)) {
-    //   if (indexes.has(id)) {
-    //     badges.splice(indexes.get(id)!, 1)
-    //   }
-    //   return voidGrant
-    // }
-
     const badge: Badge = {
       id,
       tier: 0,
src/main.ts
@@ -6,7 +6,7 @@ import { Octokit, RequestError } from 'octokit'
 import { retry } from '@octokit/plugin-retry'
 import { throttling } from '@octokit/plugin-throttling'
 import { collect, Data } from './collect/collect.js'
-import { allBadges, names } from './all-badges/index.js'
+import { allBadges } from './all-badges/index.js'
 import { Badge, badgeCollection } from './badges.js'
 import { updateReadme } from './update-readme.js'
 import { updateBadges } from './update-badges.js'
@@ -29,7 +29,7 @@ void (async function main() {
     compact,
   } = argv
   const [owner, repo] = repository?.split('/', 2) || [username, username]
-  const pickBadges = pick ? pick.split(',') : names
+  const pickBadges = pick ? pick.split(',') : []
   const omitBadges = omit ? omit.split(',') : []
 
   const MyOctokit = Octokit.plugin(retry, throttling)
@@ -104,14 +104,19 @@ void (async function main() {
     const grant = badgeCollection(
       userBadges,
       presenter,
-      pickBadges,
-      omitBadges,
       compact,
     )
     presenter.present(data, grant)
   }
   console.log('Badges', userBadges)
 
+  if (pickBadges.length > 0) {
+    userBadges = userBadges.filter((x) => pickBadges.includes(x.id))
+  }
+  if (omitBadges.length > 0) {
+    userBadges = userBadges.filter((x) => !omitBadges.includes(x.id))
+  }
+
   if (owner && repo) {
     await updateBadges(
       octokit,
test/badges.test.ts
@@ -1,74 +0,0 @@
-import * as assert from 'node:assert'
-import { describe, it } from 'node:test'
-import { allBadges, names } from '../src/all-badges/index.js'
-import { Badge, badgeCollection } from '../src/badges.js'
-import abcPresenter from '../src/all-badges/abc-commit/abc-commit.js'
-
-describe('badges', () => {
-  it('exposes all badges presenters', () => {
-    const expected = [
-      'a-commit',
-      'ab-commit',
-      'abc-commit',
-      'abcd-commit',
-      'abcde-commit',
-      'abcdef-commit',
-      'stars-100',
-      'stars-500',
-      'stars-1000',
-      'stars-2000',
-      'stars-5000',
-      'stars-10000',
-      'stars-20000',
-      'midnight-commits',
-      'morning-commits',
-      'evening-commits',
-      'yeti',
-      'star-gazer',
-      'dead-commit',
-      'bad-words',
-      'mass-delete-commit',
-      'mass-delete-commit-10k',
-      'revert-revert-commit',
-      'my-badges-contributor',
-      'fix-2',
-      'fix-3',
-      'fix-4',
-      'fix-5',
-      'fix-6',
-      'fix-6+',
-      'chore-commit',
-      'delorean',
-      'covid-19',
-    ]
-
-    assert.deepEqual(names.sort(), expected.sort())
-  })
-
-  it('grant respects pick and omit params', () => {
-    const badges: Badge[] = []
-    const presenter = abcPresenter
-    const pickBadges = ['a-commit', 'ab-commit', 'abc-commit', 'abcd-commit']
-    const omitBadges = ['ab-commit', 'abc-commit']
-    const grant = badgeCollection(badges, presenter.url, pickBadges, omitBadges)
-
-    abcPresenter.badges.forEach((badge) => grant(badge, 'test'))
-
-    assert.deepEqual(badges, [
-      {
-        id: 'abcd-commit',
-        desc: 'test',
-        body: '',
-        image:
-          'https://github.com/my-badges/my-badges/blob/master/src/all-badges/abc-commit/abcd-commit.png?raw=true',
-      },
-      {
-        id: 'a-commit',
-        desc: 'test',
-        body: '',
-        image:
-          'https://github.com/my-badges/my-badges/blob/master/src/all-badges/abc-commit/a-commit.png?raw=true',
-      },
-    ])
-  })
-})
test/stars.test.ts
@@ -9,9 +9,8 @@ describe('stars', () => {
     const badges: Badge[] = []
     const grant = badgeCollection(
       badges,
-      starsPresenter.url,
-      [...starsPresenter.badges],
-      [],
+      starsPresenter,
+      true,
     )
     const data: Data = {
       user: {} as Data['user'],
test/update-readme.test.ts
@@ -4,7 +4,6 @@ import { generateReadme } from '../src/update-readme.js'
 import type { Badge } from '../src/badges.js'
 import abcPresenter from '../src/all-badges/abc-commit/abc-commit.js'
 import { badgeCollection } from '../src/badges.js'
-import { names } from '../src/all-badges/index.js'
 
 describe('generateReadme()', () => {
   it('injects badges to md contents', () => {
@@ -14,12 +13,12 @@ describe('generateReadme()', () => {
 `
     const badges: Badge[] = []
     const presenter = abcPresenter
-    const grant = badgeCollection(badges, presenter.url, names, [])
+    const grant = badgeCollection(badges, presenter, false)
 
     abcPresenter.badges.forEach((badge) => grant(badge, 'test'))
     assert.equal(badges.length, 6)
 
-    const contents1 = generateReadme(readme, badges, 64, true)
+    const contents1 = generateReadme(readme, badges, 64)
     assert.equal(
       contents1,
       `
@@ -31,20 +30,33 @@ describe('generateReadme()', () => {
 
 `,
     )
+  })
+
+  it('compact', () => {
+    const readme = `
+<!-- my-badges start -->
+<!-- my-badges end -->
+`
+    const badges: Badge[] = []
+    const presenter = abcPresenter
+    const grant = badgeCollection(badges, presenter, true)
+
+    abcPresenter.badges.forEach((badge) => grant(badge, 'test'))
+    assert.equal(badges.length, 6)
 
-    const contents2 = generateReadme(readme, badges, 64, false)
+    const contents2 = generateReadme(readme, badges, 64)
     assert.equal(
       contents2,
       `
 <!-- my-badges start -->
 <h4><a href="https://github.com/my-badges/my-badges">My Badges</a></h4>
 
-<a href="my-badges/abcdef-commit.md"><img src="https://github.com/my-badges/my-badges/blob/master/src/all-badges/abc-commit/abcdef-commit.png?raw=true" alt="test" title="test" width="64"></a>
-<a href="my-badges/abcde-commit.md"><img src="https://github.com/my-badges/my-badges/blob/master/src/all-badges/abc-commit/abcde-commit.png?raw=true" alt="test" title="test" width="64"></a>
-<a href="my-badges/abcd-commit.md"><img src="https://github.com/my-badges/my-badges/blob/master/src/all-badges/abc-commit/abcd-commit.png?raw=true" alt="test" title="test" width="64"></a>
-<a href="my-badges/abc-commit.md"><img src="https://github.com/my-badges/my-badges/blob/master/src/all-badges/abc-commit/abc-commit.png?raw=true" alt="test" title="test" width="64"></a>
-<a href="my-badges/ab-commit.md"><img src="https://github.com/my-badges/my-badges/blob/master/src/all-badges/abc-commit/ab-commit.png?raw=true" alt="test" title="test" width="64"></a>
 <a href="my-badges/a-commit.md"><img src="https://github.com/my-badges/my-badges/blob/master/src/all-badges/abc-commit/a-commit.png?raw=true" alt="test" title="test" width="64"></a>
+<a href="my-badges/ab-commit.md"><img src="https://github.com/my-badges/my-badges/blob/master/src/all-badges/abc-commit/ab-commit.png?raw=true" alt="test" title="test" width="64"></a>
+<a href="my-badges/abc-commit.md"><img src="https://github.com/my-badges/my-badges/blob/master/src/all-badges/abc-commit/abc-commit.png?raw=true" alt="test" title="test" width="64"></a>
+<a href="my-badges/abcd-commit.md"><img src="https://github.com/my-badges/my-badges/blob/master/src/all-badges/abc-commit/abcd-commit.png?raw=true" alt="test" title="test" width="64"></a>
+<a href="my-badges/abcde-commit.md"><img src="https://github.com/my-badges/my-badges/blob/master/src/all-badges/abc-commit/abcde-commit.png?raw=true" alt="test" title="test" width="64"></a>
+<a href="my-badges/abcdef-commit.md"><img src="https://github.com/my-badges/my-badges/blob/master/src/all-badges/abc-commit/abcdef-commit.png?raw=true" alt="test" title="test" width="64"></a>
 <!-- my-badges end -->
 
 `,