core/resolvers/source.resolver.ts

core/resolvers/source.resolver.ts is a file in GovLab Docs. 31 lines of code and 8 definitions.

import { relative, resolve } from "node:path";
import { ROOT } from "@ssot/paths";
import { existsSync } from "node:fs";
import { isRelativeTarget } from "#core/predicates/reference.predicate";

const PARENT_PREFIX = "..";

const posix = function posix(file: string): string {
    return file.split("\\").join("/");
};

export const relFromModules = function relFromModules(file: string): string {
    const rel = relative(ROOT, file);
    return rel.startsWith(PARENT_PREFIX) ? posix(file) : posix(rel);
};

export const resolveTargetFile = function resolveTargetFile(
    file: string,
    moduleDir: string,
    consumerRoot: string,
): string | null {
    if (isRelativeTarget(file)) {
        const rel = resolve(moduleDir, file);
        return existsSync(rel) ? rel : null;
    }
    const fromRoot = resolve(consumerRoot, file);
    if (existsSync(fromRoot)) {
        return fromRoot;
    }
    const fromModule = resolve(moduleDir, file);
    return existsSync(fromModule) ? fromModule : null;
};

export const targetExists = function targetExists(target: string, moduleDir: string, consumerRoot: string): boolean {
    return resolveTargetFile(target, moduleDir, consumerRoot) !== null;
};