UNPKG

@casl/prisma

Version:

Allows to query accessible records using Prisma client based on CASL rules

20 lines (19 loc) 943 B
import type { Prisma, PrismaClient } from '@prisma/client'; import type { hkt } from '@casl/ability'; import type { ExtractModelName, Model } from './prisma/prismaQuery'; export type ModelName = Prisma.ModelName; type ModelWhereInput = { [K in Prisma.ModelName]: Uncapitalize<K> extends keyof PrismaClient ? Extract<Parameters<PrismaClient[Uncapitalize<K>]['findFirst']>[0], { where?: any; }>['where'] : never; }; export type WhereInput<TModelName extends Prisma.ModelName> = Extract<ModelWhereInput[TModelName], Record<any, any>>; interface PrismaQueryTypeFactory extends hkt.GenericFactory { produce: WhereInput<ExtractModelName<this[0], ModelName>>; } type PrismaModel = Model<Record<string, any>, string>; export type PrismaQuery<T = PrismaModel> = WhereInput<ExtractModelName<T, ModelName>> & hkt.Container<PrismaQueryTypeFactory>; export type WhereInputPerModel = { [K in ModelName]: WhereInput<K>; }; export {};