ktx/packages/context/src/sl/descriptions.ts
2026-05-10 23:12:26 +02:00

34 lines
1,019 B
TypeScript

const DESCRIPTION_SOURCES = ['user', 'ai', 'dbt', 'db'] as const;
type DescriptionSource = (typeof DESCRIPTION_SOURCES)[number];
type DescriptionSources = Record<string, string>;
interface DescriptionResolutionConfig {
priority: string[];
}
export const DEFAULT_PRIORITY: DescriptionSource[] = [...DESCRIPTION_SOURCES];
/**
* Resolves which description to surface based on a priority list.
* Returns the first non-empty description matching a priority key,
* falling back to the first available value for unknown sources.
*/
export function resolveDescription(
descriptions: DescriptionSources | undefined,
config: DescriptionResolutionConfig,
): string | null {
if (!descriptions || Object.keys(descriptions).length === 0) {
return null;
}
for (const source of config.priority) {
const text = descriptions[source];
if (text) {
return text;
}
}
// Fallback: first available value (for unknown future sources)
return Object.values(descriptions).find(Boolean) ?? null;
}