# types/closure.types.ts

> 69 lines of code and 14 definitions.

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

Listed in [types](https://banes-lab.com/api/source/scripts/types.md), before [types/credential.types.ts](https://banes-lab.com/source/scripts/types/credential.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)
- `FieldEntry` (interface_declaration, line 33, exported)
- `InterfaceEntry` (interface_declaration, line 38, exported)
- `FileFlags` (interface_declaration, line 44, exported)
- `GraphEntries` (interface_declaration, line 50, exported)
- `GraphDelta` (type_alias_declaration, line 66, exported)
- `ClosureGraph` (interface_declaration, line 68, exported)
- `PatternResolution` (interface_declaration, line 72, exported)
- `ScanState` (interface_declaration, line 77, exported)

## Contained in

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

## Source

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

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

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

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

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

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

export interface FieldEntry {
    readonly name: string;
    readonly optional: boolean;
}

export interface InterfaceEntry {
    readonly file: string;
    readonly name: string;
    readonly fields: readonly FieldEntry[];
}

export interface FileFlags {
    readonly isIds: boolean;
    readonly isStrings: boolean;
    readonly isIcons: boolean;
}

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

export type GraphDelta = Partial<GraphEntries>;

export interface ClosureGraph extends GraphEntries {
    readonly version: number;
}

export interface PatternResolution {
    readonly edges: readonly SideEffectEntry[];
    readonly unmatched: readonly string[];
}

export interface ScanState {
    readonly name: number;
    readonly pattern: number;
    readonly starName: number;
    readonly starPattern: number;
}
```
