diff --git a/package.json b/package.json index 63651acb3..197b4d1f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zenstack-monorepo", - "version": "1.6.1", + "version": "1.6.2", "description": "", "scripts": { "build": "pnpm -r build", diff --git a/packages/ide/jetbrains/build.gradle.kts b/packages/ide/jetbrains/build.gradle.kts index 7c69e1548..3de7c7869 100644 --- a/packages/ide/jetbrains/build.gradle.kts +++ b/packages/ide/jetbrains/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } group = "dev.zenstack" -version = "1.6.1" +version = "1.6.2" repositories { mavenCentral() diff --git a/packages/ide/jetbrains/package.json b/packages/ide/jetbrains/package.json index 5681f36a5..bda2ccf69 100644 --- a/packages/ide/jetbrains/package.json +++ b/packages/ide/jetbrains/package.json @@ -1,6 +1,6 @@ { "name": "jetbrains", - "version": "1.6.1", + "version": "1.6.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 96236e12a..9b3335645 100644 --- a/packages/language/package.json +++ b/packages/language/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/language", - "version": "1.6.1", + "version": "1.6.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 309b7d0a2..fd5195b3b 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": "1.6.1", + "version": "1.6.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 ad170027e..8a396f4de 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": "1.6.1", + "version": "1.6.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 b8277e430..62712d678 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": "1.6.1", + "version": "1.6.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 9566a77db..311029864 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": "1.6.1", + "version": "1.6.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 15ebabbcd..33f438579 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": "1.6.1", + "version": "1.6.2", "description": "ZenStack plugin for tRPC", "main": "index.js", "repository": { diff --git a/packages/runtime/package.json b/packages/runtime/package.json index ef367eb59..7796a8837 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/runtime", "displayName": "ZenStack Runtime Library", - "version": "1.6.1", + "version": "1.6.2", "description": "Runtime of ZenStack for both client-side and server-side environments.", "repository": { "type": "git", diff --git a/packages/runtime/src/constants.ts b/packages/runtime/src/constants.ts index 3c12b5a88..36143621f 100644 --- a/packages/runtime/src/constants.ts +++ b/packages/runtime/src/constants.ts @@ -53,11 +53,6 @@ export enum PrismaErrorCode { DEPEND_ON_RECORD_NOT_FOUND = 'P2025', } -/** - * Field name for storing in-transaction flag - */ -export const PRISMA_TX_FLAG = '$__zenstack_tx'; - /** * Field name for getting current enhancer */ diff --git a/packages/runtime/src/enhancements/omit.ts b/packages/runtime/src/enhancements/omit.ts index e8b3f8c98..8b2937845 100644 --- a/packages/runtime/src/enhancements/omit.ts +++ b/packages/runtime/src/enhancements/omit.ts @@ -18,7 +18,9 @@ export interface WithOmitOptions extends CommonEnhancementOptions { } /** - * Gets an enhanced Prisma client that supports @omit attribute. + * Gets an enhanced Prisma client that supports "@omit" attribute. + * + * @deprecated Use {@link enhance} instead */ export function withOmit(prisma: DbClient, options?: WithOmitOptions): DbClient { const _modelMeta = options?.modelMeta ?? getDefaultModelMeta(options?.loadPath); diff --git a/packages/runtime/src/enhancements/password.ts b/packages/runtime/src/enhancements/password.ts index 34844dfb4..c31846298 100644 --- a/packages/runtime/src/enhancements/password.ts +++ b/packages/runtime/src/enhancements/password.ts @@ -21,6 +21,8 @@ export interface WithPasswordOptions extends CommonEnhancementOptions { /** * Gets an enhanced Prisma client that supports @password attribute. + * + * @deprecated Use {@link enhance} instead */ export function withPassword(prisma: DbClient, options?: WithPasswordOptions): DbClient { const _modelMeta = options?.modelMeta ?? getDefaultModelMeta(options?.loadPath); diff --git a/packages/runtime/src/enhancements/policy/handler.ts b/packages/runtime/src/enhancements/policy/handler.ts index f002002d2..9268c24b3 100644 --- a/packages/runtime/src/enhancements/policy/handler.ts +++ b/packages/runtime/src/enhancements/policy/handler.ts @@ -4,7 +4,7 @@ import { lowerCaseFirst } from 'lower-case-first'; import invariant from 'tiny-invariant'; import { upperCaseFirst } from 'upper-case-first'; import { fromZodError } from 'zod-validation-error'; -import { CrudFailureReason, PRISMA_TX_FLAG } from '../../constants'; +import { CrudFailureReason } from '../../constants'; import { ModelDataVisitor, NestedWriteVisitor, @@ -1232,11 +1232,11 @@ export class PolicyProxyHandler implements Pr } private transaction(action: (tx: Record) => Promise) { - if (this.prisma[PRISMA_TX_FLAG]) { + if (this.prisma['$transaction']) { + return this.prisma.$transaction((tx) => action(tx), { maxWait: 100000, timeout: 100000 }); + } else { // already in transaction, don't nest return action(this.prisma); - } else { - return this.prisma.$transaction((tx) => action(tx), { maxWait: 100000, timeout: 100000 }); } } diff --git a/packages/runtime/src/enhancements/policy/index.ts b/packages/runtime/src/enhancements/policy/index.ts index 678f777ef..f1246659a 100644 --- a/packages/runtime/src/enhancements/policy/index.ts +++ b/packages/runtime/src/enhancements/policy/index.ts @@ -55,6 +55,8 @@ export interface WithPolicyOptions extends CommonEnhancementOptions { * @param context The policy evaluation context * @param policy The policy definition, will be loaded from default location if not provided * @param modelMeta The model metadata, will be loaded from default location if not provided + * + * @deprecated Use {@link enhance} instead */ export function withPolicy( prisma: DbClient, diff --git a/packages/runtime/src/enhancements/preset.ts b/packages/runtime/src/enhancements/preset.ts index b4c29dd7b..0123dbe64 100644 --- a/packages/runtime/src/enhancements/preset.ts +++ b/packages/runtime/src/enhancements/preset.ts @@ -10,6 +10,8 @@ import { WithPolicyContext } from './policy'; * @param prisma The Prisma client to enhance. * @param context The context to for evaluating access policies. * @param options Options. + * + * @deprecated Use {@link enhance} instead */ export function withPresets( prisma: DbClient, diff --git a/packages/runtime/src/enhancements/proxy.ts b/packages/runtime/src/enhancements/proxy.ts index 358bff153..c735d595a 100644 --- a/packages/runtime/src/enhancements/proxy.ts +++ b/packages/runtime/src/enhancements/proxy.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { PRISMA_PROXY_ENHANCER, PRISMA_TX_FLAG } from '../constants'; +import { PRISMA_PROXY_ENHANCER } from '../constants'; import type { ModelMeta } from '../cross'; import type { DbClientContract } from '../types'; import { createDeferredPromise } from './policy/promise'; @@ -183,6 +183,7 @@ export function makeProxy( errorTransformer?: ErrorTransformer ) { const models = Object.keys(modelMeta.fields).map((k) => k.toLowerCase()); + const proxy = new Proxy(prisma, { get: (target: any, prop: string | symbol, receiver: any) => { // enhancer metadata @@ -191,7 +192,7 @@ export function makeProxy( } if (prop === 'toString') { - return () => `$zenstack_${name}[${target.toString()}]`; + return () => `$zenstack_prisma_${prisma._clientVersion}`; } if (prop === '$transaction') { @@ -213,8 +214,10 @@ export function makeProxy( const txFunc = input; return $transaction.bind(target)((tx: any) => { + // create a proxy for the transaction function const txProxy = makeProxy(tx, modelMeta, makeHandler, name + '$tx'); - txProxy[PRISMA_TX_FLAG] = true; + + // call the transaction function with the proxy return txFunc(txProxy); }, ...rest); }; diff --git a/packages/schema/package.json b/packages/schema/package.json index 066d3736e..3135166ca 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -3,7 +3,7 @@ "publisher": "zenstack", "displayName": "ZenStack Language Tools", "description": "Build scalable web apps with minimum code by defining authorization and validation rules inside the data schema that closer to the database", - "version": "1.6.1", + "version": "1.6.2", "author": { "name": "ZenStack Team" }, diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 21dd0ba59..b6df9d993 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/sdk", - "version": "1.6.1", + "version": "1.6.2", "description": "ZenStack plugin development SDK", "main": "index.js", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index 7129a6e96..6d03a9c0c 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/server", - "version": "1.6.1", + "version": "1.6.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 94e19ad48..50650fee0 100644 --- a/packages/testtools/package.json +++ b/packages/testtools/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/testtools", - "version": "1.6.1", + "version": "1.6.2", "description": "ZenStack Test Tools", "main": "index.js", "private": true, diff --git a/tests/integration/tests/enhancements/with-policy/postgres.test.ts b/tests/integration/tests/enhancements/with-policy/postgres.test.ts index caed6a5ce..7653b89f7 100644 --- a/tests/integration/tests/enhancements/with-policy/postgres.test.ts +++ b/tests/integration/tests/enhancements/with-policy/postgres.test.ts @@ -16,14 +16,14 @@ describe('With Policy: with postgres', () => { beforeEach(async () => { dbUrl = await createPostgresDb(DB_NAME); - const { prisma: _prisma, withPolicy } = await loadSchemaFromFile( + const { prisma: _prisma, enhance } = await loadSchemaFromFile( path.join(__dirname, '../../schema/todo-pg.zmodel'), { provider: 'postgresql', dbUrl, } ); - getDb = withPolicy; + getDb = enhance; prisma = _prisma; });