# core/resolvers/route.resolver.ts

> 43 lines of code and 13 definitions.

Tree: Bane's Lab Build Scripts
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-resolvers-route-resolver-ts
Source text: https://banes-lab.com/source/build-scripts/core/resolvers/route.resolver.ts.txt

Listed in [core/resolvers](https://banes-lab.com/api/source/build-scripts/core/resolvers.md), after [core/resolvers/reference.resolver.ts](https://banes-lab.com/source/build-scripts/core/resolvers/reference.resolver.ts.md) and before [core/resolvers/rule.resolver.ts](https://banes-lab.com/source/build-scripts/core/resolvers/rule.resolver.ts.md).

## Definitions

- `jsonPath` (lexical_declaration, line 18, exported)
- `jsonPathOf` (lexical_declaration, line 14, exported)
- `markdownPathOf` (lexical_declaration, line 22, exported)
- `sitemapPartRoute` (lexical_declaration, line 30, exported)
- `sitemapPartFiles` (lexical_declaration, line 38, exported)
- `markdownFileOf` (lexical_declaration, line 26, exported)
- `ledgerFile` (lexical_declaration, line 49, exported)
- `SLASH` (lexical_declaration, line 10)
- `HOME_PATH` (lexical_declaration, line 11)
- `HOME_STEM` (lexical_declaration, line 12)
- `stem` (lexical_declaration, line 34, exported)
- `files` (lexical_declaration, line 42, exported)
- `part` (lexical_declaration, line 43, exported)

## Contained in

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

## Used by

- [core/converters/index.page.converter.ts](https://banes-lab.com/source/build-scripts/core/converters/index.page.converter.ts.md)
- [core/coordinators/validation.coordinator.ts](https://banes-lab.com/source/build-scripts/core/coordinators/validation.coordinator.ts.md)
- [core/persistence/page.persistence.ts](https://banes-lab.com/source/build-scripts/core/persistence/page.persistence.ts.md)
- [core/persistence/route.persistence.ts](https://banes-lab.com/source/build-scripts/core/persistence/route.persistence.ts.md)
- [core/resolvers/page.resolver.ts](https://banes-lab.com/source/build-scripts/core/resolvers/page.resolver.ts.md)

## Linked from

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

## Source

```typescript
import {
    JSON_ROUTE,
    MARKDOWN_EXTENSION,
    SITEMAP_EXTENSION,
    SITEMAP_PART_JOIN,
} from "#configuration/constants/site.constants";
import type { DiscoveredRoute } from "#types/site.types";
import { absolutePath } from "@ssot/paths";

const SLASH = "/";
const HOME_PATH = "/";
const HOME_STEM = "/index";

export const jsonPathOf = function jsonPathOf(id: string, tab: string | null = null): string {
    return tab === null ? JSON_ROUTE + id : JSON_ROUTE + id + SLASH + tab;
};

export const jsonPath = function jsonPath(route: DiscoveredRoute): string {
    return jsonPathOf(route.page, route.tab);
};

export const markdownPathOf = function markdownPathOf(path: string): string {
    return (path === HOME_PATH ? HOME_STEM : path) + MARKDOWN_EXTENSION;
};

export const markdownFileOf = function markdownFileOf(path: string): string {
    return markdownPathOf(path).slice(1);
};

export const sitemapPartRoute = function sitemapPartRoute(route: string, part: number): string {
    if (part === 0) {
        return route;
    }
    const stem = route.slice(0, -SITEMAP_EXTENSION.length);
    return stem + SITEMAP_PART_JOIN + String(part + 1) + SITEMAP_EXTENSION;
};

export const sitemapPartFiles = function sitemapPartFiles(
    route: string,
    exists: (file: string) => boolean,
): readonly string[] {
    const files: string[] = [];
    for (let part = 0; exists(sitemapPartRoute(route, part).slice(1)); part += 1) {
        files.push(sitemapPartRoute(route, part).slice(1));
    }
    return files;
};

export const ledgerFile = function ledgerFile(): string {
    return absolutePath("app.sitemap");
};
```
