# core/validators/concept.validator.ts

> 17 lines of code and 3 definitions.

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

Listed in [core/validators](https://banes-lab.com/api/source/context/core/validators.md), after [core/validators/check.validator.ts](https://banes-lab.com/source/context/core/validators/check.validator.ts.md) and before [core/validators/document.validator.ts](https://banes-lab.com/source/context/core/validators/document.validator.ts.md).

## Definitions

- `unresolvedConceptRefsOf` (lexical_declaration, line 4, exported)
- `variantIdsOf` (lexical_declaration, line 12, exported)
- `canonical` (lexical_declaration, line 15, exported)

## Contained in

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

## Used by

- [core/validators/ontology.validator.ts](https://banes-lab.com/source/context/core/validators/ontology.validator.ts.md)

## Linked from

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

## Source

```typescript
import { CONCEPTS, VARIANTS } from "#configuration/constants/concept.constants";
import type { UnresolvedConceptRef, VariantId } from "#types/concept.types";

export const unresolvedConceptRefsOf = function unresolvedConceptRefsOf(
    resolve: (ref: string) => boolean,
): UnresolvedConceptRef[] {
    return CONCEPTS.flatMap((concept) =>
        [concept.home, ...concept.members].filter((ref) => !resolve(ref)).map((ref) => ({ concept: concept.id, ref })),
    );
};

export const variantIdsOf = function variantIdsOf(collections: ReadonlyMap<string, readonly string[]>): VariantId[] {
    return [...collections].flatMap(([collection, ids]) =>
        ids.flatMap((id) => {
            const canonical = VARIANTS.get(id);
            return canonical === undefined ? [] : [{ canonical, collection, id }];
        }),
    );
};
```
