mirror of
https://github.com/Kaelio/ktx.git
synced 2026-06-10 08:05:14 +02:00
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
export interface KtxColumnEmbeddingForeignKeys {
|
|
outgoing: Array<{ toTable: string; toColumn: string }>;
|
|
incoming: Array<{ fromTable: string; fromColumn: string }>;
|
|
}
|
|
|
|
export interface KtxColumnEmbeddingTextInput {
|
|
tableName: string;
|
|
columnName: string;
|
|
columnType: string;
|
|
resolvedDescription: string | null;
|
|
sampleValues?: readonly string[] | null;
|
|
resolvedTableDescription?: string | null;
|
|
foreignKeys?: KtxColumnEmbeddingForeignKeys | null;
|
|
maxSampleValues?: number;
|
|
}
|
|
|
|
export function buildKtxColumnEmbeddingText(input: KtxColumnEmbeddingTextInput): string {
|
|
const parts: string[] = [];
|
|
|
|
parts.push(`${input.tableName}.${input.columnName} (${input.columnType})`);
|
|
|
|
if (input.resolvedTableDescription) {
|
|
parts.push(`Table: ${input.resolvedTableDescription}`);
|
|
}
|
|
|
|
if (input.resolvedDescription) {
|
|
parts.push(input.resolvedDescription);
|
|
}
|
|
|
|
if (input.foreignKeys) {
|
|
for (const fk of input.foreignKeys.outgoing) {
|
|
parts.push(`FK -> ${fk.toTable}.${fk.toColumn}`);
|
|
}
|
|
for (const fk of input.foreignKeys.incoming) {
|
|
parts.push(`FK <- ${fk.fromTable}.${fk.fromColumn}`);
|
|
}
|
|
}
|
|
|
|
if (input.sampleValues && input.sampleValues.length > 0) {
|
|
const maxSampleValues = input.maxSampleValues ?? 20;
|
|
parts.push(`Values: ${input.sampleValues.slice(0, maxSampleValues).join(', ')}`);
|
|
}
|
|
|
|
return parts.join('. ');
|
|
}
|