types/config.types.ts

types/config.types.ts is a file in GovLab Quality. 186 lines of code and 24 definitions.

import type { ConcernConfig } from "#types/concern.types";
import type { OwnerOverride } from "#types/canon.types";

export interface TypeSystemLayout {
    axes?: {
        variant?: string[];
        size?: string[];
        gap?: string[];
        tone?: string[];
        measure?: string[];
        layout?: string[];
    };
    axisHomes?: { size?: string; gap?: string; tone?: string; measure?: string; layout?: string };
    variants?: string[];
    elementTypes?: string[];
    nativeTags?: string[];
    typesHome?: string;
    utilityPrefix?: string;
    componentPrefix?: string;
    iconPrefixes?: string[];
    layerOrder?: string;
    layerStatementHome?: string;
    tokensFile?: string;
    layerSegments?: { layer: string; needle: string }[];
    appShellAllow?: string[];
    shellAllow?: string[];
    iconSelectors?: string[];
    mobileSuffix?: string;
    variantScaleExempt?: string[];
    semanticColorTokens?: string[];
    focusHome?: string;
    zTokenPrefix?: string;
    varCategories?: { file: string; description: string; prefixes: string[]; contains?: string[] }[];
    tokenParity?: { reference: string; target: string };
}

export interface EslintRelaxScope {
    files: string[];
    relax: string[];
}

export interface EslintRuleExclusion {
    eslintFiles: string[];
    vitePath: string;
    rules: string[];
}

export interface EslintLayout {
    domFactory?: string;
    contentSinks?: string[];
    pages?: string[];
    components?: string[];
    utilitiesPath?: string;
    componentsDir?: string;
    frontendMarkers?: string[];
    backendMarkers?: string[];
    configExemptions?: string[];
    typeSystem?: TypeSystemLayout;
}

export interface EslintScopeConfig {
    scopes?: { backend?: string };
    layout?: EslintLayout;
    ignores?: string[];
    env?: string[];
    globals?: Record<string, string>;
    generated?: EslintRelaxScope;
    tests?: EslintRelaxScope;
    buildScripts?: EslintRelaxScope;
    exclusions?: EslintRuleExclusion[];
    rules?: Record<string, unknown>;
}

export interface HostPathsPolicy {
    roots?: string[];
    source?: string;
    treeFile?: string;
    excluded?: string[];
    packages?: string[];
}

export interface HostEndpointsPolicy {
    migrationAllow?: string[];
    source?: string;
}

export interface HostPolicyConfig {
    moduleLevels?: Record<string, number>;
    testRoots?: { testbase?: string; hostRoot?: string };
    paths?: HostPathsPolicy;
    endpoints?: HostEndpointsPolicy;
}

export interface ContentPolicyConfig {
    aiName?: string;
    allowNamespaces?: string[];
    allowNumberNamespaces?: string[];
    allow?: string[];
}

export interface QualityEngineConfig {
    root?: string;
    eslintConfig?: string;
    stylelintConfig?: string;
}

export interface HarnessDocProfile {
    prefix: string;
    keys: string[];
    requireFrontmatter: boolean;
    requireTitle: boolean;
}

export interface HarnessDocsConfig {
    root: string;
    runtimeRoots?: string[];
    agentDir?: string;
    adapter?: string;
    profiles?: HarnessDocProfile[];
}

export interface DocsConfig {
    ignore?: string[];
    prettierConfig?: string;
    boundaryDocs?: string[];
    members?: string[];
    hostTokens?: string[];
    harness?: HarnessDocsConfig;
}

export interface GainConfig {
    ignore?: string[];
}

export interface QualitySectionConfig {
    concerns?: Record<string, (number | string)[] | boolean | number | string>;
    owners?: Record<string, Record<string, string>>;
    ecosystems?: string[];
    exclude?: string[];
    toolExclude?: Record<string, string[]>;
}

export interface OxlintBlockExclusion {
    file: string;
    rule: string;
    functions: string[];
}

export interface OxlintConfig {
    blockExclusions?: OxlintBlockExclusion[];
    plugins?: string[];
    categories?: Record<string, string>;
    rules?: Record<string, unknown>;
    env?: Record<string, boolean>;
    globals?: Record<string, string>;
    ignorePatterns?: string[];
    reportOnly?: string[];
}

export interface ExtensionsConfig {
    global?: boolean;
}

export interface GovlabConfig {
    [section: string]: unknown;
    extends?: GovlabConfig[];
    eslint?: EslintScopeConfig;
    hostPolicy?: HostPolicyConfig;
    contentPolicy?: ContentPolicyConfig;
    qualityEngine?: QualityEngineConfig;
    docs?: DocsConfig;
    gain?: GainConfig;
    qualityMaster?: QualitySectionConfig;
    extensions?: ExtensionsConfig;
    oxlint?: OxlintConfig;
}

export interface ConfigSection {
    key: string;
    validate: (value: unknown) => string[];
}

export interface ResolvedDocsConfig {
    ignore: string[];
    prettierConfig: string | undefined;
    boundaryDocs: string[];
    members: string[];
    hostTokens: string[];
    harness: HarnessDocsConfig | undefined;
}

export interface ResolvedQualityEngineConfig {
    root: string | undefined;
    eslintConfig: string | undefined;
    stylelintConfig: string | undefined;
}

export interface GovlabEslintSettings {
    scopes: NonNullable<EslintScopeConfig["scopes"]>;
    layout: EslintLayout;
    hostPolicy: HostPolicyConfig;
    contentPolicy: ContentPolicyConfig;
    exclude: string[];
}

export interface EmitInputs {
    concerns: ConcernConfig;
    config: GovlabConfig;
    owners: OwnerOverride | undefined;
}