# core/converters/graph.concept.converter.ts

> 19 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-converters-graph-concept-converter-ts
Source text: https://banes-lab.com/source/build-scripts/core/converters/graph.concept.converter.ts.txt

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

## Definitions

- `conceptEdges` (lexical_declaration, line 5, exported)
- `home` (lexical_declaration, line 11, exported)
- `from` (lexical_declaration, line 16, exported)

## Contained in

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

## Source

```typescript
import type { Concept } from "@govlab/context";
import type { GraphEdge } from "@banes-lab/web/types/graph.types.js";
import type { Resolver } from "#types/ontology.types";

export const conceptEdges = function conceptEdges(
    concepts: readonly Concept[],
    resolve: Resolver,
    relation: string,
): readonly GraphEdge[] {
    return concepts.flatMap((concept) => {
        const home = resolve.target(concept.home).ref;
        if (home === null) {
            return [];
        }
        return concept.members.flatMap((member) => {
            const from = resolve.target(member).ref;
            return from === null ? [] : [{ from, relation, to: home }];
        });
    });
};
```
