diff --git a/package.json b/package.json index 519137c35..cdaf1a920 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zenstack-monorepo", - "version": "2.8.0", + "version": "2.8.1", "description": "", "scripts": { "build": "pnpm -r build", diff --git a/packages/ide/jetbrains/build.gradle.kts b/packages/ide/jetbrains/build.gradle.kts index 067e6567e..442557a34 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.8.0" +version = "2.8.1" repositories { mavenCentral() diff --git a/packages/ide/jetbrains/package.json b/packages/ide/jetbrains/package.json index 372462b17..389060d74 100644 --- a/packages/ide/jetbrains/package.json +++ b/packages/ide/jetbrains/package.json @@ -1,6 +1,6 @@ { "name": "jetbrains", - "version": "2.8.0", + "version": "2.8.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 cf01ce9ad..ca9b3cc89 100644 --- a/packages/language/package.json +++ b/packages/language/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/language", - "version": "2.8.0", + "version": "2.8.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 554556519..1f74d793b 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.8.0", + "version": "2.8.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 41cfaf7eb..a55d40ac1 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.8.0", + "version": "2.8.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 b72fb3810..2918da8f7 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.8.0", + "version": "2.8.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 4ac5a58bb..87a8a2bd9 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.8.0", + "version": "2.8.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 676f40b2c..fc6c86e26 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.8.0", + "version": "2.8.1", "description": "ZenStack plugin for tRPC", "main": "index.js", "repository": { diff --git a/packages/runtime/package.json b/packages/runtime/package.json index f63f40ced..983fbe248 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/runtime", "displayName": "ZenStack Runtime Library", - "version": "2.8.0", + "version": "2.8.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 a99ebeee7..5ea95e5d8 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.8.0", + "version": "2.8.1", "author": { "name": "ZenStack Team" }, diff --git a/packages/schema/src/language-server/validator/datamodel-validator.ts b/packages/schema/src/language-server/validator/datamodel-validator.ts index f2a3d6737..9054c82c6 100644 --- a/packages/schema/src/language-server/validator/datamodel-validator.ts +++ b/packages/schema/src/language-server/validator/datamodel-validator.ts @@ -9,7 +9,6 @@ import { isTypeDef, } from '@zenstackhq/language/ast'; import { - getDataSourceProvider, getModelFieldsWithBases, getModelIdFields, getModelUniqueFields, @@ -108,10 +107,6 @@ export default class DataModelValidator implements AstValidator { if (!hasAttribute(field, '@json')) { accept('error', 'Custom-typed field must have @json attribute', { node: field }); } - - if (getDataSourceProvider(field.$container.$container) !== 'postgresql') { - accept('error', 'Custom-typed field is only supported with "postgresql" provider', { node: field }); - } } } diff --git a/packages/schema/src/plugins/prisma/schema-generator.ts b/packages/schema/src/plugins/prisma/schema-generator.ts index 9a787ab8b..b3d382795 100644 --- a/packages/schema/src/plugins/prisma/schema-generator.ts +++ b/packages/schema/src/plugins/prisma/schema-generator.ts @@ -39,6 +39,7 @@ import { getAttribute, getAttributeArg, getAttributeArgLiteral, + getDataSourceProvider, getInheritedFromDelegate, getLiteral, getRelationKeyPairs, @@ -81,6 +82,7 @@ import { const MODEL_PASSTHROUGH_ATTR = '@@prisma.passthrough'; const FIELD_PASSTHROUGH_ATTR = '@prisma.passthrough'; const PROVIDERS_SUPPORTING_NAMED_CONSTRAINTS = ['postgresql', 'mysql', 'cockroachdb']; +const PROVIDERS_SUPPORTING_TYPEDEF_FIELDS = ['postgresql']; // Some database providers like postgres and mysql have default limit to the length of identifiers // Here we use a conservative value that should work for most cases, and truncate names if needed @@ -794,6 +796,7 @@ export class PrismaSchemaGenerator { } else if (field.type.reference?.ref) { // model, enum, or type-def if (isTypeDef(field.type.reference.ref)) { + this.ensureSupportingTypeDefFields(this.zmodel); fieldType = 'Json'; } else { fieldType = field.type.reference.ref.name; @@ -846,6 +849,13 @@ export class PrismaSchemaGenerator { return result; } + private ensureSupportingTypeDefFields(zmodel: Model) { + const dsProvider = getDataSourceProvider(zmodel); + if (dsProvider && !PROVIDERS_SUPPORTING_TYPEDEF_FIELDS.includes(dsProvider)) { + throw new PluginError(name, `Datasource provider "${dsProvider}" does not support "@json" fields`); + } + } + private setDummyDefault(result: ModelField, field: DataModelField) { const dummyDefaultValue = match(field.type.type) .with('String', () => new AttributeArgValue('String', '')) diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 6222c5500..b2be27d13 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/sdk", - "version": "2.8.0", + "version": "2.8.1", "description": "ZenStack plugin development SDK", "main": "index.js", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index 064fd1ea1..d21932ca4 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/server", - "version": "2.8.0", + "version": "2.8.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 ec5208c81..c03a28af8 100644 --- a/packages/testtools/package.json +++ b/packages/testtools/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/testtools", - "version": "2.8.0", + "version": "2.8.1", "description": "ZenStack Test Tools", "main": "index.js", "private": true, diff --git a/tests/integration/tests/enhancements/json/validation.test.ts b/tests/integration/tests/enhancements/json/validation.test.ts index 2643056fe..27f5e5067 100644 --- a/tests/integration/tests/enhancements/json/validation.test.ts +++ b/tests/integration/tests/enhancements/json/validation.test.ts @@ -1,9 +1,9 @@ -import { loadModelWithError } from '@zenstackhq/testtools'; +import { loadModelWithError, loadSchema } from '@zenstackhq/testtools'; describe('JSON field typing', () => { it('is only supported by postgres', async () => { await expect( - loadModelWithError( + loadSchema( ` type Profile { age Int @gt(0) @@ -16,7 +16,7 @@ describe('JSON field typing', () => { } ` ) - ).resolves.toContain('Custom-typed field is only supported with "postgresql" provider'); + ).rejects.toThrow('Datasource provider "sqlite" does not support "@json" fields'); }); it('requires field to have @json attribute', async () => {