core/loaders/knob.loader.ts
core/loaders/knob.loader.ts is a file in GovLab Quality. 35 lines of code and 8 definitions.
import type { ConceptKnob, KnobConcept } from "#types/canon.types";
import { isRecord, recordAt, stringField } from "#core/selectors/record.selector";
import { absolutePath } from "@ssot/paths";
import { jsonRecord } from "#core/parsers/record.parser";
import { readFileSync } from "node:fs";
const CONCEPT_KNOB_FILE = "knob.concept.data.json";
const toKnob = function toKnob(value: unknown): ConceptKnob {
const record = isRecord(value) ? value : {};
const { fidelity, fixed, knob, provenance, variant } = record;
return {
default: record["default"],
fidelity: typeof fidelity === "string" ? fidelity : null,
knob: typeof knob === "string" ? knob : null,
...(typeof provenance === "string" ? { provenance } : {}),
...(typeof fixed === "boolean" ? { fixed } : {}),
...(typeof variant === "string" ? { variant } : {}),
};
};
const toKnobConcept = function toKnobConcept(value: unknown): KnobConcept {
const record = isRecord(value) ? value : {};
const tools = Object.fromEntries(
Object.entries(recordAt(record, "tools")).map(([tool, knob]) => [tool, toKnob(knob)]),
);
return {
tools,
valueType: stringField(record, "valueType"),
...(record["enum"] === undefined ? {} : { enum: record["enum"] }),
};
};
export const loadKnobConcepts = function loadKnobConcepts(): Record<string, KnobConcept> {
const parsed = jsonRecord(readFileSync(absolutePath("govlab.quality.data", CONCEPT_KNOB_FILE), "utf8"));
return Object.fromEntries(
Object.entries(recordAt(parsed, "concepts")).map(([id, value]) => [id, toKnobConcept(value)]),
);
};