Amruth Pillai
Amruth Pillai
Explore posts from servers
PPrisma
Created by Amruth Pillai on 6/27/2024 in #help-and-questions
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" }];
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?
4 replies