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! + 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/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/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, 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); + }); +});
Suhyl
Suhyl
Marblism
Marblism
Mermaid Chart
Mermaid Chart
CodeRabbit
CodeRabbit