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) }]
: [];
};