configuration/constants/architecture.constants.ts
configuration/constants/architecture.constants.ts is a file in GovLab Context. 46 lines of code and 16 definitions.
import type { EdgeRelation, RepairField, SeverityLevel } from "#types/architecture.types";
import { KIND_DECISION_ORDER } from "#configuration/constants/kind.constants";
import type { VocabularyEntry } from "#types/vocabulary.types";
export const SEVERITY_TAXONOMY = [
{ definition: "A principle that applies to every system within its scope.", value: "mandatory" },
{ definition: "A principle that applies by default and gives way to a stated reason.", value: "recommended" },
{
definition:
"A principle that applies only to the systems its Mandatory for field names, such as distributed systems.",
value: "contextual",
},
{ definition: "A design that is avoided unless a stated need calls for it.", value: "discouraged" },
] as const satisfies readonly VocabularyEntry[];
export const SEVERITY_LEVEL_VALUES: readonly SeverityLevel[] = SEVERITY_TAXONOMY.map((entry) => entry.value);
export const SEVERITY_LEVELS: ReadonlySet<string> = new Set(SEVERITY_LEVEL_VALUES);
export const CONDITIONAL_SEVERITY: SeverityLevel = "contextual";
export const EDGE_RELATIONS: readonly EdgeRelation[] = [
"requires",
"reinforces",
"enables",
"conflicts_with",
"tensions_with",
];
export const NEGATIVE_KIND = "anti-pattern";
const NON_NEGATIVE: ReadonlySet<string> = new Set(KIND_DECISION_ORDER.filter((kind) => kind !== NEGATIVE_KIND));
const NEGATIVE_ONLY: ReadonlySet<string> = new Set([NEGATIVE_KIND]);
export const RELATION_RANGES: Record<EdgeRelation, ReadonlySet<string>> = {
conflicts_with: NEGATIVE_ONLY,
enables: NON_NEGATIVE,
reinforces: NON_NEGATIVE,
requires: NON_NEGATIVE,
tensions_with: NON_NEGATIVE,
};
export const REPAIR_RANGES: Record<RepairField, ReadonlySet<string>> = {
refactored_by: new Set(["technique", "pattern", "mechanism", "activity", "approach", "style", "model", "artifact"]),
violated_by: NEGATIVE_ONLY,
};
export const REPAIR_FIELDS: readonly RepairField[] = ["refactored_by", "violated_by"];
export const EDGE_FIELDS: readonly { field: EdgeRelation; relation: string }[] = EDGE_RELATIONS.map((field) => ({
field,
relation: field,
}));
export const ARCH_SUBJECT = "arch";
export const PRINCIPLE_TYPE = "principle";
export const LABEL_EDGE_PREFIX = "label:";
export const ID_EDGE_PREFIX = "id:";