# core/coordinators/icons.coordinator.ts

> 24 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-icons-coordinator-ts
Source text: https://banes-lab.com/source/build-scripts/core/coordinators/icons.coordinator.ts.txt

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

## Definitions

- `buildIcons` (lexical_declaration, line 15, exported)
- `markNames` (lexical_declaration, line 9)
- `names` (lexical_declaration, line 16, exported)

## Contained in

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

## Uses

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

## Used by

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

## Linked from

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

## Source

```typescript
import { discoverIcons, iconPathsOf } from "#core/loaders/icons.loader";
import { renderIconPaths, renderStylesheet } from "#core/formatters/icons.formatter";
import { HOME_ROW_LINKS } from "@banes-lab/web/configuration/icons/home.icons.ts";
import { ICON_PREFIX } from "#configuration/constants/icons.constants";
import { absolutePath } from "@ssot/paths";
import { writeCanonicalText } from "@govlab/canonical-write";
import { writeFontSubset } from "#core/persistence/icons.persistence";

const markNames = function markNames(): readonly string[] {
    return HOME_ROW_LINKS.map((link) => link.icon)
        .filter((icon) => icon.startsWith(ICON_PREFIX))
        .map((icon) => icon.slice(ICON_PREFIX.length));
};

export const buildIcons = async function buildIcons(): Promise<number> {
    const names = await discoverIcons();
    await writeFontSubset(names);
    await Promise.all([
        writeCanonicalText(absolutePath("app.icons"), renderStylesheet(names)),
        writeCanonicalText(
            absolutePath("app.glyphs"),
            renderIconPaths(markNames().map((name) => [name, iconPathsOf(name)])),
        ),
    ]);
    return names.length;
};
```
