# core/coordinators/metric.coordinator.ts

> 17 lines of code and 3 definitions.

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

Listed in [core/coordinators](https://banes-lab.com/api/source/build-scripts/core/coordinators.md), after [core/coordinators/link.coordinator.ts](https://banes-lab.com/source/build-scripts/core/coordinators/link.coordinator.ts.md) and before [core/coordinators/ontology.coordinator.ts](https://banes-lab.com/source/build-scripts/core/coordinators/ontology.coordinator.ts.md).

## Definitions

- `buildMetrics` (lexical_declaration, line 8, exported)
- `snapshot` (lexical_declaration, line 9, exported)
- `metrics` (lexical_declaration, line 10, exported)

## Contained in

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

## Uses

- [core/formatters/metric.formatter.ts](https://banes-lab.com/source/build-scripts/core/formatters/metric.formatter.ts.md)

## Used by

- [core/steps/metric.step.ts](https://banes-lab.com/source/build-scripts/core/steps/metric.step.ts.md)

## Linked from

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

## Source

```typescript
import { countedGroups, countedRules, gateSteps } from "#core/counters/metric.counter";
import type { SiteMetrics } from "#types/metric.types";
import { absolutePath } from "@ssot/paths";
import { loadMetricSnapshot } from "#core/loaders/metric.loader";
import { renderMetrics } from "#core/formatters/metric.formatter";
import { writeCanonicalText } from "@govlab/canonical-write";

export const buildMetrics = async function buildMetrics(): Promise<SiteMetrics> {
    const snapshot = await loadMetricSnapshot();
    const metrics: SiteMetrics = {
        principles: countedGroups(snapshot.principles, (group) => group.principles),
        rules: countedRules(),
        steps: gateSteps(),
        terms: countedGroups(snapshot.terms, (group) => group.terms),
    };
    await writeCanonicalText(absolutePath("app.metric"), renderMetrics(metrics));
    return metrics;
};
```
