import { Expression, ExpressionBuilder, ExpressionWrapper, Nullable, Selectable, Simplify, sql } from 'kysely'; export const asUuid = (id: string | Expression) => sql`${id}::uuid`; export const anyUuid = (ids: string[]) => sql`any(${`{${ids}}`}::uuid[])`; export const asVector = (embedding: number[]) => sql`${`[${embedding}]`}::vector`; export const unnest = (array: string[]) => sql>`unnest(array[${sql.join(array)}]::text[])`; export const removeUndefinedKeys = (update: T, template: unknown) => { for (const key in update) { if ((template as T)[key] === undefined) { delete update[key]; } } return update; }; /** Modifies toJson return type to not set all properties as nullable */ export function toJson>( eb: ExpressionBuilder, table: T, ) { return eb.fn.toJson(table) as ExpressionWrapper< DB, TB, Simplify< T extends TB ? Selectable extends Nullable ? N | null : Selectable : T extends Expression ? O extends Nullable ? N | null : O : never > >; }