# core/loaders/algorithm.loader.ts

> 24 lines of code and 4 definitions.

Tree: GovLab Context
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/context#file-context-core-loaders-algorithm-loader-ts
Source text: https://banes-lab.com/source/context/core/loaders/algorithm.loader.ts.txt

Listed in [core/loaders](https://banes-lab.com/api/source/context/core/loaders.md), before [core/loaders/architecture.loader.ts](https://banes-lab.com/source/context/core/loaders/architecture.loader.ts.md).

## Definitions

- `loadBundledSymbols` (lexical_declaration, line 26, exported)
- `loadContracts` (lexical_declaration, line 9, exported)
- `asSymbolEntries` (lexical_declaration, line 15)
- `symbolsPath` (lexical_declaration, line 22, exported)

## Contained in

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

## Uses

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

## Used by

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

## Linked from

- [core/loaders](https://banes-lab.com/anatomy/context/folder-context-core-loaders.md)
- [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 type { Contract, ContractCategory, SymbolEntry } from "#types/algorithm.types";
import { foldCategories, loadCategories, readJsonFile } from "#core/loaders/ontology.loader";
import type { ReadAudit } from "#core/observers/record.observer";
import { SYMBOLS_KEY } from "#configuration/constants/algorithm.constants";
import { absolutePath } from "@ssot/paths";
import { isObject } from "#core/predicates/record.predicate";
import { normalizeContract } from "#core/normalizers/algorithm.normalizer";

export const loadContracts = function loadContracts(audit: ReadAudit, data?: ContractCategory[]): Contract[] {
    return data
        ? foldCategories(data, normalizeContract, audit)
        : loadCategories(absolutePath("govlab.context.algorithms"), normalizeContract, audit);
};

const asSymbolEntries = function asSymbolEntries(value: unknown): SymbolEntry[] {
    if (!isObject(value) || !Array.isArray(value[SYMBOLS_KEY])) {
        return [];
    }
    return value[SYMBOLS_KEY].filter((entry): entry is SymbolEntry => isObject(entry));
};

export const symbolsPath = function symbolsPath(): string {
    return absolutePath("govlab.context.symbols");
};

export const loadBundledSymbols = function loadBundledSymbols(): SymbolEntry[] {
    return asSymbolEntries(readJsonFile(symbolsPath()));
};
```
