core/resolvers/rule.resolver.ts

core/resolvers/rule.resolver.ts is a file in GovLab Quality. 28 lines of code and 8 definitions.

import { ruleIdsFor, toolTokensOf } from "#core/selectors/emitter.selector";
import type { ConcernConfig } from "#types/concern.types";
import type { ToolResolution } from "#types/plan.types";
import { concernsToCanonicalConfig } from "#core/converters/concern.converter";
import { loadCanonicalData } from "#core/loaders/canon.loader";
import { loadEmitTokens } from "#core/loaders/emitter.loader";
import { resolveConfig } from "#core/resolvers/plan.resolver";

const activeConcerns = function activeConcerns(resolution: ToolResolution): Set<string> {
    const disabled = new Set(resolution.disabledSurfaces);
    return new Set(
        [...Object.keys(resolution.knobs), ...resolution.enabledIntents].filter((concern) => !disabled.has(concern)),
    );
};

export const enabledRuleIds = function enabledRuleIds(
    concerns: ConcernConfig,
    language: string,
    tool: string,
): string[] {
    const data = loadCanonicalData();
    const plan = resolveConfig({ ...concernsToCanonicalConfig(concerns, data), languages: [language] }, data);
    const resolution = "conflicts" in plan ? undefined : plan.perToolConfig[tool];
    if (!resolution) {
        return [];
    }
    const toolTokens = toolTokensOf(loadEmitTokens(), tool);
    const ruleIds = [...activeConcerns(resolution)].flatMap((concern) => ruleIdsFor(toolTokens, concern));
    return [...new Set(ruleIds)].sort((a, b) => a.localeCompare(b));
};