From c01004b4703330a7463710ec13308e92ae223ab1 Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Fri, 15 Oct 2021 19:31:57 +0100 Subject: [PATCH] Chore: Remove whereAndSelect and fix typescript of main PrismaClient adapter (#966) --- lib/prisma.ts | 47 +++++---------------- test/lib/prisma.test.ts | 92 ----------------------------------------- 2 files changed, 10 insertions(+), 129 deletions(-) delete mode 100644 test/lib/prisma.test.ts diff --git a/lib/prisma.ts b/lib/prisma.ts index 0ae677b5a4..1cb7589397 100644 --- a/lib/prisma.ts +++ b/lib/prisma.ts @@ -1,45 +1,18 @@ import { PrismaClient } from "@prisma/client"; -let prisma: PrismaClient; -const globalAny: any = global; - -if (process.env.NODE_ENV === "production") { - prisma = new PrismaClient(); -} else { - if (!globalAny.prisma) { - globalAny.prisma = new PrismaClient({ - log: ["query", "error", "warn"], - }); - } - prisma = globalAny.prisma; +declare global { + // eslint-disable-next-line no-var + var prisma: PrismaClient | undefined; } -const pluck = (select: Record, attr: string) => { - const parts = attr.split("."); - const alwaysAttr = parts[0]; - const pluckedValue = - parts.length > 1 - ? { - select: pluck(select[alwaysAttr] ? select[alwaysAttr].select : {}, parts.slice(1).join(".")), - } - : true; - return { - ...select, - [alwaysAttr]: pluckedValue, - }; -}; - -/** - * @deprecated - * This function will always return `any` type, - * See https://github.com/calendso/calendso/pull/460 for alternative approach - */ -const whereAndSelect = (modelQuery, criteria: Record, pluckedAttributes: string[]) => - modelQuery({ - where: criteria, - select: pluckedAttributes.reduce(pluck, {}), +export const prisma = + globalThis.prisma || + new PrismaClient({ + log: ["query", "error", "warn"], }); -export { whereAndSelect }; +if (process.env.NODE_ENV !== "production") { + globalThis.prisma = prisma; +} export default prisma; diff --git a/test/lib/prisma.test.ts b/test/lib/prisma.test.ts deleted file mode 100644 index e068be0f35..0000000000 --- a/test/lib/prisma.test.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { expect, it } from "@jest/globals"; - -import { whereAndSelect } from "@lib/prisma"; - -it("can decorate using whereAndSelect", async () => { - whereAndSelect( - (queryObj) => { - expect(queryObj).toStrictEqual({ where: { id: 1 }, select: { example: true } }); - }, - { id: 1 }, - ["example"] - ); -}); - -it("can do nested selects using . seperator", async () => { - whereAndSelect( - (queryObj) => { - expect(queryObj).toStrictEqual({ - where: { - uid: 1, - }, - select: { - description: true, - attendees: { - select: { - email: true, - name: true, - }, - }, - }, - }); - }, - { uid: 1 }, - ["description", "attendees.email", "attendees.name"] - ); -}); - -it("can handle nesting deeply", async () => { - whereAndSelect( - (queryObj) => { - expect(queryObj).toStrictEqual({ - where: { - uid: 1, - }, - select: { - description: true, - attendees: { - select: { - email: { - select: { - nested: true, - }, - }, - name: true, - }, - }, - }, - }); - }, - { uid: 1 }, - ["description", "attendees.email.nested", "attendees.name"] - ); -}); - -it("can handle nesting multiple", async () => { - whereAndSelect( - (queryObj) => { - expect(queryObj).toStrictEqual({ - where: { - uid: 1, - }, - select: { - description: true, - attendees: { - select: { - email: true, - name: true, - }, - }, - bookings: { - select: { - id: true, - name: true, - }, - }, - }, - }); - }, - { uid: 1 }, - ["description", "attendees.email", "attendees.name", "bookings.id", "bookings.name"] - ); -});