@casl/prisma
Version:
Allows to query accessible records using Prisma client based on CASL rules
20 lines (19 loc) • 943 B
TypeScript
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 {};