Files snapshot from file-caching

./src/flatFiles.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
7e40e5 Tucker McKnight
b8a3bb Tucker McKnight
cdb797 Tucker McKnight
cdb797 Tucker McKnight
cdb797 Tucker McKnight
2a54fe Tucker McKnight
cdb797 Tucker McKnight
2a54fe Tucker McKnight
cdb797 Tucker McKnight
b8a3bb Tucker McKnight
cdb797 Tucker McKnight
b8a3bb Tucker McKnight
b8a3bb Tucker McKnight
829283 Tucker McKnight
829283 Tucker McKnight
829283 Tucker McKnight
829283 Tucker McKnight
829283 Tucker McKnight
829283 Tucker McKnight
829283 Tucker McKnight
829283 Tucker McKnight
b8a3bb Tucker McKnight
829283 Tucker McKnight
829283 Tucker McKnight
829283 Tucker McKnight
829283 Tucker McKnight
b8a3bb Tucker McKnight
b8a3bb Tucker McKnight
2a54fe Tucker McKnight
829283 Tucker McKnight
2a54fe Tucker McKnight
2a54fe Tucker McKnight
2a54fe Tucker McKnight
2a54fe Tucker McKnight
b8a3bb Tucker McKnight
b8a3bb Tucker McKnight
import { type Repository } from "./dataTypes.ts"

let cachedFlatFiles: Array<FlatFileEntry> | null = null
export type FlatFileEntry = {
  file: string,
  refName: string,
  repoName: string,
  type: 'branch' | 'tag',
}

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

  const itemsFromRefFileList: (ref: Repository['tags'][0], repoName: string, refType: 'branch' | 'tag') => Array<FlatFileEntry> = (ref, repoName, refType) => {
    return Array.from(ref.fileList.keys()).map((file) => {
      return {
        file,
        refName: ref.name,
        repoName: repoName,
        type: refType,
      }
    })
  }

  const branches: FlatFileEntry[] = repos.flatMap((repo) => {
    return repo.branches.flatMap(branch => itemsFromRefFileList(branch, repo.name, 'branch'))
  })

  const tags: FlatFileEntry[] = repos.flatMap((repo) => {
    return repo.tags.flatMap(tag => itemsFromRefFileList(tag, repo.name, 'tag'))
  })

  cachedFlatFiles = [...branches, ...tags]

  return cachedFlatFiles
}