domain/converters/source.link.converter.ts
domain/converters/source.link.converter.ts is a file in Bane's Lab Site. 30 lines of code and 5 definitions.
import { DEFINITION_ANCHOR, TREE_TAB } from "#core/ids/anatomy.ids";
import { ANATOMY_PAGE } from "#core/ids/page.ids";
import type { DefinitionBlock } from "#types/block.types";
import { LINE_INFIX } from "#configuration/constants/anatomy.constants";
import { anchorMarkup } from "#core/formatters/link.formatter";
import { citedDefinition } from "#core/loaders/definition.loader";
import { nodeHref } from "#domain/converters/source.converter";
import { tabLink } from "#core/assets/link.assets";
import { treeOf } from "#core/converters/folder.converter";
const definitionFragment = function definitionFragment(name: string, file: string | null): string {
return DEFINITION_ANCHOR + name + (file === null ? "" : LINE_INFIX + file);
};
export const definitionHref = function definitionHref(name: string, file: string | null = null): string {
const cited = citedDefinition(name, file);
if (cited !== null) {
return nodeHref(cited.file, cited.line);
}
return tabLink(ANATOMY_PAGE, file === null ? TREE_TAB : treeOf(file), definitionFragment(name, file));
};
export const sourceLink = function sourceLink(name: string, label: string = name, file: string | null = null): string {
return anchorMarkup(definitionHref(name, file), label);
};
export const definitionBlock = function definitionBlock(
name: string,
title: string,
file: string | null = null,
): DefinitionBlock {
const cited = citedDefinition(name, file);
return { file: cited?.file ?? file, kind: "definition", line: cited?.line ?? null, name, title };
};