mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
27 lines
715 B
TypeScript
27 lines
715 B
TypeScript
import { type SQL, type Subquery, sql } from "drizzle-orm";
|
|
import type { SelectResultField } from "drizzle-orm/query-builders/select.types";
|
|
|
|
export const buildRelations = <
|
|
R extends string,
|
|
P extends object,
|
|
Rel extends Record<R, (params: P) => Subquery>,
|
|
>(
|
|
enabled: R[],
|
|
relations: Rel,
|
|
params?: P,
|
|
) => {
|
|
// we wrap that in a sql`` instead of using the builder because of this issue
|
|
// https://github.com/drizzle-team/drizzle-orm/pull/1674
|
|
return Object.fromEntries(
|
|
enabled.map((x) => [x, sql`${relations[x](params!)}`]),
|
|
) as {
|
|
[P in R]?: SQL<
|
|
ReturnType<Rel[P]>["_"]["selectedFields"] extends {
|
|
[key: string]: infer TValue;
|
|
}
|
|
? SelectResultField<TValue>
|
|
: never
|
|
>;
|
|
};
|
|
};
|