import { DEFINITION_ANCHOR, FILE_ANCHOR, FOLDER_ANCHOR, TREE_TAB } from "#core/ids/anatomy.ids"; import { EXTENSION_SEPARATOR, FALLBACK_LANGUAGE, LANGUAGE_BY_EXTENSION, LINE_INFIX, } from "#configuration/constants/anatomy.constants"; import { ANATOMY_PAGE } from "#core/ids/page.ids"; import { ROOT_LABEL } from "#configuration/strings/folder.strings"; import { slugOf } from "#domain/converters/ontology.converter"; import { tabLink } from "#assets/link.assets"; export const fileId = function fileId(path: string): string { return FILE_ANCHOR + slugOf(path); }; export const nodeHref = function nodeHref(file: string, line: number | null): string { const suffix = line === null ? "" : LINE_INFIX + String(line); return tabLink(ANATOMY_PAGE, TREE_TAB, fileId(file) + suffix); }; export const folderId = function folderId(path: string): string { return FOLDER_ANCHOR + slugOf(path === "" ? ROOT_LABEL : path); }; export const folderHref = function folderHref(path: string): string { return tabLink(ANATOMY_PAGE, TREE_TAB, folderId(path)); }; export const definitionFragment = function definitionFragment(name: string, file: string | null = null): string { return DEFINITION_ANCHOR + name + (file === null ? "" : LINE_INFIX + file); }; export const definitionHref = function definitionHref(name: string, file: string | null = null): string { return tabLink(ANATOMY_PAGE, TREE_TAB, definitionFragment(name, file)); }; export const sourceLink = function sourceLink(name: string, label: string = name, file: string | null = null): string { return `${label}`; }; export const languageOf = function languageOf(name: string): string { const extension = name.slice(name.lastIndexOf(EXTENSION_SEPARATOR) + 1); return LANGUAGE_BY_EXTENSION.get(extension) ?? FALLBACK_LANGUAGE; };