From a84da6c1281ea7520f468c1d91570d12fe4388dd Mon Sep 17 00:00:00 2001 From: Peter Goldstein Date: Tue, 1 Oct 2024 16:46:57 -0400 Subject: [PATCH] Fix #11944 - Removed explicit undefined values before passing to Prisma --- packages/adapter-prisma/src/index.ts | 44 +++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/packages/adapter-prisma/src/index.ts b/packages/adapter-prisma/src/index.ts index bf2f01fd95..cf5107676b 100644 --- a/packages/adapter-prisma/src/index.ts +++ b/packages/adapter-prisma/src/index.ts @@ -31,7 +31,10 @@ export function PrismaAdapter( // We need to let Prisma generate the ID because our default UUID is incompatible with MongoDB // eslint-disable-next-line @typescript-eslint/no-unused-vars createUser: ({ id, ...data }) => { - return p.user.create({ data }) + const filteredData = Object.fromEntries( + Object.entries(data).filter(([_, v]) => v !== undefined) + ); + return p.user.create({ data: filteredData }); }, getUser: (id) => p.user.findUnique({ where: { id } }), getUserByEmail: (email) => p.user.findUnique({ where: { email } }), @@ -42,8 +45,14 @@ export function PrismaAdapter( }) return (account?.user as AdapterUser) ?? null }, - updateUser: ({ id, ...data }) => - p.user.update({ where: { id }, data }) as Promise, + updateUser: ({ id, ...data }) => { + const filteredData = Object.fromEntries( + Object.entries(data).filter(([_, v]) => v !== undefined) + ); + return p.user.update({ + where: { id }, data: filteredData + }) as Promise + }, deleteUser: (id) => p.user.delete({ where: { id } }) as Promise, linkAccount: (data) => @@ -61,13 +70,29 @@ export function PrismaAdapter( const { user, ...session } = userAndSession return { user, session } as { user: AdapterUser; session: AdapterSession } }, - createSession: (data) => p.session.create({ data }), - updateSession: (data) => - p.session.update({ where: { sessionToken: data.sessionToken }, data }), + createSession: (data) => { + const filteredData = Object.fromEntries( + Object.entries(data).filter(([_, v]) => v !== undefined) + ); + return p.session.create({ data: filteredData }) + }, + updateSession: (data) => { + const filteredData = Object.fromEntries( + Object.entries(data).filter(([_, v]) => v !== undefined) + ); + return p.session.update({ + where: { sessionToken: data.sessionToken }, data: filteredData + }) + }, deleteSession: (sessionToken) => p.session.delete({ where: { sessionToken } }), async createVerificationToken(data) { - const verificationToken = await p.verificationToken.create({ data }) + const filteredData = Object.fromEntries( + Object.entries(data).filter(([_, v]) => v !== undefined) + ); + const verificationToken = await p.verificationToken.create({ + data: filteredData + }) // @ts-expect-errors // MongoDB needs an ID, but we don't if (verificationToken.id) delete verificationToken.id return verificationToken @@ -94,8 +119,11 @@ export function PrismaAdapter( }) as Promise }, async createAuthenticator(authenticator) { + const filteredData = Object.fromEntries( + Object.entries(authenticator).filter(([_, v]) => v !== undefined) + ); return p.authenticator.create({ - data: authenticator, + data: filteredData, }) }, async getAuthenticator(credentialID) {