From 90fbc83823bf551ea705d5ec167c10db05f08df9 Mon Sep 17 00:00:00 2001 From: ktmouk Date: Mon, 16 Mar 2026 22:36:19 +0900 Subject: [PATCH] fix: add has trap to client proxy for in operator support --- src/contest.test.ts | 12 ++++++++++++ src/context.ts | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/src/contest.test.ts b/src/contest.test.ts index 384fcc1..4b70541 100644 --- a/src/contest.test.ts +++ b/src/contest.test.ts @@ -140,4 +140,16 @@ describe('createContext', () => { const [ctx, prisma] = await makeContext('transactionStarted'); expect(prisma.meta).toEqual((ctx.client as PrismaClientStub).meta); }); + + it('has trap returns true for properties on the transaction client', async () => { + const [ctx] = await makeContext('transactionStarted'); + expect('$connect' in ctx.client).toBe(true); + expect('meta' in ctx.client).toBe(true); + expect('nonExistentProp' in ctx.client).toBe(false); + }); + + it('has trap returns false when no transaction is active', async () => { + const [ctx] = await makeContext('transactionPending'); + expect('$connect' in ctx.client).toBe(false); + }); }); diff --git a/src/context.ts b/src/context.ts index 1d96892..18f88c7 100644 --- a/src/context.ts +++ b/src/context.ts @@ -86,6 +86,10 @@ export function createContext(options: PrismaPostgresEnvironmentOptions) { * error message. */ const client: PrismaClientLike = new Proxy({} as PrismaClientLike, { + has: (_target, name) => { + if (!transactionClient) return false; + return name in transactionClient; + }, get: (_target, name: keyof PrismaClientLike | symbol) => { if (!transactionClient) { throw new Error(