# types/source.types.ts

> 66 lines of code and 12 definitions.

Tree: GovLab Stats
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/stats#file-stats-types-source-types-ts
Source text: https://banes-lab.com/source/stats/types/source.types.ts.txt

Listed in [types](https://banes-lab.com/api/source/stats/types.md), after [types/site.types.ts](https://banes-lab.com/source/stats/types/site.types.ts.md) and before [types/taxonomy.types.ts](https://banes-lab.com/source/stats/types/taxonomy.types.ts.md).

## Definitions

- `FileRole` (type_alias_declaration, line 3, exported)
- `ExcludedKind` (type_alias_declaration, line 5, exported)
- `LineCount` (interface_declaration, line 7, exported)
- `Bucket` (interface_declaration, line 13, exported)
- `LargestEntry` (interface_declaration, line 21, exported)
- `State` (interface_declaration, line 26, exported)
- `LineScan` (interface_declaration, line 44, exported)
- `FileClass` (type_alias_declaration, line 51, exported)
- `Observation` (interface_declaration, line 53, exported)
- `ExcludedObservation` (interface_declaration, line 65, exported)
- `Walk` (interface_declaration, line 69, exported)
- `ScanScope` (interface_declaration, line 74, exported)

## Contained in

- [types](https://banes-lab.com/anatomy/stats/folder-stats-types.md)

## Source

```typescript
import type { PathExclusion } from "@govlab/quality/config";

export type FileRole = "data" | "other" | "prose" | "source";

export type ExcludedKind = "binary" | "generated" | "ingested";

export interface LineCount {
    blank: number;
    code: number;
    total: number;
}

export interface Bucket {
    blank: number;
    bytes: number;
    code: number;
    files: number;
    total: number;
}

export interface LargestEntry {
    lines: number;
    path: string;
}

export interface State {
    authored: Map<FileRole, Bucket>;
    byArea: Map<string, Bucket>;
    byExt: Map<string, Bucket>;
    bytes: number;
    dirs: number;
    excluded: Map<ExcludedKind, Bucket>;
    fileLineCounts: number[];
    files: number;
    largest: LargestEntry[];
    lines: LineCount;
    manifestFiles: number;
    maxDepth: number;
    testFiles: number;
    textFiles: number;
    unclassified: Map<string, Bucket>;
}

export interface LineScan {
    readonly total: number;
    readonly blank: number;
    readonly runLength: number;
    readonly sawNonSpace: boolean;
}

export type FileClass = ExcludedKind | "authored" | "binary";

export interface Observation {
    readonly area: string;
    readonly class: FileClass;
    readonly ext: string;
    readonly lines: LineCount;
    readonly manifest: boolean;
    readonly rel: string;
    readonly role: FileRole;
    readonly size: number;
    readonly test: boolean;
}

export interface ExcludedObservation extends Observation {
    readonly class: ExcludedKind;
}

export interface Walk {
    readonly dirs: number;
    readonly files: readonly Observation[];
}

export interface ScanScope {
    readonly ignore: PathExclusion;
    readonly members: readonly string[];
    readonly root: string;
}
```
