# runtime/entrypoints/site.entrypoint.ts

> 36 lines of code and 4 definitions.

Tree: Site tree
Language: typescript
Layer: runtime
Canonical: https://banes-lab.com/anatomy/tree#file-runtime-entrypoints-site-entrypoint-ts
Source text: https://banes-lab.com/assets/sources/source.e9f35d32f0fe988e2627fe416ebab16ea3a174bd2637e7d7634d46990a63ed63.generated.txt

## Definitions

- `start` (lexical_declaration, line 21)
- `required` (lexical_declaration, line 13)
- `element` (lexical_declaration, line 14)
- `disposers` (lexical_declaration, line 22)

## Uses

- [presentation/widgets/home.widget.ts](https://banes-lab.com/source/tree/presentation/widgets/home.widget.ts.md)

## Source

```typescript
import "#presentation/records/records.barrel";
import { COPYRIGHT_ID, HEADER_ID, MAIN_ID } from "#core/ids/site.ids";
import type { Disposer } from "#types/base.types";
import { mountCite } from "#presentation/widgets/cite.widget";
import { mountCopyright } from "#presentation/widgets/site.widget";
import { mountHome } from "#presentation/widgets/home.widget";
import { mountMenu } from "#presentation/widgets/menu.widget";
import { mountOverlay } from "#presentation/widgets/overlay.widget";
import { mountReference } from "#presentation/widgets/reference.widget";
import { observeAnimations } from "#core/observers/element.observer";
import { startRouting } from "#runtime/coordinators/route.coordinator";

const required = function required(id: string): HTMLElement {
    const element = document.getElementById(id);
    if (element === null) {
        throw new Error(`Missing element #${id}`);
    }
    return element;
};

const start = function start(): Disposer {
    const disposers: Disposer[] = [
        observeAnimations(document.body),
        mountMenu(required(HEADER_ID)),
        mountCopyright(required(COPYRIGHT_ID)),
        mountOverlay(),
        mountReference(),
        mountCite(),
        mountHome(required(MAIN_ID)),
        startRouting(required(MAIN_ID)),
    ];
    return () => {
        for (const dispose of disposers) {
            dispose();
        }
    };
};

void start();
```
