# core/converters/page.converter.ts

> 17 lines of code and 4 definitions.

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

Listed in [core/converters](https://banes-lab.com/api/source/build-scripts/core/converters.md), after [core/converters/ontology.vocabulary.converter.ts](https://banes-lab.com/source/build-scripts/core/converters/ontology.vocabulary.converter.ts.md) and before [core/converters/payload.converter.ts](https://banes-lab.com/source/build-scripts/core/converters/payload.converter.ts.md).

## Definitions

- `routesOf` (lexical_declaration, line 7, exported)
- `SLASH` (lexical_declaration, line 5)
- `pages` (lexical_declaration, line 11, exported)
- `tabs` (lexical_declaration, line 15, exported)

## Contained in

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

## Used by

- [core/persistence/page.persistence.ts](https://banes-lab.com/source/build-scripts/core/persistence/page.persistence.ts.md)

## Linked from

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

## Source

```typescript
import type { PageRoute, SiteSource } from "#types/page.types";
import type { Discovery } from "#types/site.types";
import { definitionOf } from "#core/selectors/page.selector";

const SLASH = "/";

export const routesOf = function routesOf(
    loaded: Pick<SiteSource, "ids" | "registry" | "renderer">,
    discovery: Discovery,
): PageRoute[] {
    const pages = loaded.ids.map((page) => ({
        page,
        path: loaded.renderer.headOf(page, definitionOf(loaded, page)).path,
    }));
    const tabs = discovery.routes
        .filter((route) => !pages.some((page) => page.path === route.path))
        .map((route) => ({ page: route.path.split(SLASH)[1] ?? "", path: route.path }));
    return [...pages, ...tabs];
};
```
