core/resolvers/route.resolver.ts

core/resolvers/route.resolver.ts is a file in Bane's Lab Build Scripts. 43 lines of code and 13 definitions.

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");
};