Files snapshot from show-tags

./src/flatRefs.ts

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
99f634 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
99f634 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
99f634 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
99f634 Tucker McKnight
b30bd9 Tucker McKnight
99f634 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
99f634 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
99f634 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
b30bd9 Tucker McKnight
99f634 Tucker McKnight
b30bd9 Tucker McKnight
import { type Repository } from "./dataTypes.ts"

type BranchEntry = {
  refName: string,
  type: "branch",
  repoName: string,
  compareTo: string,
  ahead: number,
  behind: number,
}

type TagEntry = {
  refName: string,
  type: "tag",
  repoName: string,
}

let cachedRefs: Array<BranchEntry | TagEntry> | null = null

export default (repos: Array<Repository>) => {
  if (cachedRefs !== null) { return cachedRefs }

  cachedRefs = repos.flatMap((repo) => {
    const branches: Array<BranchEntry> = repo.branches.map((branch) => {
      const result: BranchEntry = {
        refName: branch.name,
        type: "branch",
        repoName: repo.name,
        compareTo: branch.compareTo,
        ahead: branch.ahead,
        behind: branch.behind,
      }
      if (branch.description) { result['description'] = branch.description }
      return result
    })
    const tags: Array<TagEntry> = repo.tags.map((tag) => {
      return {
        refName: tag.name,
        type: "tag",
        repoName: repo.name,
      }
    })

    return [...branches, ...tags]
  })

  return cachedRefs
}