core/loaders/binding.loader.ts
core/loaders/binding.loader.ts is a file in GovLab Quality. 32 lines of code and 11 definitions.
import { readFileSync, readdirSync } from "node:fs";
import type { RuleSource } from "#types/binding.types";
import { absolutePath } from "@ssot/paths";
import { join } from "node:path";
const RULE_FOLDER_KEYS = [
"govlabHost.rules",
"govlab.quality.eslintRules",
"govlab.quality.contextRules",
"govlab.quality.stylelintRules",
];
const RULE_MARKER = "rule";
const SEGMENT_SEPARATOR = ".";
const RULE_FILE_SEGMENTS = 4;
const MARKER_INDEX = 2;
const ruleIdOf = function ruleIdOf(name: string): string | null {
const segments = name.split(SEGMENT_SEPARATOR);
return segments.length === RULE_FILE_SEGMENTS && segments[MARKER_INDEX] === RULE_MARKER
? (segments[0] ?? null)
: null;
};
export const loadRuleSources = function loadRuleSources(): RuleSource[] {
return RULE_FOLDER_KEYS.flatMap((key) => {
const folder = absolutePath(key);
return readdirSync(folder)
.toSorted((a, b) => a.localeCompare(b))
.flatMap((name): RuleSource[] => {
const id = ruleIdOf(name);
const file = join(folder, name);
return id === null ? [] : [{ file, id, text: readFileSync(file, "utf8") }];
});
});
};