types/quality.types.ts
types/quality.types.ts is a file in GovLab Quality. 134 lines of code and 15 definitions.
import type { QualityConcept, QualityConcern, QualityData, QualityRule, QualityTool } from "#types/catalog.types";
import type { Finding } from "#types/finding.types";
import type { ProcessEnv } from "#types/tool.types";
export interface Logger {
warn: (message: string, detail?: unknown) => void;
}
export interface QualityRelationsOptions {
logger?: Logger;
data?: QualityData;
}
export interface QualityQueryFilter {
tool?: string;
ecosystem?: string;
numeric?: boolean;
minValue?: number;
crossTool?: boolean;
hasConfigOptions?: boolean;
}
export interface ResolveResult {
concerns: QualityConcern[];
rules: QualityRule[];
rulesByConcern: Record<string, QualityRule[]>;
values: Record<string, boolean | number>;
knobPerTool: Record<string, Record<string, string>>;
tools: QualityTool[];
}
export interface OntologyIssues {
rulesWithoutConcern: string[];
danglingRuleConcerns: { rule: string; concern: string }[];
concernsWithoutValue: string[];
toolsWithoutEcosystem: string[];
}
export interface QualityRelations {
concern: (id: string) => QualityConcern | null;
concerns: () => QualityConcern[];
rule: (id: string) => QualityRule | null;
rules: () => QualityRule[];
tool: (id: string) => QualityTool | null;
tools: () => QualityTool[];
concept: (id: string) => QualityConcept | null;
concepts: () => QualityConcept[];
ecosystems: () => string[];
rulesOf: (concernId: string) => QualityRule[];
query: (filter?: QualityQueryFilter) => QualityConcern[];
resolve: (concernIds: string[]) => ResolveResult;
validate: () => OntologyIssues;
}
export interface RuleIndices {
byRule: Map<string, QualityRule>;
rulesByConcern: Map<string, QualityRule[]>;
concernTools: Map<string, Set<string>>;
concernEcosystems: Map<string, Set<string>>;
}
export interface Indices extends RuleIndices {
concerns: QualityConcern[];
rules: QualityRule[];
tools: QualityTool[];
concepts: QualityConcept[];
byConceptId: Map<string, QualityConcept>;
byConcern: Map<string, QualityConcern>;
byTool: Map<string, QualityTool>;
}
export type Reporter = "human" | "json";
export interface RunQualityOptions {
root: string;
paths?: string[] | undefined;
ecosystems?: string[] | undefined;
only?: readonly string[] | undefined;
fix: boolean;
reporter: Reporter;
selectableActive?: string[] | undefined;
dryRun?: boolean | undefined;
backup?: boolean | undefined;
env?: ProcessEnv | undefined;
}
export interface QualityOutcome {
report: string;
exitCode: number;
findings: Finding[];
}
export interface DetectedEcosystem {
ecosystem: string;
languageId: string;
}
export type Concern =
| "actions"
| "ansible"
| "clojure"
| "cpp"
| "csharp"
| "dockerfile"
| "duplication"
| "elixir"
| "eslint"
| "format"
| "go"
| "htmlhint"
| "iac"
| "install"
| "java"
| "kotlin"
| "lint"
| "list"
| "lua"
| "oxlint"
| "perl"
| "php"
| "python"
| "r"
| "ruby"
| "rust"
| "scala"
| "shell"
| "solidity"
| "sql"
| "stylelint"
| "swift"
| "unused"
| "yaml";
export interface ConcernSpec {
only?: readonly string[];
ecosystems?: readonly string[];
}
export interface CliArgs {
concern: Concern;
paths: string[];
ecosystems: string[];
fix: boolean;
reporter: Reporter;
dryRun: boolean;
backup: boolean;
auto: boolean;
config: string | null;
}