import { enabledRuleIds } from "#core/resolvers/rule.resolver"; import { generateNativeConfigs } from "#core/coordinators/emitter.coordinator"; import { loadEmitInputs } from "#core/loaders/concern.loader"; import { loadGovlabConfig } from "#core/loaders/config.loader"; import { sectionOf } from "#core/selectors/config.selector"; import { selectableTools } from "#core/loaders/dependency.loader"; import { stringField } from "#core/selectors/record.selector"; export const toolSection = async function toolSection(root: string, key: string): Promise> { return sectionOf(await loadGovlabConfig(root), key); }; export const toolSetting = async function toolSetting( root: string, key: string, defaults: Readonly>, ): Promise> { const section = await toolSection(root, key); const resolved: Partial> = {}; for (const field of Object.keys(defaults).filter((name): name is Field => name in defaults)) { resolved[field] = stringField(section, field, defaults[field]); } return { ...defaults, ...resolved }; }; export const nativeToolConfig = async function nativeToolConfig( root: string, language: string, fileName: string, ): Promise { const { concerns, owners } = await loadEmitInputs(root); const files = await generateNativeConfigs(concerns, [language], owners); const file = files.find((entry) => entry.path.endsWith(fileName)); return file?.content ?? ""; }; export const enabledToolRules = async function enabledToolRules( root: string, language: string, tool: string, ): Promise { const { concerns } = await loadEmitInputs(root); return enabledRuleIds(concerns, language, tool); }; export const resolveActiveSelectable = async function resolveActiveSelectable(root: string): Promise { const owners = (await loadGovlabConfig(root)).qualityMaster?.owners ?? {}; const selectable = selectableTools(); const elected = Object.values(owners).flatMap((languages) => Object.values(languages)); return [...new Set(elected.filter((tool) => selectable.has(tool)))]; }; export const resolveActiveEcosystems = async function resolveActiveEcosystems(root: string): Promise { const ecosystems = (await loadGovlabConfig(root)).qualityMaster?.ecosystems; return ecosystems && ecosystems.length > 0 ? ecosystems : null; };