# types/document.types.ts

> 131 lines of code and 24 definitions.

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

Listed in [types](https://banes-lab.com/api/source/docs/types.md), after [types/document.output.types.ts](https://banes-lab.com/source/docs/types/document.output.types.ts.md) and before [types/environment.types.ts](https://banes-lab.com/source/docs/types/environment.types.ts.md).

## Definitions

- `DocNode` (interface_declaration, line 4, exported)
- `DeadEdge` (interface_declaration, line 17, exported)
- `DocGraph` (interface_declaration, line 24, exported)
- `NodeEdgeKey` (type_alias_declaration, line 33, exported)
- `NodeEdgeField` (interface_declaration, line 35, exported)
- `NodeEdges` (interface_declaration, line 40, exported)
- `MetaConcern` (interface_declaration, line 45, exported)
- `DocTypeSchema` (interface_declaration, line 52, exported)
- `SchemaDefect` (interface_declaration, line 58, exported)
- `SpineDefectCode` (type_alias_declaration, line 64, exported)
- `SpineDefect` (interface_declaration, line 66, exported)
- `SpineOptions` (interface_declaration, line 72, exported)
- `StemParts` (interface_declaration, line 77, exported)
- `SpineProfile` (interface_declaration, line 82, exported)
- `HarnessProfile` (interface_declaration, line 88, exported)
- `SpineContext` (interface_declaration, line 92, exported)
- `DocNameCode` (type_alias_declaration, line 97, exported)
- `DocNameDefect` (interface_declaration, line 99, exported)
- `DocNameInput` (interface_declaration, line 105, exported)
- `DirectiveSubject` (interface_declaration, line 112, exported)
- `DocumentSection` (interface_declaration, line 117, exported)
- `DocumentDecl` (interface_declaration, line 122, exported)
- `DocMeta` (interface_declaration, line 135, exported)
- `TemplateSpec` (interface_declaration, line 148, exported)

## Contained in

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

## Source

```typescript
import type { DocForm } from "#types/location.types";
import type { Renderable } from "#types/readme.types";

export interface DocNode {
    name: string;
    relPath: string;
    type: string;
    concern: string;
    summary: string;
    dependsOn: string[];
    links: string[];
    supersedes: string[];
    governs: string[];
    status?: string;
}

export interface DeadEdge {
    from: string;
    relPath: string;
    field: "depends-on" | "links" | "supersedes";
    target: string;
}

export interface DocGraph {
    nodes: DocNode[];
    byName: Record<string, DocNode>;
    duplicateNames: string[];
    deadEdges: DeadEdge[];
    cycles: string[][];
    superseded: string[];
}

export type NodeEdgeKey = "dependsOn" | "links" | "supersedes";

export interface NodeEdgeField {
    key: NodeEdgeKey;
    field: DeadEdge["field"];
}

export interface NodeEdges {
    dead: DeadEdge[];
    superseded: string[];
}

export interface MetaConcern {
    concern: string;
    aliases?: string[];
    required: boolean;
    order: number;
}

export interface DocTypeSchema {
    type: string;
    metaConcerns: MetaConcern[];
    ordered?: boolean;
}

export interface SchemaDefect {
    code: "off-schema";
    concern: string;
    remediation: string;
}

export type SpineDefectCode = "missing-field" | "no-frontmatter" | "no-title";

export interface SpineDefect {
    code: SpineDefectCode;
    detail: string;
    line: number;
}

export interface SpineOptions {
    requireFrontmatter?: boolean;
    requireTitle?: boolean;
}

export interface StemParts {
    member?: string;
    name: string;
}

export interface SpineProfile {
    keys: string[];
    requireFrontmatter: boolean;
    requireTitle: boolean;
}

export interface HarnessProfile extends SpineProfile {
    prefix: string;
}

export interface SpineContext {
    harnessRoot: string | null;
    harnessProfiles: readonly HarnessProfile[];
}

export type DocNameCode = "missing-concern-verb" | "missing-subject" | "non-activity-concern";

export interface DocNameDefect {
    code: DocNameCode;
    detail: string;
    expected?: string;
}

export interface DocNameInput {
    form: DocForm;
    concern: string;
    name: string;
    activityVerbs: Readonly<Record<string, string>>;
}

export interface DirectiveSubject {
    defects: DocNameDefect[];
    subject: string;
}

export interface DocumentSection {
    heading: string;
    content: Renderable;
}

export interface DocumentDecl {
    type: string;
    concern?: string;
    member?: string;
    generated?: boolean;
    name: string;
    summary: string;
    status?: string;
    title?: string;
    lead?: Renderable;
    body: DocumentSection[];
}

export interface DocMeta {
    delegated: boolean;
    doc: string;
    docFilename: string;
    fields: Record<string, string>;
    fmConcern: string;
    fmType: string | undefined;
    harnessOwned: boolean;
    hostBoundary: boolean;
    relDoc: string;
    source: string;
}

export interface TemplateSpec {
    concern: string;
    def: DocForm;
    form: string;
    name: string;
    summary: string;
    status: string;
}
```
