# types/site.types.ts

> 82 lines of code and 17 definitions.

Tree: Bane's Lab Build Scripts
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/build-scripts#file-build-scripts-types-site-types-ts
Source text: https://banes-lab.com/source/build-scripts/types/site.types.ts.txt

Listed in [types](https://banes-lab.com/api/source/build-scripts/types.md), after [types/server.types.ts](https://banes-lab.com/source/build-scripts/types/server.types.ts.md) and before [types/source.types.ts](https://banes-lab.com/source/build-scripts/types/source.types.ts.md).

## Definitions

- `DiscoveredRoute` (interface_declaration, line 4, exported)
- `DiscoveredPage` (interface_declaration, line 14, exported)
- `CrawlDirective` (type_alias_declaration, line 19, exported)
- `CrawlRule` (interface_declaration, line 21, exported)
- `SitemapPart` (interface_declaration, line 26, exported)
- `SignedText` (interface_declaration, line 31, exported)
- `Discovery` (interface_declaration, line 36, exported)
- `FullTextPart` (interface_declaration, line 46, exported)
- `Inline` (type_alias_declaration, line 52, exported)
- `SiteMode` (type_alias_declaration, line 54, exported)
- `SiteState` (interface_declaration, line 56, exported)
- `SitePhase` (type_alias_declaration, line 64, exported)
- `SiteOutcome` (interface_declaration, line 66, exported)
- `CacheDecision` (interface_declaration, line 71, exported)
- `StepCache` (interface_declaration, line 76, exported)
- `SiteStep` (interface_declaration, line 81, exported)
- `StepSpec` (interface_declaration, line 91, exported)

## Contained in

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

## Source

```typescript
import type { BuiltOntology } from "#types/ontology.types";
import type { DiagramWalk } from "#types/diagram.types";

export interface DiscoveredRoute {
    readonly description: string;
    readonly label: string;
    readonly markdown: string;
    readonly page: string;
    readonly path: string;
    readonly tab: string | null;
    readonly title: string;
}

export interface DiscoveredPage extends DiscoveredRoute {
    readonly content: unknown;
    readonly id: string;
}

export type CrawlDirective = "Allow" | "Disallow";

export interface CrawlRule {
    readonly directive: CrawlDirective;
    readonly path: string;
}

export interface SitemapPart {
    readonly body: string;
    readonly route: string;
}

export interface SignedText {
    readonly publicKey: string;
    readonly signed: string;
}

export interface Discovery {
    readonly author: string;
    readonly consent: string;
    readonly name: string;
    readonly pages: readonly DiscoveredPage[];
    readonly routes: readonly DiscoveredRoute[];
    readonly site: string;
    readonly summary: string;
}

export interface FullTextPart {
    readonly file: string;
    readonly label: string;
    readonly routes: readonly DiscoveredRoute[];
}

export type Inline = (markup: string) => string;

export type SiteMode = "build" | "serve";

export interface SiteState {
    readonly diagrams: DiagramWalk;
    readonly mode: SiteMode;
    readonly ontology: BuiltOntology | null;
    readonly outDir: string;
    readonly root: string;
}

export type SitePhase = "close" | "start";

export interface SiteOutcome {
    readonly gives: Partial<SiteState>;
    readonly line: string;
}

export interface CacheDecision {
    readonly key: string | null;
    readonly skip: boolean;
}

export interface StepCache {
    readonly key: (state: SiteState) => string;
    readonly outputs: readonly string[];
}

export interface SiteStep {
    readonly cache: StepCache | null;
    readonly gives: readonly string[];
    readonly modes: readonly SiteMode[];
    readonly name: string;
    readonly needs: readonly string[];
    readonly phase: SitePhase;
    readonly run: (state: SiteState) => Promise<SiteOutcome>;
}

export interface StepSpec {
    readonly cache: StepCache | null;
    readonly gives?: readonly string[];
    readonly modes?: readonly SiteMode[];
    readonly name: string;
    readonly needs?: readonly string[];
    readonly phase: SitePhase;
    readonly run: (state: SiteState) => Promise<SiteOutcome>;
}
```
