core/loaders/detector.loader.ts
core/loaders/detector.loader.ts is a file in Secrets. 28 lines of code and 6 definitions.
import { DETECTOR_KINDS, DETECTOR_SUFFIX } from "#configuration/constants/detector.constants";
import type { Detector } from "#types/detector.types";
import { absolutePath } from "@ssot/paths";
import { join } from "node:path";
import { missingDetectors } from "#configuration/strings/detector.strings";
import { pathToFileURL } from "node:url";
import { readdirSync } from "node:fs";
import { registeredDetectors } from "#core/registries/detector.registry";
export const loadDetectors = async function loadDetectors(): Promise<readonly Detector[]> {
const folder = absolutePath("project.secrets.detectors");
const files = readdirSync(folder)
.filter((name) => name.endsWith(DETECTOR_SUFFIX))
.toSorted((left, right) => left.localeCompare(right));
await Promise.all(
files.map(async (name) => {
await import(pathToFileURL(join(folder, name)).href);
}),
);
const detectors = registeredDetectors();
const missing = DETECTOR_KINDS.filter((kind) => !detectors.some((detector) => detector.kind === kind));
if (missing.length > 0) {
throw new Error(missingDetectors(missing));
}
return detectors;
};
export const detectedKinds = function detectedKinds(value: string, detectors: readonly Detector[]): readonly string[] {
return detectors.filter((detector) => detector.detects(value)).map((detector) => detector.kind);
};