index.ts•1.77 kB
import { Prisma, PrismaClient } from '@prisma/client'
export const extension = Prisma.defineExtension((client) => {
  return client.$extends({
    model: {
      $allModels: {
        someOperation<T, A>(this: T, _: Prisma.Exact<A, Prisma.Args<T, 'findMany'>>) {
          // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
          return {} as Prisma.Result<T, A, 'findMany'> & { prop: string }
        },
      },
    },
  })
})
export const xprismaViaDefinedExt = new PrismaClient().$extends(extension)
export const xprismaViaInlineExt = new PrismaClient().$extends({
  model: {
    $allModels: {
      someOperation<T, A>(this: T, _: Prisma.Exact<A, Prisma.Args<T, 'findMany'>>) {
        // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
        return {} as Prisma.Result<T, A, 'findMany'> & { prop: string }
      },
    },
  },
})
export class SomeClassWrapper {
  // eg. NestJS
  constructor(private readonly prismaService: PrismaClient) {}
  findMany<T extends Prisma.ModelAFindManyArgs>(findManyDto: Prisma.SelectSubset<T, Prisma.ModelAFindManyArgs>) {
    return this.prismaService.modelA.findMany(findManyDto)
  }
  findFirst(findFirstDto: Prisma.ModelAFindFirstArgs) {
    return this.prismaService.modelA.findFirst(findFirstDto)
  }
  create(createDto: Prisma.ModelACreateArgs) {
    this.prismaService.modelA.create(createDto)
  }
  update(updateDto: Prisma.ModelAUpdateArgs) {
    this.prismaService.modelA.update(updateDto)
  }
  delete(deleteDto: Prisma.ModelADeleteArgs) {
    this.prismaService.modelA.delete(deleteDto)
  }
}
export function someFunction(data: Prisma.Args<typeof xprismaViaInlineExt.modelA, 'create'>['data']) {
  return xprismaViaInlineExt.modelA.create({ data })
}