# core/formatters/template.formatter.ts

> 24 lines of code and 6 definitions.

Tree: GovLab Docs
Language: typescript
Layer: processing
Canonical: https://banes-lab.com/anatomy/docs#file-docs-core-formatters-template-formatter-ts
Source text: https://banes-lab.com/source/docs/core/formatters/template.formatter.ts.txt

Listed in [core/formatters](https://banes-lab.com/api/source/docs/core/formatters.md), after [core/formatters/system.formatter.ts](https://banes-lab.com/source/docs/core/formatters/system.formatter.ts.md).

## Definitions

- `renderTemplate` (lexical_declaration, line 13, exported)
- `LINE_BREAK` (lexical_declaration, line 6)
- `MODULE_AXIS` (lexical_declaration, line 7)
- `field` (lexical_declaration, line 9)
- `isModule` (lexical_declaration, line 14, exported)
- `frontmatter` (lexical_declaration, line 15, exported)

## Contained in

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

## Uses

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

## Used by

- [core/coordinators/template.coordinator.ts](https://banes-lab.com/source/docs/core/coordinators/template.coordinator.ts.md)

## Linked from

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

## Source

```typescript
import { DEFAULT_BODY, MODULE_BODY } from "#configuration/strings/template.strings";
import { FRONTMATTER_FENCE } from "#configuration/constants/document.constants";
import type { TemplateSpec } from "#types/document.types";
import { titleCase } from "#core/formatters/markdown.formatter";

const LINE_BREAK = "\n";
const MODULE_AXIS = "module";

const field = function field(key: string, value: string): string {
    return `${key}: ${value}`;
};

export const renderTemplate = function renderTemplate(spec: TemplateSpec): string {
    const isModule = spec.def.ownerAxis === MODULE_AXIS;
    const frontmatter = [
        FRONTMATTER_FENCE,
        field("type", spec.form),
        field("name", spec.name),
        field("summary", spec.summary),
        ...(isModule ? [] : [field("concern", spec.concern)]),
        field("status", spec.status),
        FRONTMATTER_FENCE,
    ];
    return [...frontmatter, "", `# ${titleCase(spec.name)}`, "", isModule ? MODULE_BODY : DEFAULT_BODY, ""].join(
        LINE_BREAK,
    );
};
```
