import { z } from "zod"; export const severitySchema = z.enum(["critical", "serious", "moderate", "minor"]); export type Severity = z.infer; export const severityLevelSchema = z.enum(["error", "warn"]); export type SeverityLevel = z.infer; export const legacySeverityLevelSchema = z.enum(["error", "warn", "info", "warning"]); export type LegacySeverityLevel = z.infer; export const SEVERITIES = severitySchema.options; export const SEVERITY_WEIGHTS: Record = { critical: 10, serious: 5, moderate: 2, minor: 1, }; export const SEVERITY_RANK: Record = { critical: 4, serious: 3, moderate: 2, minor: 1, }; export function severityLevel(severity: Severity): SeverityLevel { return severity === "critical" || severity === "serious" ? "error" : "warn"; } export function severityFromLevel(level: LegacySeverityLevel): Severity { switch (level) { case "error": return "serious"; case "warn": case "warning": return "moderate"; case "info": return "minor"; } } export function compareSeverity(a: Severity, b: Severity): number { return SEVERITY_RANK[b] - SEVERITY_RANK[a]; } export function maxSeverity(a: Severity, b: Severity): Severity { return SEVERITY_RANK[a] >= SEVERITY_RANK[b] ? a : b; } export function sortBySeverity(items: readonly T[], getSeverity: (item: T) => Severity): T[] { return items.slice().sort((a, b) => compareSeverity(getSeverity(a), getSeverity(b))); }