← Public packages
@kentcdodds/lineage
Interactive commit-level lines of kody, minus generated noise, as an offline-ready chart.
src/buckets.ts
55 lines · 1.3 KB · TypeScriptimport { classifyPath, type IgnoreIndex } from './classify.ts'
import type { BucketDelta, FileKind } from './types.ts'
export function accumulateBuckets(
files: Array<{
filename: string
additions?: number
deletions?: number
patch?: string
}>,
ignore: IgnoreIndex,
) {
const buckets = new Map<string, BucketDelta>()
let skippedFiles = 0
let countedFiles = 0
const generatedToRemember: Array<{ path: string; reason: string }> = []
for (const file of files) {
const classification = classifyPath(file.filename, {
patch: file.patch,
ignore,
})
if (!classification.countable) {
skippedFiles += 1
if (
classification.reason === 'generated-content-marker' ||
classification.reason.startsWith('generated')
) {
generatedToRemember.push({
path: file.filename,
reason: classification.reason,
})
}
continue
}
countedFiles += 1
const key = `${classification.language}\t${classification.kind}`
const current = buckets.get(key) ?? {
language: classification.language,
kind: classification.kind as FileKind,
additions: 0,
deletions: 0,
}
current.additions += file.additions ?? 0
current.deletions += file.deletions ?? 0
buckets.set(key, current)
}
return {
buckets: [...buckets.values()],
skippedFiles,
countedFiles,
generatedToRemember,
}
}