PrismaP
Prisma2y ago
3 replies
Amruth Pillai

Accessing extended operations on the prisma client with typescript

I'm trying to make some abstract types around the Prisma Client, like so:
import type { Prisma } from "@prisma/client";
import type { Operation as PrismaOperation } from "@prisma/client/runtime/library";

import type { Database } from "@/libs/database";
import type { FilterDollarSignKeys } from "@/utils/types";

export type Model = keyof Database;

export type Operation = FilterDollarSignKeys<PrismaOperation>;

export type Args<M extends Model, O extends Operation> = Prisma.Args<Database[M], O>;

export type Payload<M extends Model, O extends Operation> = Prisma.Payload<Database[M], O>;

export type Result<M extends Model, O extends Operation, A extends Args<M, O>> = Prisma.Result<
  Database[M],
  A,
  O
>;

// Example Usage:
const model: Model = "user";
const operation: Operation = "findMany";
const _args: Args<typeof model, typeof operation> = { select: { id: true } };
const _result: Result<typeof model, typeof operation, { select: { id: true } }> = [{ id: "1" }];


But the issue I'm facing is when I try to access any operation that has been extended on the client. For example, I have this prisma-bark-extension on the Prisma Client. When I use prisma.modelName.operation, I see the additional actions provided by the middleware, but import type { Operation } from "@prisma/client/runtime/library"; does not contain a list of them.

Would anyone have an idea on how I can get the extended list of operations?
Was this page helpful?