# core/formatters/reference.formatter.ts

> 34 lines of code and 3 definitions.

Tree: Bane's Lab Build Scripts
Language: typescript
Layer: processing
Canonical: https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-formatters-reference-formatter-ts
Source text: https://banes-lab.com/source/build-scripts/core/formatters/reference.formatter.ts.txt

Listed in [core/formatters](https://banes-lab.com/api/source/build-scripts/core/formatters.md), after [core/formatters/record.formatter.ts](https://banes-lab.com/source/build-scripts/core/formatters/record.formatter.ts.md) and before [core/formatters/route.formatter.ts](https://banes-lab.com/source/build-scripts/core/formatters/route.formatter.ts.md).

## Definitions

- `renderReferenceFace` (lexical_declaration, line 9, exported)
- `renderReferenceLoader` (lexical_declaration, line 18, exported)
- `entries` (lexical_declaration, line 19, exported)

## Contained in

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

## Used by

- [core/coordinators/ontology.coordinator.ts](https://banes-lab.com/source/build-scripts/core/coordinators/ontology.coordinator.ts.md)

## Linked from

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

## Source

```typescript
import {
    ASSET_SPECIFIER,
    FACE_JOINER,
    GENERATED_TAG,
    REFERENCE_STEM,
} from "#configuration/constants/reference.constants";
import type { ReferenceIndex } from "@banes-lab/web/types/reference.types.js";

export const renderReferenceFace = function renderReferenceFace(index: ReferenceIndex): string {
    return [
        'import type { ReferenceIndex } from "#types/reference.types";',
        "",
        `export const REFERENCES: ReferenceIndex = JSON.parse(${JSON.stringify(JSON.stringify(index))});`,
        "",
    ].join("\n");
};

export const renderReferenceLoader = function renderReferenceLoader(faces: readonly string[]): string {
    const entries = faces.map(
        (face) =>
            `    [${JSON.stringify(face)}, () => import(${JSON.stringify(ASSET_SPECIFIER + REFERENCE_STEM + FACE_JOINER + face + GENERATED_TAG)})],`,
    );
    return [
        'import type { ReferenceIndex } from "#types/reference.types";',
        "",
        "const LOADERS: ReadonlyMap<string, () => Promise<{ readonly REFERENCES: ReferenceIndex }>> = new Map([",
        ...entries,
        "]);",
        "",
        "export const loadReferences = async function loadReferences(collection: string): Promise<ReferenceIndex | null> {",
        "    const load = LOADERS.get(collection);",
        "    return load === undefined ? null : (await load()).REFERENCES;",
        "};",
        "",
    ].join("\n");
};
```
