export type ChartMode = 'cumulative' | 'delta' | 'net'
export type FileKind = 'source' | 'tests' | 'docs'
export type RepoSettings = {
owner: string
repo: string
branch: string
}
export type IngestedCommit = {
sha: string
committedAt: string
message: string
authorName: string
htmlUrl: string
parentSha: string | null
filesTruncated: boolean
skippedFiles: number
countedFiles: number
}
export type BucketKey = {
language: string
kind: FileKind
}
export type BucketDelta = BucketKey & {
additions: number
deletions: number
}
export type Commentary = {
id: string
sha: string
label: string
narrative: string
createdAt: string
}
export type SeriesPoint = {
sha: string
at: string
message: string
htmlUrl: string
additions: number
deletions: number
net: number
cumulative: number
buckets: Array<{
language: string
kind: FileKind
additions: number
deletions: number
net: number
cumulative: number
}>
}
export type SeriesPayload = {
repo: RepoSettings & { htmlUrl: string }
mode: ChartMode
from: string | null
to: string | null
generatedAt: string
commitCount: number
languages: string[]
kinds: FileKind[]
points: SeriesPoint[]
commentaries: Commentary[]
ingest: {
storedCommits: number
newest: { sha: string; at: string } | null
oldest: { sha: string; at: string } | null
}
}