UNPKG

prisma-rls

Version:

Prisma client extension for row-level security on any database

273 lines (272 loc) 9.86 kB
import type { BaseDMMF, DMMF } from "@prisma/client/runtime/library"; export type PrismaTypeMap = { model: Record<string, { operations: { findMany: { args: { where?: Record<string, any>; }; }; }; }>; }; export type PrismaModelName<TypeMap extends PrismaTypeMap> = keyof TypeMap["model"]; export type PrismaModelWhere<TypeMap extends PrismaTypeMap, ModelName extends PrismaModelName<TypeMap>> = NonNullable<TypeMap["model"][ModelName]["operations"]["findMany"]["args"]["where"]>; export type PrismaModelWhereResolver<TypeMap extends PrismaTypeMap, ModelName extends PrismaModelName<TypeMap>, Context extends unknown> = (context: Context) => PrismaModelWhere<TypeMap, ModelName> | Promise<PrismaModelWhere<TypeMap, ModelName>>; export type PermissionDefinition<TypeMap extends PrismaTypeMap, ModelName extends PrismaModelName<TypeMap>, Context extends unknown> = boolean | PrismaModelWhere<TypeMap, ModelName> | PrismaModelWhereResolver<TypeMap, ModelName, Context>; export type ModelPermissionsConfig<TypeMap extends PrismaTypeMap, ModelName extends PrismaModelName<TypeMap>, Context extends unknown> = { read: PermissionDefinition<TypeMap, ModelName, Context>; create: boolean; update: PermissionDefinition<TypeMap, ModelName, Context>; delete: PermissionDefinition<TypeMap, ModelName, Context>; }; export type PermissionsConfig<TypeMap extends PrismaTypeMap, Context extends unknown> = { [ModelName in PrismaModelName<TypeMap>]: ModelPermissionsConfig<TypeMap, ModelName, Context>; }; export type ExtensionOptions = { dmmf: BaseDMMF; permissionsConfig: PermissionsConfig<PrismaTypeMap, unknown>; context: unknown; authorizationError?: Error; checkRequiredBelongsTo?: boolean; }; export type AllOperationsArgs = { model: PrismaModelName<PrismaTypeMap>; } & ({ operation: "findUnique"; args: ModelFindUniqueArgs; query: (args: ModelFindUniqueArgs) => Promise<unknown>; } | { operation: "findUniqueOrThrow"; args: ModelFindUniqueOrThrowArgs; query: (args: ModelFindUniqueOrThrowArgs) => Promise<unknown>; } | { operation: "findFirst"; args: ModelFindFirstArgs; query: (args: ModelFindFirstArgs) => Promise<unknown>; } | { operation: "findFirstOrThrow"; args: ModelFindFirstOrThrowArgs; query: (args: ModelFindFirstOrThrowArgs) => Promise<unknown>; } | { operation: "findMany"; args: ModelFindManyArgs; query: (args: ModelFindManyArgs) => Promise<unknown>; } | { operation: "aggregate"; args: ModelAggregateArgs; query: (args: ModelAggregateArgs) => Promise<unknown>; } | { operation: "count"; args: ModelCountArgs; query: (args: ModelCountArgs) => Promise<unknown>; } | { operation: "groupBy"; args: ModelGroupByArgs; query: (args: ModelGroupByArgs) => Promise<unknown>; } | { operation: "create"; args: ModelCreateArgs; query: (args: ModelCreateArgs) => Promise<unknown>; } | { operation: "createMany"; args: ModelCreateManyArgs; query: (args: ModelCreateManyArgs) => Promise<unknown>; } | { operation: "update"; args: ModelUpdateArgs; query: (args: ModelUpdateArgs) => Promise<unknown>; } | { operation: "updateMany"; args: ModelUpdateManyArgs; query: (args: ModelUpdateManyArgs) => Promise<unknown>; } | { operation: "upsert"; args: ModelUpsertArgs; query: (args: ModelUpsertArgs) => Promise<unknown>; } | { operation: "delete"; args: ModelDeleteArgs; query: (args: ModelDeleteArgs) => Promise<unknown>; } | { operation: "deleteMany"; args: ModelDeleteManyArgs; query: (args: ModelDeleteManyArgs) => Promise<unknown>; } | { operation: ""; args: Record<string, unknown>; query: (args: Record<string, any>) => Promise<unknown>; }); export type FieldsMap = Record<string, Record<string, DMMF.Field>>; export type RelationMetadata = { type: "requiredBelongsTo"; path: string; modelName: PrismaModelName<PrismaTypeMap>; }; export type RecursiveContext = { path: string; }; export type ModelWhereInput = Record<string, unknown>; export type ModelWhereUniqueInput = Record<string, unknown>; export type ModelSelectInput = Record<string, boolean | ModelSelectNestedInput | ModelSelectNestedRequiredInput> & { _count?: boolean | ModelSelectNestedCountInput; }; export type ModelSelectNestedInput = { select?: ModelSelectInput | null; include?: ModelSelectInput | null; where?: ModelWhereInput; }; export type ModelSelectNestedRequiredInput = { select?: ModelSelectInput | null; include?: ModelSelectInput | null; }; export type ModelSelectNestedCountInput = { select?: Record<string, boolean | { where?: ModelWhereInput; }> | null; }; export type ModelCreateInput = Record<string, unknown | ModelCreateNestedOneInput | ModelCreateNestedManyInput>; export type ModelCreateNestedOneInput = { create?: ModelCreateInput; connectOrCreate?: ModelConnectOrCreateInput; connect?: ModelWhereUniqueInput; }; export type ModelCreateNestedManyInput = { create?: ModelCreateInput | ModelCreateInput[]; createMany?: ModelCreateManyInputEnvelope; connectOrCreate?: ModelConnectOrCreateInput | ModelConnectOrCreateInput[]; connect?: ModelWhereUniqueInput | ModelWhereUniqueInput[]; }; export type ModelConnectOrCreateInput = { create: ModelCreateInput; where: ModelWhereUniqueInput; }; export type ModelCreateManyInput = Record<string, unknown>; export type ModelCreateManyInputEnvelope = { data: ModelCreateManyInput | ModelCreateManyInput[]; skipDuplicates?: boolean; }; export type ModelUpdateInput = Record<string, unknown | ModelUpdateNestedOneInput | ModelUpdateNestedOneRequiredInput | ModelUpdateNestedManyInput>; export type ModelUpdateNestedOneInput = { create?: ModelCreateInput; connectOrCreate?: ModelConnectOrCreateInput; connect?: ModelWhereUniqueInput; disconnect?: boolean | ModelWhereInput; update?: ModelUpdateOneWithWhereInput; upsert?: ModelUpsertInput; delete?: boolean | ModelWhereInput; }; export type ModelUpdateNestedOneRequiredInput = { create?: ModelCreateInput; connectOrCreate?: ModelConnectOrCreateInput; connect?: ModelWhereUniqueInput; update?: ModelUpdateInput | ModelUpdateOneWithWhereInput; upsert?: ModelUpsertInput; }; export type ModelUpdateNestedManyInput = { create?: ModelCreateInput | ModelCreateInput[]; createMany?: ModelCreateManyInputEnvelope; connectOrCreate?: ModelConnectOrCreateInput | ModelConnectOrCreateInput[]; set?: ModelWhereUniqueInput | ModelWhereUniqueInput[]; connect?: ModelWhereUniqueInput | ModelWhereUniqueInput[]; disconnect?: ModelWhereUniqueInput | ModelWhereUniqueInput[]; update?: ModelUpdateWithWhereUniqueInput | ModelUpdateWithWhereUniqueInput[]; updateMany?: ModelUpdateManyWithWhereInput | ModelUpdateManyWithWhereInput[]; upsert?: ModelUpsertWithWhereUniqueInput | ModelUpsertWithWhereUniqueInput[]; delete?: ModelWhereUniqueInput | ModelWhereUniqueInput[]; deleteMany?: ModelWhereInput | ModelWhereInput[]; }; export type ModelUpdateOneWithWhereInput = { data: ModelUpdateInput; where?: ModelWhereInput; }; export type ModelUpdateWithWhereUniqueInput = { data: ModelUpdateInput; where: ModelWhereUniqueInput; }; export type ModelUpdateManyInput = Record<string, unknown>; export type ModelUpdateManyWithWhereInput = { data: ModelUpdateManyInput; where: ModelWhereInput; }; export type ModelUpsertInput = { create: ModelCreateInput; update: ModelUpdateInput; where?: ModelWhereInput; }; export type ModelUpsertWithWhereUniqueInput = { create: ModelCreateInput; update: ModelUpdateInput; where: ModelWhereUniqueInput; }; export type ModelFindUniqueArgs = { select?: ModelSelectInput | null; include?: ModelSelectInput | null; where: ModelWhereUniqueInput; }; export type ModelFindUniqueOrThrowArgs = { select?: ModelSelectInput | null; include?: ModelSelectInput | null; where: ModelWhereUniqueInput; }; export type ModelFindFirstArgs = { select?: ModelSelectInput | null; include?: ModelSelectInput | null; where?: ModelWhereInput; }; export type ModelFindFirstOrThrowArgs = { select?: ModelSelectInput | null; include?: ModelSelectInput | null; where?: ModelWhereInput; }; export type ModelFindManyArgs = { select?: ModelSelectInput | null; include?: ModelSelectInput | null; where?: ModelWhereInput; }; export type ModelAggregateArgs = { where?: ModelWhereInput; }; export type ModelCountArgs = { where?: ModelWhereInput; }; export type ModelGroupByArgs = { where?: ModelWhereInput; }; export type ModelCreateArgs = { select?: ModelSelectInput | null; include?: ModelSelectInput | null; data: ModelCreateInput; }; export type ModelCreateManyArgs = { data: ModelCreateManyInput | ModelCreateManyInput[]; skipDuplicates?: boolean; }; export type ModelUpdateArgs = { select?: ModelSelectInput | null; include?: ModelSelectInput | null; data: ModelUpdateInput; where: ModelWhereUniqueInput; }; export type ModelUpdateManyArgs = { data: ModelUpdateManyInput; where?: ModelWhereInput; }; export type ModelUpsertArgs = { select?: ModelSelectInput | null; include?: ModelSelectInput | null; create: ModelCreateInput; update: ModelUpdateInput; where: ModelWhereUniqueInput; }; export type ModelDeleteArgs = { select?: ModelSelectInput | null; include?: ModelSelectInput | null; where: ModelWhereUniqueInput; }; export type ModelDeleteManyArgs = { where?: ModelWhereInput; }; export type ObjectEntry<Object> = NonNullable<{ [Key in keyof Object]: [Key, Object[Key]]; }[keyof Object]>;