core/loaders/tree.loader.ts

core/loaders/tree.loader.ts is a file in Bane's Lab Site. 30 lines of code and 9 definitions.

import { ANATOMY_CONTAINER_ICON } from "#configuration/icons/anatomy.icons";
import { ANATOMY_TREE_DECLARATIONS } from "#core/registries/anatomy.tree.registry";
import { TREE_TAB_STEM } from "#configuration/constants/anatomy.constants";
import type { Tab } from "#types/document.types";

interface TreeTabModule {
    readonly ANATOMY_TREE_TAB: readonly Tab[];
}

const TREE_TAB_MODULES = import.meta.glob<TreeTabModule>("../generated/anatomy.page.*.generated.ts");

const moduleKeyOf = function moduleKeyOf(tab: string): string {
    return `../generated/${TREE_TAB_STEM}${tab}.generated.ts`;
};

export const TREE_TAB_HEADS: readonly Tab[] = ANATOMY_TREE_DECLARATIONS.map((declaration) => ({
    icon: ANATOMY_CONTAINER_ICON,
    id: declaration.tab,
    label: declaration.label,
    layout: "tree",
    sections: [],
}));

export const loadTreeTab = async function loadTreeTab(tab: string): Promise<Tab | undefined> {
    const load = TREE_TAB_MODULES[moduleKeyOf(tab)];
    if (load === undefined) {
        return undefined;
    }
    const [loaded] = (await load()).ANATOMY_TREE_TAB;
    return loaded;
};

export const loadTreeTabs = async function loadTreeTabs(): Promise<readonly Tab[]> {
    const tabs = await Promise.all(TREE_TAB_HEADS.map(async (head) => loadTreeTab(head.id)));
    return tabs.flatMap((tab) => (tab === undefined ? [] : [tab]));
};