# core/formatters/source.formatter.ts

> 28 lines of code and 3 definitions.

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

Listed in [core/formatters](https://banes-lab.com/api/source/build-scripts/core/formatters.md), after [core/formatters/site.formatter.ts](https://banes-lab.com/source/build-scripts/core/formatters/site.formatter.ts.md) and before [core/formatters/tab.formatter.ts](https://banes-lab.com/source/build-scripts/core/formatters/tab.formatter.ts.md).

## Definitions

- `renderSourceLeaf` (lexical_declaration, line 10, exported)
- `definitionLine` (lexical_declaration, line 5)
- `exported` (lexical_declaration, line 6)

## Contained in

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

## Uses

- [core/formatters/link.formatter.ts](https://banes-lab.com/source/build-scripts/core/formatters/link.formatter.ts.md)
- [core/formatters/markdown.formatter.ts](https://banes-lab.com/source/build-scripts/core/formatters/markdown.formatter.ts.md)

## Linked from

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

## Source

```typescript
import type { DefinitionData, SourceData } from "#types/source.types";
import { addressLines, blocks, code, fenced, heading, quote, section } from "#core/formatters/markdown.formatter";
import { placementLine, relationSections } from "#core/formatters/link.formatter";

const definitionLine = function definitionLine(definition: DefinitionData): string {
    const exported = definition.exported ? ", exported" : "";
    return `${code(definition.name)} (${definition.kind}, line ${String(definition.line)}${exported})`;
};

export const renderSourceLeaf = function renderSourceLeaf(
    data: SourceData,
    treeLabel: string,
    text: string | null,
): string {
    return blocks([
        heading(data.path),
        quote(data.summary),
        addressLines([
            ["Tree", treeLabel],
            ["Language", data.language],
            ["Layer", data.layer],
            ["Canonical", data.href],
            ["Source text", data.text],
        ]),
        placementLine(data),
        section("Definitions", data.definitions.map(definitionLine)),
        ...relationSections(data.relations),
        text === null ? null : `## Source\n\n${fenced(text, data.language)}`,
    ]);
};
```
