# core/loaders/metric.loader.ts

> 19 lines of code and 7 definitions.

Tree: Bane's Lab Build Scripts
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-loaders-metric-loader-ts
Source text: https://banes-lab.com/source/build-scripts/core/loaders/metric.loader.ts.txt

Listed in [core/loaders](https://banes-lab.com/api/source/build-scripts/core/loaders.md), after [core/loaders/manifest.loader.ts](https://banes-lab.com/source/build-scripts/core/loaders/manifest.loader.ts.md) and before [core/loaders/reference.loader.ts](https://banes-lab.com/source/build-scripts/core/loaders/reference.loader.ts.md).

## Definitions

- `isGroupList` (lexical_declaration, line 8)
- `isMetricSnapshot` (lexical_declaration, line 12)
- `loadMetricSnapshot` (lexical_declaration, line 16, exported)
- `ONTOLOGY_MODULE` (lexical_declaration, line 5)
- `ONTOLOGY_EXPORT` (lexical_declaration, line 6)
- `loaded` (lexical_declaration, line 17, exported)
- `ontology` (lexical_declaration, line 18, exported)

## Contained in

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

## Linked from

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

## Source

```typescript
import type { MetricSnapshot } from "#types/metric.types";
import { NO_METRIC_GROUPS } from "#configuration/strings/metric.strings";
import { isRecord } from "#core/selectors/base.selector";

const ONTOLOGY_MODULE = "@banes-lab/web/core/generated/ontology.generated.ts";
const ONTOLOGY_EXPORT = "ONTOLOGY";

const isGroupList = function isGroupList(value: unknown): boolean {
    return Array.isArray(value) && value.every(isRecord);
};

const isMetricSnapshot = function isMetricSnapshot(value: unknown): value is MetricSnapshot {
    return isRecord(value) && isGroupList(value["principles"]) && isGroupList(value["terms"]);
};

export const loadMetricSnapshot = async function loadMetricSnapshot(): Promise<MetricSnapshot> {
    const loaded: unknown = await import(ONTOLOGY_MODULE);
    const ontology = isRecord(loaded) ? loaded[ONTOLOGY_EXPORT] : null;
    if (!isMetricSnapshot(ontology)) {
        throw new TypeError(NO_METRIC_GROUPS);
    }
    return ontology;
};
```
