import { emptyIgnoreIndex, parseGitignore, parseLinguistGenerated, type IgnoreIndex, } from './classify.ts' import { getRepoTextFile } from './github.ts' import { getRepoSettings, getSetting, listKnownGeneratedPaths, setSetting, } from './storage.ts' export async function loadIgnoreIndex(): Promise { const repo = await getRepoSettings() const cacheKey = `ignore:${repo.owner}/${repo.repo}/${repo.branch}` const cached = await getSetting(cacheKey) let gitignore: string[] = [] let linguistGenerated: string[] = [] if (cached) { try { const parsed = JSON.parse(cached) as { gitignore?: string[] linguistGenerated?: string[] } gitignore = parsed.gitignore ?? [] linguistGenerated = parsed.linguistGenerated ?? [] } catch { gitignore = [] linguistGenerated = [] } } else { const [gitignoreText, attributesText] = await Promise.all([ getRepoTextFile(repo, '.gitignore'), getRepoTextFile(repo, '.gitattributes'), ]) gitignore = parseGitignore(gitignoreText ?? '') linguistGenerated = parseLinguistGenerated(attributesText ?? '') await setSetting( cacheKey, JSON.stringify({ gitignore, linguistGenerated, fetchedAt: new Date().toISOString() }), ) } const known = await listKnownGeneratedPaths() return { ...emptyIgnoreIndex(), gitignore: [], linguistGenerated, knownGeneratedPaths: new Set(known.keys()), } } export async function refreshIgnoreIndex(): Promise { const repo = await getRepoSettings() await setSetting(`ignore:${repo.owner}/${repo.repo}/${repo.branch}`, '') return loadIgnoreIndex() }