From 5194ebe407fbc7364026af0e04d05c1214934ca7 Mon Sep 17 00:00:00 2001 From: Yiming Cao Date: Fri, 7 Mar 2025 09:39:17 -0800 Subject: [PATCH 1/3] chore: update sponsors (#2030) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8c5754d4c..0b3737962 100644 --- a/README.md +++ b/README.md @@ -238,6 +238,7 @@ Thank you for your generous support! + From 5db6910613e7bf5add50414d42012bf2a07ac24d Mon Sep 17 00:00:00 2001 From: Dylan Lundy <4567380+diesal11@users.noreply.github.com> Date: Sat, 8 Mar 2025 04:31:54 +1030 Subject: [PATCH 2/3] fix(zod): delegate aux fields appearing in WhereUniqueInput schemas (#2029) Fixes #2028 --- .../src/plugins/enhancer/enhance/index.ts | 6 +- packages/schema/src/plugins/zod/generator.ts | 2 +- tests/regression/tests/issue-2028.test.ts | 116 ++++++++++++++++++ 3 files changed, 120 insertions(+), 4 deletions(-) create mode 100644 tests/regression/tests/issue-2028.test.ts diff --git a/packages/schema/src/plugins/enhancer/enhance/index.ts b/packages/schema/src/plugins/enhancer/enhance/index.ts index 1cd49c0a4..c0331e61e 100644 --- a/packages/schema/src/plugins/enhancer/enhance/index.ts +++ b/packages/schema/src/plugins/enhancer/enhance/index.ts @@ -565,10 +565,10 @@ export type Enhanced = const structure = iface.getStructure(); // filter out aux fields - structure.properties = structure.properties?.filter((p) => !p.name.startsWith(DELEGATE_AUX_RELATION_PREFIX)); + structure.properties = structure.properties?.filter((p) => !p.name.includes(DELEGATE_AUX_RELATION_PREFIX)); // filter out aux methods - structure.methods = structure.methods?.filter((m) => !m.name.startsWith(DELEGATE_AUX_RELATION_PREFIX)); + structure.methods = structure.methods?.filter((m) => !m.name.includes(DELEGATE_AUX_RELATION_PREFIX)); if (delegateInfo.some(([delegate]) => `${delegate.name}Delegate` === iface.getName())) { // delegate models cannot be created directly, remove create/createMany/upsert @@ -850,7 +850,7 @@ export type Enhanced = private findAuxDecls(node: Node) { return node .getDescendantsOfKind(SyntaxKind.PropertySignature) - .filter((n) => n.getName().startsWith(DELEGATE_AUX_RELATION_PREFIX)); + .filter((n) => n.getName().includes(DELEGATE_AUX_RELATION_PREFIX)); } private saveSourceFile(sf: SourceFile) { diff --git a/packages/schema/src/plugins/zod/generator.ts b/packages/schema/src/plugins/zod/generator.ts index 341b8cae5..9a5cd53b4 100644 --- a/packages/schema/src/plugins/zod/generator.ts +++ b/packages/schema/src/plugins/zod/generator.ts @@ -244,7 +244,7 @@ export class ZodSchemaGenerator { const moduleNames: string[] = []; for (let i = 0; i < inputObjectTypes.length; i += 1) { // exclude delegate aux fields - const fields = inputObjectTypes[i]?.fields?.filter((f) => !f.name.startsWith(DELEGATE_AUX_RELATION_PREFIX)); + const fields = inputObjectTypes[i]?.fields?.filter((f) => !f.name.includes(DELEGATE_AUX_RELATION_PREFIX)); const name = inputObjectTypes[i]?.name; if (!generateUnchecked && name.includes('Unchecked')) { diff --git a/tests/regression/tests/issue-2028.test.ts b/tests/regression/tests/issue-2028.test.ts new file mode 100644 index 000000000..a98f0af7d --- /dev/null +++ b/tests/regression/tests/issue-2028.test.ts @@ -0,0 +1,116 @@ +import { createPostgresDb, loadSchema } from '@zenstackhq/testtools'; + +describe('issue 2028', () => { + it('regression', async () => { + const dbUrl = await createPostgresDb('issue-2028'); + const { enhance, zodSchemas } = await loadSchema( + ` +enum FooType { + Bar + Baz +} + +model User { + id String @id @default(cuid()) + userFolders UserFolder[] + @@allow('all', true) +} + +model Foo { + id String @id @default(cuid()) + type FooType + + userFolders UserFolder[] + + @@delegate(type) + @@allow('all', true) +} + +model Bar extends Foo { + name String +} + +model Baz extends Foo { + age Int +} + +model UserFolder { + id String @id @default(cuid()) + userId String + fooId String + + user User @relation(fields: [userId], references: [id]) + foo Foo @relation(fields: [fooId], references: [id]) + + @@unique([userId, fooId]) + @@allow('all', true) +} + `, + { + fullZod: true, + provider: 'postgresql', + dbUrl, + } + ); + // Ensure Zod Schemas don't include the delegate fields + expect( + zodSchemas.objects.UserFolderWhereUniqueInputObjectSchema.safeParse({ + userId_delegate_aux_UserFolder_fooId_Bar: { + userId: '1', + fooId: '2', + }, + }).success + ).toBeFalsy(); + + expect( + zodSchemas.objects.UserFolderWhereUniqueInputObjectSchema.safeParse({ + userId_delegate_aux_UserFolder_fooId_Baz: { + userId: '1', + fooId: '2', + }, + }).success + ).toBeFalsy(); + + // Ensure we can query by the CompoundUniqueInput + const db = enhance(); + const user = await db.user.create({ data: {} }); + const bar = await db.bar.create({ data: { name: 'bar' } }); + const baz = await db.baz.create({ data: { age: 1 } }); + + const userFolderA = await db.userFolder.create({ + data: { + userId: user.id, + fooId: bar.id, + }, + }); + + const userFolderB = await db.userFolder.create({ + data: { + userId: user.id, + fooId: baz.id, + }, + }); + + await expect( + db.userFolder.findUnique({ + where: { + userId_fooId: { + userId: user.id, + fooId: bar.id, + }, + }, + }) + ).resolves.toMatchObject(userFolderA); + + await expect( + db.userFolder.findUnique({ + where: { + userId_fooId: { + userId: user.id, + fooId: baz.id, + }, + }, + }) + ).resolves.toMatchObject(userFolderB); + }); +}); From e8694e6c06d27b5624e3b8d2cc69189a1ea71958 Mon Sep 17 00:00:00 2001 From: Yiming Cao Date: Fri, 7 Mar 2025 10:11:07 -0800 Subject: [PATCH 3/3] chore: bump version (#2031) --- package.json | 2 +- packages/ide/jetbrains/build.gradle.kts | 2 +- packages/ide/jetbrains/package.json | 2 +- packages/language/package.json | 2 +- packages/misc/redwood/package.json | 2 +- packages/plugins/openapi/package.json | 2 +- packages/plugins/swr/package.json | 2 +- packages/plugins/tanstack-query/package.json | 2 +- packages/plugins/trpc/package.json | 2 +- packages/runtime/package.json | 2 +- packages/schema/package.json | 2 +- packages/sdk/package.json | 2 +- packages/server/package.json | 2 +- packages/testtools/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 18434b628..ea6a13871 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zenstack-monorepo", - "version": "2.12.1", + "version": "2.12.2", "description": "", "scripts": { "build": "pnpm -r --filter=\"!./packages/ide/*\" build", diff --git a/packages/ide/jetbrains/build.gradle.kts b/packages/ide/jetbrains/build.gradle.kts index b788fb693..5b72d5027 100644 --- a/packages/ide/jetbrains/build.gradle.kts +++ b/packages/ide/jetbrains/build.gradle.kts @@ -9,7 +9,7 @@ plugins { } group = "dev.zenstack" -version = "2.12.1" +version = "2.12.2" repositories { mavenCentral() diff --git a/packages/ide/jetbrains/package.json b/packages/ide/jetbrains/package.json index 76239e2bc..154ba8c5a 100644 --- a/packages/ide/jetbrains/package.json +++ b/packages/ide/jetbrains/package.json @@ -1,6 +1,6 @@ { "name": "jetbrains", - "version": "2.12.1", + "version": "2.12.2", "displayName": "ZenStack JetBrains IDE Plugin", "description": "ZenStack JetBrains IDE plugin", "homepage": "https://zenstack.dev", diff --git a/packages/language/package.json b/packages/language/package.json index c37178a38..b91c0d771 100644 --- a/packages/language/package.json +++ b/packages/language/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/language", - "version": "2.12.1", + "version": "2.12.2", "displayName": "ZenStack modeling language compiler", "description": "ZenStack modeling language compiler", "homepage": "https://zenstack.dev", diff --git a/packages/misc/redwood/package.json b/packages/misc/redwood/package.json index a4141f7e2..350645094 100644 --- a/packages/misc/redwood/package.json +++ b/packages/misc/redwood/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/redwood", "displayName": "ZenStack RedwoodJS Integration", - "version": "2.12.1", + "version": "2.12.2", "description": "CLI and runtime for integrating ZenStack with RedwoodJS projects.", "repository": { "type": "git", diff --git a/packages/plugins/openapi/package.json b/packages/plugins/openapi/package.json index fc0b2c290..774331011 100644 --- a/packages/plugins/openapi/package.json +++ b/packages/plugins/openapi/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/openapi", "displayName": "ZenStack Plugin and Runtime for OpenAPI", - "version": "2.12.1", + "version": "2.12.2", "description": "ZenStack plugin and runtime supporting OpenAPI", "main": "index.js", "repository": { diff --git a/packages/plugins/swr/package.json b/packages/plugins/swr/package.json index 4caeeef39..4ef1085eb 100644 --- a/packages/plugins/swr/package.json +++ b/packages/plugins/swr/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/swr", "displayName": "ZenStack plugin for generating SWR hooks", - "version": "2.12.1", + "version": "2.12.2", "description": "ZenStack plugin for generating SWR hooks", "main": "index.js", "repository": { diff --git a/packages/plugins/tanstack-query/package.json b/packages/plugins/tanstack-query/package.json index 0103e506c..7d02b1fac 100644 --- a/packages/plugins/tanstack-query/package.json +++ b/packages/plugins/tanstack-query/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/tanstack-query", "displayName": "ZenStack plugin for generating tanstack-query hooks", - "version": "2.12.1", + "version": "2.12.2", "description": "ZenStack plugin for generating tanstack-query hooks", "main": "index.js", "exports": { diff --git a/packages/plugins/trpc/package.json b/packages/plugins/trpc/package.json index bfe95e0a3..60d6aa11d 100644 --- a/packages/plugins/trpc/package.json +++ b/packages/plugins/trpc/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/trpc", "displayName": "ZenStack plugin for tRPC", - "version": "2.12.1", + "version": "2.12.2", "description": "ZenStack plugin for tRPC", "main": "index.js", "repository": { diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 79bc5322f..a274624cb 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/runtime", "displayName": "ZenStack Runtime Library", - "version": "2.12.1", + "version": "2.12.2", "description": "Runtime of ZenStack for both client-side and server-side environments.", "repository": { "type": "git", diff --git a/packages/schema/package.json b/packages/schema/package.json index 1980506f2..5bbdd930c 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -3,7 +3,7 @@ "publisher": "zenstack", "displayName": "ZenStack Language Tools", "description": "FullStack enhancement for Prisma ORM: seamless integration from database to UI", - "version": "2.12.1", + "version": "2.12.2", "author": { "name": "ZenStack Team" }, diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 146755e2d..87ebfd454 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/sdk", - "version": "2.12.1", + "version": "2.12.2", "description": "ZenStack plugin development SDK", "main": "index.js", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index a3fe81e73..84ee7be57 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/server", - "version": "2.12.1", + "version": "2.12.2", "displayName": "ZenStack Server-side Adapters", "description": "ZenStack server-side adapters", "homepage": "https://zenstack.dev", diff --git a/packages/testtools/package.json b/packages/testtools/package.json index 0e2b4fba5..75e8920ba 100644 --- a/packages/testtools/package.json +++ b/packages/testtools/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/testtools", - "version": "2.12.1", + "version": "2.12.2", "description": "ZenStack Test Tools", "main": "index.js", "private": true,
Suhyl
Suhyl
Marblism
Marblism
Mermaid Chart
Mermaid Chart
CodeRabbit
CodeRabbit