# core/converters/layer.converter.ts

> 26 lines of code and 9 definitions.

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

Listed in [core/converters](https://banes-lab.com/api/source/docs/core/converters.md), after [core/converters/graph.converter.ts](https://banes-lab.com/source/docs/core/converters/graph.converter.ts.md) and before [core/converters/markdown.converter.ts](https://banes-lab.com/source/docs/core/converters/markdown.converter.ts.md).

## Definitions

- `wrapLayer` (lexical_declaration, line 11, exported)
- `stripConcern` (lexical_declaration, line 22, exported)
- `openMarker` (lexical_declaration, line 3)
- `closeMarker` (lexical_declaration, line 7)
- `joinAround` (lexical_declaration, line 15)
- `open` (lexical_declaration, line 23, exported)
- `close` (lexical_declaration, line 24, exported)
- `start` (lexical_declaration, line 25, exported)
- `closeAt` (lexical_declaration, line 26, exported)

## Contained in

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

## Used by

- [core/factories/document.output.factory.ts](https://banes-lab.com/source/docs/core/factories/document.output.factory.ts.md)
- [core/formatters/readme.formatter.ts](https://banes-lab.com/source/docs/core/formatters/readme.formatter.ts.md)

## Linked from

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

## Source

```typescript
import { LAYER_CLOSE_PREFIX, LAYER_MARKER_END, LAYER_OPEN_PREFIX } from "#configuration/constants/layer.constants";

const openMarker = function openMarker(id: string): string {
    return `${LAYER_OPEN_PREFIX}${id} ${LAYER_MARKER_END}`;
};

const closeMarker = function closeMarker(id: string): string {
    return `${LAYER_CLOSE_PREFIX}${id} ${LAYER_MARKER_END}`;
};

export const wrapLayer = function wrapLayer(id: string, body: string): string {
    return `${openMarker(id)}\n${body}\n${closeMarker(id)}`;
};

const joinAround = function joinAround(before: string, after: string): string {
    if (before === "") {
        return after;
    }
    return after === "" ? `${before}\n` : `${before}\n\n${after}`;
};

export const stripConcern = function stripConcern(text: string, id: string): string {
    const open = openMarker(id);
    const close = closeMarker(id);
    const start = text.indexOf(open);
    const closeAt = start === -1 ? -1 : text.indexOf(close, start);
    if (closeAt === -1) {
        return text;
    }
    return joinAround(text.slice(0, start).trimEnd(), text.slice(closeAt + close.length).trimStart());
};
```
