core/validators/location.validator.ts

core/validators/location.validator.ts is a file in GovLab Docs. 37 lines of code and 6 definitions.

import type { DocLocationDefect, DocLocationInput } from "#types/location.types";
import { boundaryMisplaced, offLocation } from "#configuration/strings/location.strings";
import { docStem, stemParts } from "#core/selectors/metadata.selector";
import { DEFAULT_ROOT_PREFIX } from "#configuration/constants/document.constants";
import { computeLocation } from "#core/resolvers/location.resolver";
import { isBoundaryFilename } from "#core/predicates/document.predicate";
import path from "node:path";

const locationDefects = function locationDefects(input: DocLocationInput, filename: string): DocLocationDefect[] {
    const parts = stemParts(docStem(filename), input.registries.forms[input.form]?.tag);
    const expected = computeLocation({
        concern: input.concern,
        form: input.form,
        ...parts,
        options: input.options,
        registries: input.registries,
    });
    if (!expected.ok) {
        return [{ code: expected.reason, detail: expected.detail }];
    }
    if (expected.path === input.relPath) {
        return [];
    }
    return [{ code: "off-location", detail: offLocation(input.relPath, expected.path), expected: expected.path }];
};

export const docLocation = function docLocation(input: DocLocationInput): DocLocationDefect[] {
    if (input.kind !== "authored") {
        return [];
    }
    const filename = path.posix.basename(input.relPath);
    const rootPrefix = input.options?.rootPrefix ?? DEFAULT_ROOT_PREFIX;
    if (!isBoundaryFilename(filename)) {
        return locationDefects(input, filename);
    }
    return input.relPath.startsWith(rootPrefix)
        ? [{ code: "boundary-misplaced", detail: boundaryMisplaced(filename, rootPrefix) }]
        : [];
};