From 2b27224d25cc5a61bba684d49b4d5339ad5f02d1 Mon Sep 17 00:00:00 2001 From: Youssef Gaber <1728215+gabrola@users.noreply.github.com> Date: Wed, 26 Feb 2025 23:53:52 +0200 Subject: [PATCH] fix(runtime): proxy `$extends` for each and every enhancement --- .../runtime/src/enhancements/node/proxy.ts | 7 +--- tests/regression/tests/issue-2014.test.ts | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 tests/regression/tests/issue-2014.test.ts diff --git a/packages/runtime/src/enhancements/node/proxy.ts b/packages/runtime/src/enhancements/node/proxy.ts index e063f002b..4ff1a7e79 100644 --- a/packages/runtime/src/enhancements/node/proxy.ts +++ b/packages/runtime/src/enhancements/node/proxy.ts @@ -267,12 +267,7 @@ export function makeProxy( if ($extends && typeof $extends === 'function') { return (...args: any[]) => { const result = $extends.bind(target)(...args); - if (!result[PRISMA_PROXY_ENHANCER]) { - return makeProxy(result, modelMeta, makeHandler, name + '$ext', errorTransformer); - } else { - // avoid double wrapping - return result; - } + return makeProxy(result, modelMeta, makeHandler, name + '$ext', errorTransformer); }; } else { return $extends; diff --git a/tests/regression/tests/issue-2014.test.ts b/tests/regression/tests/issue-2014.test.ts new file mode 100644 index 000000000..4ebdb2b4e --- /dev/null +++ b/tests/regression/tests/issue-2014.test.ts @@ -0,0 +1,39 @@ +import { loadSchema } from '@zenstackhq/testtools'; + +describe('issue 2014', () => { + it('regression', async () => { + const { prisma, enhance } = await loadSchema( + ` + model Tenant { + id Int @id @default(autoincrement()) + + users User[] + } + + model User { + id Int @id @default(autoincrement()) + tenantId Int @default(auth().tenantId) + tenant Tenant @relation(fields: [tenantId], references: [id]) + + @@allow('all', true) + } + `, + { logPrismaQuery: true } + ); + + const tenant = await prisma.tenant.create({ data: {} }); + const user = await prisma.user.create({ data: { tenantId: tenant.id } }); + + const db = enhance(user); + const extendedDb = db.$extends({}); + + await expect( + extendedDb.user.create({ + data: {}, + }) + ).resolves.toEqual({ + id: 2, + tenantId: tenant.id, + }); + }); +});