# types/closure.types.ts

> 60 lines of code and 12 definitions.

Tree: Governance tree
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/governance#file-governance-types-closure-types-ts
Source text: https://banes-lab.com/source/governance/types/closure.types.ts.txt

Listed in [types](https://banes-lab.com/api/source/governance/types.md), after [types/check.types.ts](https://banes-lab.com/source/governance/types/check.types.ts.md) and before [types/codemod.types.ts](https://banes-lab.com/source/governance/types/codemod.types.ts.md).

## Definitions

- `Atom` (interface_declaration, line 1, exported)
- `CallEntry` (interface_declaration, line 6, exported)
- `EventEntry` (interface_declaration, line 12, exported)
- `ExportEntry` (interface_declaration, line 17, exported)
- `ImportEntry` (interface_declaration, line 22, exported)
- `SideEffectEntry` (interface_declaration, line 28, exported)
- `InterfaceEntry` (interface_declaration, line 33, exported)
- `BarrelPattern` (interface_declaration, line 39, exported)
- `ImportEdge` (interface_declaration, line 44, exported)
- `ImportGraph` (type_alias_declaration, line 49, exported)
- `Reachable` (interface_declaration, line 51, exported)
- `ClosureGraph` (interface_declaration, line 56, exported)

## Source

```typescript
export interface Atom {
    kind: string;
    text: string;
}

export interface CallEntry {
    file: string;
    fn: string;
    idArg: Atom | null;
}

export interface EventEntry {
    file: string;
    eventArg: Atom | null;
}

export interface ExportEntry {
    file: string;
    name: string;
}

export interface ImportEntry {
    file: string;
    from: string;
    names: string[];
}

export interface SideEffectEntry {
    file: string;
    from: string;
}

export interface InterfaceEntry {
    file: string;
    name: string;
    fields: { name: string; optional: boolean }[];
}

export interface BarrelPattern {
    dir: string;
    suffix: string;
}

export interface ImportEdge {
    names: string[];
    target: string;
}

export type ImportGraph = Map<string, ImportEdge[]>;

export interface Reachable {
    reachableExports: Set<string>;
    reachableFiles: Set<string>;
}

export interface ClosureGraph {
    version: number;
    registers: CallEntry[];
    consumers: CallEntry[];
    emits: EventEntry[];
    subscribes: EventEntry[];
    eventActivity: CallEntry[];
    exports: ExportEntry[];
    imports: ImportEntry[];
    externalConsumers: ImportEntry[];
    sideEffectImports: SideEffectEntry[];
    interfaces: InterfaceEntry[];
    idsExports: ExportEntry[];
    stringsExports: ExportEntry[];
    iconsExports: ExportEntry[];
}
```
