# core/converters/check.converter.ts

> 36 lines of code and 9 definitions.

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

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

## Definitions

- `evidenceSignOf` (lexical_declaration, line 8, exported)
- `mergeCheck` (lexical_declaration, line 35, exported)
- `asCheck` (lexical_declaration, line 17, exported)
- `SIGNS` (lexical_declaration, line 6)
- `separator` (lexical_declaration, line 9, exported)
- `sign` (lexical_declaration, line 13, exported)
- `facet` (lexical_declaration, line 21, exported)
- `by` (lexical_declaration, line 22, exported)
- `answer` (lexical_declaration, line 27, exported)

## Contained in

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

## Uses

- [core/predicates/record.predicate.ts](https://banes-lab.com/source/context/core/predicates/record.predicate.ts.md)

## Used by

- [core/predicates/check.predicate.ts](https://banes-lab.com/source/context/core/predicates/check.predicate.ts.md)
- [core/stores/check.store.ts](https://banes-lab.com/source/context/core/stores/check.store.ts.md)

## Linked from

- [core/predicates](https://banes-lab.com/anatomy/context/folder-context-core-predicates.md)
- [core/stores](https://banes-lab.com/anatomy/context/folder-context-core-stores.md)

## Source

```typescript
import { CHECK_QUESTIONS, EVIDENCE_SIGNS, SIGN_SEPARATOR } from "#configuration/constants/check.constants";
import { asString, asStringArray } from "#core/normalizers/field.normalizer";
import type { CheckFacet } from "#types/check.types";
import { isObject } from "#core/predicates/record.predicate";

const SIGNS: ReadonlySet<string> = new Set(EVIDENCE_SIGNS);

export const evidenceSignOf = function evidenceSignOf(text: string): string | null {
    const separator = text.indexOf(SIGN_SEPARATOR);
    if (separator === -1 || text.slice(separator + 1).trim().length === 0) {
        return null;
    }
    const sign = text.slice(0, separator).trim();
    return SIGNS.has(sign) ? sign : null;
};

export const asCheck = function asCheck(value: unknown): CheckFacet | null {
    if (!isObject(value)) {
        return null;
    }
    const facet: CheckFacet = {};
    const by = asStringArray(value["by"]);
    if (by.length > 0) {
        facet.by = by;
    }
    for (const question of CHECK_QUESTIONS) {
        const answer = asString(value[question]);
        if (answer.length > 0) {
            facet[question] = answer;
        }
    }
    return facet;
};

export const mergeCheck = function mergeCheck(declared: CheckFacet | null, own: CheckFacet | null): CheckFacet | null {
    if (declared === null) {
        return own;
    }
    return own === null ? declared : { ...declared, ...own };
};
```
