core/converters/folder.converter.ts

core/converters/folder.converter.ts is a file in Bane's Lab Site. 36 lines of code and 11 definitions.

import { LINE_INFIX, PATH_SEPARATOR, TREE_MARK } from "#configuration/constants/anatomy.constants";
import { ANCHOR_PREFIX } from "#configuration/constants/document.constants";
import type { NodeTarget } from "#types/folder.types";
import { TREE_TAB } from "#core/ids/anatomy.ids";

export const targetOf = function targetOf(href: string): NodeTarget | null {
    const cut = href.lastIndexOf(ANCHOR_PREFIX);
    if (cut === -1) {
        return null;
    }
    const fragment = href.slice(cut + ANCHOR_PREFIX.length);
    const mark = fragment.indexOf(LINE_INFIX);
    if (mark === -1) {
        return { id: fragment, line: null, text: null };
    }
    const tail = fragment.slice(mark + LINE_INFIX.length);
    const line = Number(tail);
    return Number.isInteger(line)
        ? { id: fragment.slice(0, mark), line, text: null }
        : { id: fragment.slice(0, mark), line: null, text: tail };
};

export const qualifiedPath = function qualifiedPath(tree: string, path: string): string {
    return tree === TREE_TAB ? path : tree + TREE_MARK + path;
};

export const treeOf = function treeOf(path: string): string {
    const cut = path.indexOf(TREE_MARK);
    return cut === -1 ? TREE_TAB : path.slice(0, cut);
};

export const localPath = function localPath(path: string): string {
    const cut = path.indexOf(TREE_MARK);
    return cut === -1 ? path : path.slice(cut + TREE_MARK.length);
};

export const parentPath = function parentPath(path: string): string {
    const local = localPath(path);
    const cut = local.lastIndexOf(PATH_SEPARATOR);
    return qualifiedPath(treeOf(path), cut === -1 ? "" : local.slice(0, cut));
};