diff --git a/.github/release/.release-manifest.json b/.github/release/.release-manifest.json index 1857a084d..4b02db8fe 100644 --- a/.github/release/.release-manifest.json +++ b/.github/release/.release-manifest.json @@ -1,14 +1,14 @@ { - ".": "2.0.0-alpha.1", + ".": "2.0.0-alpha.2", "packages/ide/jetbrains": "2.0.0-alpha.2", "packages/language": "2.0.0-alpha.2", "packages/misc/redwood": "2.0.0-alpha.2", - "packages/plugins/openapi": "2.0.0-alpha.2", - "packages/plugins/swr": "2.0.0-alpha.2", - "packages/plugins/tanstack-query": "2.0.0-alpha.2", - "packages/plugins/trpc": "2.0.0-alpha.2", - "packages/runtime": "2.0.0-alpha.2", - "packages/sdk": "2.0.0-alpha.2", + "packages/plugins/openapi": "2.0.0-alpha.3", + "packages/plugins/swr": "2.0.0-alpha.3", + "packages/plugins/tanstack-query": "2.0.0-alpha.3", + "packages/plugins/trpc": "2.0.0-alpha.3", + "packages/runtime": "2.0.0-alpha.3", + "packages/sdk": "2.0.0-alpha.3", "packages/server": "2.0.0-alpha.2", - "packages/testtools": "2.0.0-alpha.2" + "packages/testtools": "2.0.0-alpha.3" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 14a85cdea..c0960fe81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,21 @@ -# 0.5.0 (2022-12-15) +# Changelog + +## [2.0.0-alpha.2](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) (2024-03-06) + + +### Bug Fixes + +* clean up generation of logical prisma client ([#1082](https://github.com/zenstackhq/zenstack/issues/1082)) ([6e7993a](https://github.com/zenstackhq/zenstack/commit/6e7993afa8dde03ae12c44f198bcca04724dbc92)) +* default auth without user context ([#1015](https://github.com/zenstackhq/zenstack/issues/1015)) ([e5b5a0f](https://github.com/zenstackhq/zenstack/commit/e5b5a0fee34e46bee5557229f6f5894629c6ad96)) +* foreign key constraint ambiguity in generated delegate prisma schema ([#1060](https://github.com/zenstackhq/zenstack/issues/1060)) ([ca2a314](https://github.com/zenstackhq/zenstack/commit/ca2a314a927053703e4dbc76542499159b8bf6a8)) +* **polymorphism:** support `orderBy` with base fields ([d345b80](https://github.com/zenstackhq/zenstack/commit/d345b80846974355ee55cc4e5c806d53f144e89a)) + + +### Performance Improvements + +* improve polymorphism code generation speed ([#1073](https://github.com/zenstackhq/zenstack/issues/1073)) ([5b103ba](https://github.com/zenstackhq/zenstack/commit/5b103badea7876b7dfc1da91c26eca3213ddd413)) + +## 0.5.0 (2022-12-15) ### Features @@ -12,7 +29,7 @@ - Next-auth adapter and helper are moved to a separate package `@zenstackhq/next-auth`. -# 0.4.0 (2022-12-01) +## 0.4.0 (2022-12-01) ### Features @@ -50,7 +67,7 @@ Use @zenstackhq/runtime/types for type definitions shared between client and server, @zenstackhq/runtime/client for client-specific libaries (like React hooks), and @zenstackhq/runtime/server for server-specific libraries. -# 0.3.0 (2022-11-08) +## 0.3.0 (2022-11-08) ### Features @@ -70,7 +87,7 @@ - Better overall documentation -# 0.2.0 (2022-10-29) +## 0.2.0 (2022-10-29) ### Features diff --git a/packages/plugins/openapi/CHANGELOG.md b/packages/plugins/openapi/CHANGELOG.md index cc2a59fdc..486c24c30 100644 --- a/packages/plugins/openapi/CHANGELOG.md +++ b/packages/plugins/openapi/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-06) + + +### Bug Fixes + +* clean up generation of logical prisma client ([#1082](https://github.com/zenstackhq/zenstack/issues/1082)) ([6e7993a](https://github.com/zenstackhq/zenstack/commit/6e7993afa8dde03ae12c44f198bcca04724dbc92)) + ## [2.0.0-alpha.2](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) (2024-02-21) diff --git a/packages/plugins/openapi/package.json b/packages/plugins/openapi/package.json index 3ea7a4397..b4a539941 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.0.0-alpha.2", + "version": "2.0.0-alpha.3", "description": "ZenStack plugin and runtime supporting OpenAPI", "main": "index.js", "repository": { diff --git a/packages/plugins/swr/CHANGELOG.md b/packages/plugins/swr/CHANGELOG.md index cc2a59fdc..486c24c30 100644 --- a/packages/plugins/swr/CHANGELOG.md +++ b/packages/plugins/swr/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-06) + + +### Bug Fixes + +* clean up generation of logical prisma client ([#1082](https://github.com/zenstackhq/zenstack/issues/1082)) ([6e7993a](https://github.com/zenstackhq/zenstack/commit/6e7993afa8dde03ae12c44f198bcca04724dbc92)) + ## [2.0.0-alpha.2](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) (2024-02-21) diff --git a/packages/plugins/swr/package.json b/packages/plugins/swr/package.json index 7af3405d2..327a8dcfc 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.0.0-alpha.2", + "version": "2.0.0-alpha.3", "description": "ZenStack plugin for generating SWR hooks", "main": "index.js", "repository": { diff --git a/packages/plugins/tanstack-query/CHANGELOG.md b/packages/plugins/tanstack-query/CHANGELOG.md index cc2a59fdc..486c24c30 100644 --- a/packages/plugins/tanstack-query/CHANGELOG.md +++ b/packages/plugins/tanstack-query/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-06) + + +### Bug Fixes + +* clean up generation of logical prisma client ([#1082](https://github.com/zenstackhq/zenstack/issues/1082)) ([6e7993a](https://github.com/zenstackhq/zenstack/commit/6e7993afa8dde03ae12c44f198bcca04724dbc92)) + ## [2.0.0-alpha.2](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) (2024-02-21) diff --git a/packages/plugins/tanstack-query/package.json b/packages/plugins/tanstack-query/package.json index 1416132c4..8dd0d15d3 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.0.0-alpha.2", + "version": "2.0.0-alpha.3", "description": "ZenStack plugin for generating tanstack-query hooks", "main": "index.js", "exports": { diff --git a/packages/plugins/trpc/CHANGELOG.md b/packages/plugins/trpc/CHANGELOG.md index cc2a59fdc..486c24c30 100644 --- a/packages/plugins/trpc/CHANGELOG.md +++ b/packages/plugins/trpc/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-06) + + +### Bug Fixes + +* clean up generation of logical prisma client ([#1082](https://github.com/zenstackhq/zenstack/issues/1082)) ([6e7993a](https://github.com/zenstackhq/zenstack/commit/6e7993afa8dde03ae12c44f198bcca04724dbc92)) + ## [2.0.0-alpha.2](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) (2024-02-21) diff --git a/packages/plugins/trpc/package.json b/packages/plugins/trpc/package.json index 4b56afd1c..e4f8e4a05 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.0.0-alpha.2", + "version": "2.0.0-alpha.3", "description": "ZenStack plugin for tRPC", "main": "index.js", "repository": { diff --git a/packages/runtime/CHANGELOG.md b/packages/runtime/CHANGELOG.md index cc2a59fdc..27516c289 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-06) + + +### Bug Fixes + +* clean up generation of logical prisma client ([#1082](https://github.com/zenstackhq/zenstack/issues/1082)) ([6e7993a](https://github.com/zenstackhq/zenstack/commit/6e7993afa8dde03ae12c44f198bcca04724dbc92)) +* default auth without user context ([#1015](https://github.com/zenstackhq/zenstack/issues/1015)) ([e5b5a0f](https://github.com/zenstackhq/zenstack/commit/e5b5a0fee34e46bee5557229f6f5894629c6ad96)) +* **polymorphism:** support `orderBy` with base fields ([d345b80](https://github.com/zenstackhq/zenstack/commit/d345b80846974355ee55cc4e5c806d53f144e89a)) + ## [2.0.0-alpha.2](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) (2024-02-21) diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 34f6ea0ed..c80bbca5f 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/runtime", "displayName": "ZenStack Runtime Library", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "description": "Runtime of ZenStack for both client-side and server-side environments.", "repository": { "type": "git", diff --git a/packages/runtime/src/enhancements/delegate.ts b/packages/runtime/src/enhancements/delegate.ts index 7032a965a..06a96b0c6 100644 --- a/packages/runtime/src/enhancements/delegate.ts +++ b/packages/runtime/src/enhancements/delegate.ts @@ -77,6 +77,11 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler { this.injectWhereHierarchy(model, args?.where); this.injectSelectIncludeHierarchy(model, args); + if (args.orderBy) { + // `orderBy` may contain fields from base types + args.orderBy = this.buildWhereHierarchy(this.model, args.orderBy); + } + if (this.options.logPrismaQuery) { this.logger.info(`[delegate] \`${method}\` ${this.getModelName(model)}: ${formatObject(args)}`); } @@ -126,19 +131,19 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler { }); } - private buildWhereHierarchy(where: any) { + private buildWhereHierarchy(model: string, where: any) { if (!where) { return undefined; } where = deepcopy(where); Object.entries(where).forEach(([field, value]) => { - const fieldInfo = resolveField(this.options.modelMeta, this.model, field); + const fieldInfo = resolveField(this.options.modelMeta, model, field); if (!fieldInfo?.inheritedFrom) { return; } - let base = this.getBaseModel(this.model); + let base = this.getBaseModel(model); let target = where; while (base) { @@ -173,12 +178,17 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler { for (const kind of ['select', 'include'] as const) { if (args[kind] && typeof args[kind] === 'object') { - for (const [field, value] of Object.entries(args[kind])) { - if (value !== undefined) { + for (const [field, value] of Object.entries(args[kind])) { + const fieldInfo = resolveField(this.options.modelMeta, model, field); + if (fieldInfo && value !== undefined) { + if (value?.orderBy) { + // `orderBy` may contain fields from base types + value.orderBy = this.buildWhereHierarchy(fieldInfo.type, value.orderBy); + } + if (this.injectBaseFieldSelect(model, field, value, args, kind)) { delete args[kind][field]; } else { - const fieldInfo = resolveField(this.options.modelMeta, model, field); if (fieldInfo && this.isDelegateOrDescendantOfDelegate(fieldInfo.type)) { let nextValue = value; if (nextValue === true) { @@ -847,15 +857,15 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler { args = deepcopy(args); if (args.cursor) { - args.cursor = this.buildWhereHierarchy(args.cursor); + args.cursor = this.buildWhereHierarchy(this.model, args.cursor); } if (args.orderBy) { - args.orderBy = this.buildWhereHierarchy(args.orderBy); + args.orderBy = this.buildWhereHierarchy(this.model, args.orderBy); } if (args.where) { - args.where = this.buildWhereHierarchy(args.where); + args.where = this.buildWhereHierarchy(this.model, args.where); } if (this.options.logPrismaQuery) { @@ -875,11 +885,11 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler { args = deepcopy(args); if (args?.cursor) { - args.cursor = this.buildWhereHierarchy(args.cursor); + args.cursor = this.buildWhereHierarchy(this.model, args.cursor); } if (args?.where) { - args.where = this.buildWhereHierarchy(args.where); + args.where = this.buildWhereHierarchy(this.model, args.where); } if (this.options.logPrismaQuery) { @@ -915,7 +925,7 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler { args = deepcopy(args); if (args.where) { - args.where = this.buildWhereHierarchy(args.where); + args.where = this.buildWhereHierarchy(this.model, args.where); } if (this.options.logPrismaQuery) { diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index cc2a59fdc..486c24c30 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-06) + + +### Bug Fixes + +* clean up generation of logical prisma client ([#1082](https://github.com/zenstackhq/zenstack/issues/1082)) ([6e7993a](https://github.com/zenstackhq/zenstack/commit/6e7993afa8dde03ae12c44f198bcca04724dbc92)) + ## [2.0.0-alpha.2](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) (2024-02-21) diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 671f87155..5bdf1dc2b 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/sdk", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "description": "ZenStack plugin development SDK", "main": "index.js", "scripts": { diff --git a/packages/testtools/CHANGELOG.md b/packages/testtools/CHANGELOG.md index cc2a59fdc..486c24c30 100644 --- a/packages/testtools/CHANGELOG.md +++ b/packages/testtools/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-06) + + +### Bug Fixes + +* clean up generation of logical prisma client ([#1082](https://github.com/zenstackhq/zenstack/issues/1082)) ([6e7993a](https://github.com/zenstackhq/zenstack/commit/6e7993afa8dde03ae12c44f198bcca04724dbc92)) + ## [2.0.0-alpha.2](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) (2024-02-21) diff --git a/packages/testtools/package.json b/packages/testtools/package.json index 9b9379a8d..b4741bb63 100644 --- a/packages/testtools/package.json +++ b/packages/testtools/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/testtools", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "description": "ZenStack Test Tools", "main": "index.js", "private": true, diff --git a/tests/integration/tests/enhancements/with-delegate/enhanced-client.test.ts b/tests/integration/tests/enhancements/with-delegate/enhanced-client.test.ts index b4f273be5..5a171aa8b 100644 --- a/tests/integration/tests/enhancements/with-delegate/enhanced-client.test.ts +++ b/tests/integration/tests/enhancements/with-delegate/enhanced-client.test.ts @@ -235,6 +235,41 @@ describe('Polymorphism Test', () => { expect(imgAsset.owner).toMatchObject(user); }); + it('order by base fields', async () => { + const { db, user } = await setup(); + + await expect( + db.video.findMany({ + orderBy: { viewCount: 'desc' }, + }) + ).resolves.toHaveLength(1); + + await expect( + db.ratedVideo.findMany({ + orderBy: { duration: 'asc' }, + }) + ).resolves.toHaveLength(1); + + await expect( + db.user.findMany({ + orderBy: { assets: { _count: 'desc' } }, + }) + ).resolves.toHaveLength(1); + + await expect( + db.user.findUnique({ + where: { id: user.id }, + include: { + ratedVideos: { + orderBy: { + viewCount: 'desc', + }, + }, + }, + }) + ).toResolveTruthy(); + }); + it('update simple', async () => { const { db, videoWithOwner: video } = await setup();