core/steps/canon.step.ts
core/steps/canon.step.ts is a file in GovLab Quality. 79 lines of code and 16 definitions.
import {
CONCEPT_SURFACE,
DEFAULT_PROVENANCE,
FIDELITY_LEVELS,
FORMAT_DIMENSION,
LAYOUT_SURFACE,
OWNED_BY_VALUE_SETTINGS,
TOGGLE_VALUE_TYPE,
} from "#configuration/constants/canon.constants";
import type { CanonicalSettingRecord, Fidelity, MappingConcept, MappingEntry, MappingRow } from "#types/canon.types";
import type { EmitTokens } from "#types/emitter.types";
import { absolutePath } from "@ssot/paths";
import { defineStep } from "#core/registries/step.registry";
import { loadKnobConcepts } from "#core/loaders/knob.loader";
import { mappingConcepts } from "#core/converters/canon.concept.converter";
const SETTINGS_FILE = "canonical-settings.generated.json";
const ROWS_FILE = "mapping-rows.generated.json";
const TOKENS_FILE = "emit-tokens.generated.json";
const APPROX = "approx";
const FLOOR_FIDELITY = "advisory";
const isFidelity = function isFidelity(value: string | null): value is Fidelity {
return value !== null && FIDELITY_LEVELS.has(value);
};
const normalizeFidelity = function normalizeFidelity(value: string | null): Fidelity {
if (value === APPROX) {
return "approximate";
}
return isFidelity(value) ? value : FLOOR_FIDELITY;
};
const surfaceOf = function surfaceOf(id: string, dimension: string): string {
return dimension === FORMAT_DIMENSION ? LAYOUT_SURFACE : (CONCEPT_SURFACE.get(id) ?? id);
};
const settingOf = function settingOf(id: string, concept: MappingConcept): CanonicalSettingRecord {
return {
default: null,
dimension: concept.dimension,
id,
kind: concept.valueType === TOGGLE_VALUE_TYPE ? "rule-intent" : "value",
surface: surfaceOf(id, concept.dimension),
valueType: concept.valueType,
};
};
const rowOf = function rowOf(id: string, entry: MappingEntry): MappingRow {
return {
canonicalId: id,
default: entry.default ?? null,
fidelity: normalizeFidelity(entry.fidelity),
fixed: entry.fixed ?? false,
knob: entry.knob,
langs: Array.isArray(entry.lang) ? entry.lang : [entry.lang],
provenance: { source: entry.provenance ?? DEFAULT_PROVENANCE, toolVersion: "" },
ruleCount: entry.ruleCount,
tool: entry.tool,
verified: entry.verified,
};
};
defineStep({
gives: [],
name: "canon",
needs: ["catalog", "concepts"],
run: async (state, writer) => {
const mapping = mappingConcepts(state.catalog ?? [], state.concepts ?? [], loadKnobConcepts());
const owned = [...mapping].filter(([id]) => !OWNED_BY_VALUE_SETTINGS.has(id));
const settings = owned.map(([id, concept]) => settingOf(id, concept));
const rows = owned.flatMap(([id, concept]) => concept.entries.map((entry) => rowOf(id, entry)));
const tokens: EmitTokens = {};
for (const [id, concept] of owned) {
for (const entry of concept.entries) {
const perTool = tokens[entry.tool] ?? {};
perTool[id] = { knob: entry.knob, ruleIds: entry.ruleIds };
tokens[entry.tool] = perTool;
}
}
await writer.json(absolutePath("govlab.quality.generated", SETTINGS_FILE), { settings });
await writer.json(absolutePath("govlab.quality.generated", ROWS_FILE), { rows });
await writer.json(absolutePath("govlab.quality.generated", TOKENS_FILE), { tokens });
return {};
},
});