# core/factories/node.factory.ts

> 24 lines of code and 3 definitions.

Tree: GovLab Patterns
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/patterns#file-patterns-core-factories-node-factory-ts
Source text: https://banes-lab.com/source/patterns/core/factories/node.factory.ts.txt

Listed in [core/factories](https://banes-lab.com/api/source/patterns/core/factories.md), after [core/factories/graph.factory.ts](https://banes-lab.com/source/patterns/core/factories/graph.factory.ts.md) and before [core/factories/operation.factory.ts](https://banes-lab.com/source/patterns/core/factories/operation.factory.ts.md).

## Definitions

- `sourceNode` (lexical_declaration, line 5, exported)
- `analysisNode` (lexical_declaration, line 9, exported)
- `findingNode` (lexical_declaration, line 19, exported)

## Contained in

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

## Used by

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

## Linked from

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

## Source

```typescript
import { ANALYSIS_RUNG, SOURCE_ID, SOURCE_RUNG } from "#configuration/constants/graph.constants";
import type { Coordinate } from "#types/axis.types";
import type { Node } from "#types/graph.types";

export const sourceNode = function sourceNode(): Node {
    return { id: SOURCE_ID, inputs: [], kind: "source", reasoning: SOURCE_RUNG, tags: [] };
};

export const analysisNode = function analysisNode(field: string, matcher: string): Node {
    return {
        id: `${field}:${matcher}`,
        inputs: [SOURCE_ID],
        kind: "analysis",
        reasoning: ANALYSIS_RUNG,
        tags: [matcher],
    };
};

export const findingNode = function findingNode(producer: string, name: string, coord: Coordinate): Node {
    return {
        id: `${producer}:${name}`,
        inputs: [producer],
        kind: "finding",
        reasoning: coord.reasoning,
        tags: [coord.ontology, coord.analysis, coord.representation],
    };
};
```
