From 50bf7b22cf3ebceafb09fd632ef503896d622fa6 Mon Sep 17 00:00:00 2001 From: Olup Date: Thu, 4 Dec 2025 01:41:13 +0100 Subject: [PATCH 1/3] fix(openapi): use ZModel AST array flag for TypeDef[] @json fields (#2314) Co-authored-by: Yiming Co-authored-by: Claude --- packages/plugins/openapi/src/rpc-generator.ts | 4 +- .../plugins/openapi/tests/openapi-rpc.test.ts | 59 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/packages/plugins/openapi/src/rpc-generator.ts b/packages/plugins/openapi/src/rpc-generator.ts index 22a19e133..463d3411e 100644 --- a/packages/plugins/openapi/src/rpc-generator.ts +++ b/packages/plugins/openapi/src/rpc-generator.ts @@ -785,9 +785,11 @@ export class RPCOpenAPIGenerator extends OpenAPIGeneratorBase { const field = dataModel.fields.find((f) => f.name === def.name); if (field?.type.reference?.ref && isTypeDef(field.type.reference.ref)) { // This Json field references a TypeDef + // Use field.type.array from ZModel AST instead of def.isList from DMMF, + // since Prisma treats TypeDef fields as plain Json and doesn't know about arrays return this.wrapArray( this.wrapNullable(this.ref(field.type.reference.ref.name, true), !def.isRequired), - def.isList + field.type.array ); } } diff --git a/packages/plugins/openapi/tests/openapi-rpc.test.ts b/packages/plugins/openapi/tests/openapi-rpc.test.ts index c61e01b1a..731b38f2a 100644 --- a/packages/plugins/openapi/tests/openapi-rpc.test.ts +++ b/packages/plugins/openapi/tests/openapi-rpc.test.ts @@ -518,6 +518,65 @@ model Product { } }); + it('array of TypeDef with enum directly on model field', async () => { + for (const specVersion of ['3.0.0', '3.1.0']) { + const { model, dmmf, modelFile } = await loadZModelAndDmmf(` +plugin openapi { + provider = '${normalizePath(path.resolve(__dirname, '../dist'))}' + specVersion = '${specVersion}' +} + +enum Language { + FR + EN + ES + DE + IT +} + +type TranslatedField { + language Language + content String +} + +model Article { + id String @id @default(cuid()) + title TranslatedField[] @json + description TranslatedField[] @json + + @@allow('all', true) +} + `); + + const { name: output } = tmp.fileSync({ postfix: '.yaml' }); + + const options = buildOptions(model, modelFile, output); + await generate(model, options, dmmf); + + await OpenAPIParser.validate(output); + + const parsed = YAML.parse(fs.readFileSync(output, 'utf-8')); + expect(parsed.openapi).toBe(specVersion); + + // Verify TranslatedField TypeDef is generated + expect(parsed.components.schemas.TranslatedField).toBeDefined(); + + // Verify Language enum is generated + expect(parsed.components.schemas.Language).toBeDefined(); + + // Verify enum reference inside TranslatedField + expect(parsed.components.schemas.TranslatedField.properties.language.$ref).toBe('#/components/schemas/Language'); + + // Verify array of TypeDef directly on model field + expect(parsed.components.schemas.Article.properties.title.type).toBe('array'); + expect(parsed.components.schemas.Article.properties.title.items.$ref).toBe('#/components/schemas/TranslatedField'); + + // Verify second array field as well + expect(parsed.components.schemas.Article.properties.description.type).toBe('array'); + expect(parsed.components.schemas.Article.properties.description.items.$ref).toBe('#/components/schemas/TranslatedField'); + } + }); + it('full-text search', async () => { const { model, dmmf, modelFile } = await loadZModelAndDmmf(` generator js { From ffa0d283b33f9fbd7ffe03de7434e94cc97ebe0a Mon Sep 17 00:00:00 2001 From: Yiming Cao Date: Thu, 4 Dec 2025 09:02:51 +0800 Subject: [PATCH 2/3] chore: bump version (#2315) --- 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 dc8d0fb28..a3eac4c07 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zenstack-monorepo", - "version": "2.22.0", + "version": "2.22.1", "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 e1b85627c..04cc22808 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.22.0" +version = "2.22.1" repositories { mavenCentral() diff --git a/packages/ide/jetbrains/package.json b/packages/ide/jetbrains/package.json index 24d148a8d..c8135294d 100644 --- a/packages/ide/jetbrains/package.json +++ b/packages/ide/jetbrains/package.json @@ -1,6 +1,6 @@ { "name": "jetbrains", - "version": "2.22.0", + "version": "2.22.1", "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 9b71c40cd..d4b4258be 100644 --- a/packages/language/package.json +++ b/packages/language/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/language", - "version": "2.22.0", + "version": "2.22.1", "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 8e7d14db0..e69d6f569 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.22.0", + "version": "2.22.1", "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 802543d43..640220d27 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.22.0", + "version": "2.22.1", "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 96b078871..ff5cf12ac 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.22.0", + "version": "2.22.1", "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 0701ad334..42317f709 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.22.0", + "version": "2.22.1", "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 863de7cf3..822966045 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.22.0", + "version": "2.22.1", "description": "ZenStack plugin for tRPC", "main": "index.js", "repository": { diff --git a/packages/runtime/package.json b/packages/runtime/package.json index db2c233bb..9b7f09f2e 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/runtime", "displayName": "ZenStack Runtime Library", - "version": "2.22.0", + "version": "2.22.1", "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 c4d8d4374..95ac53234 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.22.0", + "version": "2.22.1", "author": { "name": "ZenStack Team" }, diff --git a/packages/sdk/package.json b/packages/sdk/package.json index a2595207b..1d152a4a3 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/sdk", - "version": "2.22.0", + "version": "2.22.1", "description": "ZenStack plugin development SDK", "main": "index.js", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index 307c69e09..d3a896845 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/server", - "version": "2.22.0", + "version": "2.22.1", "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 370e5ca50..2e6119001 100644 --- a/packages/testtools/package.json +++ b/packages/testtools/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/testtools", - "version": "2.22.0", + "version": "2.22.1", "description": "ZenStack Test Tools", "main": "index.js", "private": true, From 961603a1afb0e523d081747c0d1f32b72be37ff2 Mon Sep 17 00:00:00 2001 From: Yiming Cao Date: Thu, 4 Dec 2025 09:12:12 +0800 Subject: [PATCH 3/3] fix(cli): install Prisma 6 during init since 7 is not tested (#2316) --- packages/schema/src/cli/actions/init.ts | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/schema/src/cli/actions/init.ts b/packages/schema/src/cli/actions/init.ts index 3345c745d..2d77c93e1 100644 --- a/packages/schema/src/cli/actions/init.ts +++ b/packages/schema/src/cli/actions/init.ts @@ -1,7 +1,6 @@ import colors from 'colors'; import fs from 'fs'; import path from 'path'; -import pkgJson from '../../package.json'; import { PackageManagers, ensurePackage, installPackage } from '../../utils/pkg-utils'; import { getVersion } from '../../utils/version-utils'; import { CliError } from '../cli-error'; @@ -79,13 +78,6 @@ Moving forward please edit this file and run "zenstack generate" to regenerate P } function getLatestSupportedPrismaVersion() { - const versionSpec = pkgJson.peerDependencies.prisma; - let maxVersion: string | undefined; - const hyphen = versionSpec.indexOf('-'); - if (hyphen > 0) { - maxVersion = versionSpec.substring(hyphen + 1).trim(); - } else { - maxVersion = versionSpec; - } - return maxVersion ?? 'latest'; + // Prisma 7 is not tested + return '6'; }