# core/factories/axis.factory.ts

> 25 lines of code and 4 definitions.

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

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

## Definitions

- `coordinate` (lexical_declaration, line 12, exported)
- `CoordinateError` (class_declaration, line 5, exported)
- `constructor` (method_definition, line 6, exported)
- `{ ontology, analysis, representation, reasoning }` (lexical_declaration, line 13, exported)

## Contained in

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

## Uses

- [configuration/strings/axis.strings.ts](https://banes-lab.com/source/patterns/configuration/strings/axis.strings.ts.md)
- [core/predicates/axis.predicate.ts](https://banes-lab.com/source/patterns/core/predicates/axis.predicate.ts.md)

## Used by

- [core/converters/finding.distribution.converter.ts](https://banes-lab.com/source/patterns/core/converters/finding.distribution.converter.ts.md)
- [core/converters/finding.graph.converter.ts](https://banes-lab.com/source/patterns/core/converters/finding.graph.converter.ts.md)
- [core/converters/finding.sequence.converter.ts](https://banes-lab.com/source/patterns/core/converters/finding.sequence.converter.ts.md)
- [core/converters/finding.vector.converter.ts](https://banes-lab.com/source/patterns/core/converters/finding.vector.converter.ts.md)
- [core/factories/finding.factory.ts](https://banes-lab.com/source/patterns/core/factories/finding.factory.ts.md)

## Linked from

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

## Source

```typescript
import { AXIS_NAMES, unknownRung, unknownTag } from "#configuration/strings/axis.strings";
import type { Coordinate, CoordinateInput } from "#types/axis.types";
import { isAnalysisTag, isOntologyTag, isReasoningRung, isRepresentationTag } from "#core/predicates/axis.predicate";

export class CoordinateError extends Error {
    public constructor(message: string) {
        super(message);
        this.name = "CoordinateError";
    }
}

export const coordinate = function coordinate(input: CoordinateInput): Coordinate {
    const { ontology, analysis, representation, reasoning } = input;
    if (!isOntologyTag(ontology)) {
        throw new CoordinateError(unknownTag(AXIS_NAMES.ontology, ontology));
    }
    if (!isAnalysisTag(analysis)) {
        throw new CoordinateError(unknownTag(AXIS_NAMES.analysis, analysis));
    }
    if (!isRepresentationTag(representation)) {
        throw new CoordinateError(unknownTag(AXIS_NAMES.representation, representation));
    }
    if (!isReasoningRung(reasoning)) {
        throw new CoordinateError(unknownRung(reasoning));
    }
    return Object.freeze({ analysis, ontology, reasoning, representation });
};
```
