diff --git a/.github/release/.release-manifest.json b/.github/release/.release-manifest.json index 1857a084d..388e76056 100644 --- a/.github/release/.release-manifest.json +++ b/.github/release/.release-manifest.json @@ -1,14 +1,14 @@ { - ".": "2.0.0-alpha.1", - "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/server": "2.0.0-alpha.2", - "packages/testtools": "2.0.0-alpha.2" + ".": "2.0.0-alpha.2", + "packages/ide/jetbrains": "2.0.0-alpha.3", + "packages/language": "2.0.0-alpha.3", + "packages/misc/redwood": "2.0.0-alpha.3", + "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.3", + "packages/testtools": "2.0.0-alpha.3" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 14a85cdea..2f48b692f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,26 @@ -# 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-09) + + +### 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)) +* more robust calculation of default location for code generation ([#1095](https://github.com/zenstackhq/zenstack/issues/1095)) ([d11d4ba](https://github.com/zenstackhq/zenstack/commit/d11d4bade318d5a17d1a5e3860292352e25cc813)) +* **polymorphism:** include submodel relations when reading a concrete model ([c38add4](https://github.com/zenstackhq/zenstack/commit/c38add4aa7b5cd0d33e1429cc08468b64a7893d5)) +* **polymorphism:** relation name disambiguation ([#1107](https://github.com/zenstackhq/zenstack/issues/1107)) ([9f9d277](https://github.com/zenstackhq/zenstack/commit/9f9d27704c2eecbbbd69e841ece6b1d4d22040f6)) +* **polymorphism:** support `orderBy` with base fields ([#1086](https://github.com/zenstackhq/zenstack/issues/1086)) ([2e81a08](https://github.com/zenstackhq/zenstack/commit/2e81a089a1b57ebf61d25fc49300fa22f0cda06b)) +* prisma.d.ts is not properly saved ([#1090](https://github.com/zenstackhq/zenstack/issues/1090)) ([d3629be](https://github.com/zenstackhq/zenstack/commit/d3629bef459afc11c16461fb18621d2f77ac35cc)) +* several issues with using `auth()` in `[@default](https://github.com/default)` ([#1088](https://github.com/zenstackhq/zenstack/issues/1088)) ([36e515e](https://github.com/zenstackhq/zenstack/commit/36e515e485c580657b9edbfc52014f3542abfb96)) + + +### 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 +34,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 +72,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 +92,7 @@ - Better overall documentation -# 0.2.0 (2022-10-29) +## 0.2.0 (2022-10-29) ### Features diff --git a/package.json b/package.json index 6c73b5f25..febc93264 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zenstack-monorepo", - "version": "2.0.0-alpha.5", + "version": "2.0.0-alpha.2", "description": "", "scripts": { "build": "pnpm -r build", diff --git a/packages/ide/jetbrains/CHANGELOG.md b/packages/ide/jetbrains/CHANGELOG.md index 6f0f0e7ff..aadf48631 100644 --- a/packages/ide/jetbrains/CHANGELOG.md +++ b/packages/ide/jetbrains/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-09) + + +### Bug Fixes + +* more robust calculation of default location for code generation ([#1095](https://github.com/zenstackhq/zenstack/issues/1095)) ([d11d4ba](https://github.com/zenstackhq/zenstack/commit/d11d4bade318d5a17d1a5e3860292352e25cc813)) +* prisma.d.ts is not properly saved ([#1090](https://github.com/zenstackhq/zenstack/issues/1090)) ([d3629be](https://github.com/zenstackhq/zenstack/commit/d3629bef459afc11c16461fb18621d2f77ac35cc)) + ## [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/ide/jetbrains/package.json b/packages/ide/jetbrains/package.json index b42a1047b..45658df7a 100644 --- a/packages/ide/jetbrains/package.json +++ b/packages/ide/jetbrains/package.json @@ -1,6 +1,6 @@ { "name": "jetbrains", - "version": "2.0.0-alpha.5", + "version": "2.0.0-alpha.3", "displayName": "ZenStack JetBrains IDE Plugin", "description": "ZenStack JetBrains IDE plugin", "homepage": "https://zenstack.dev", diff --git a/packages/language/CHANGELOG.md b/packages/language/CHANGELOG.md index cc2a59fdc..bb8e8938c 100644 --- a/packages/language/CHANGELOG.md +++ b/packages/language/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-09) + + +### Bug Fixes + +* more robust calculation of default location for code generation ([#1095](https://github.com/zenstackhq/zenstack/issues/1095)) ([d11d4ba](https://github.com/zenstackhq/zenstack/commit/d11d4bade318d5a17d1a5e3860292352e25cc813)) +* prisma.d.ts is not properly saved ([#1090](https://github.com/zenstackhq/zenstack/issues/1090)) ([d3629be](https://github.com/zenstackhq/zenstack/commit/d3629bef459afc11c16461fb18621d2f77ac35cc)) + ## [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/language/package.json b/packages/language/package.json index 5ea7cdfa8..d1928eb0a 100644 --- a/packages/language/package.json +++ b/packages/language/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/language", - "version": "2.0.0-alpha.5", + "version": "2.0.0-alpha.3", "displayName": "ZenStack modeling language compiler", "description": "ZenStack modeling language compiler", "homepage": "https://zenstack.dev", @@ -23,7 +23,7 @@ "plist2": "^1.1.3" }, "dependencies": { - "langium": "1.3.1" + "langium": "1.3.1" }, "contributes": { "languages": [ diff --git a/packages/misc/redwood/CHANGELOG.md b/packages/misc/redwood/CHANGELOG.md index cc2a59fdc..bb8e8938c 100644 --- a/packages/misc/redwood/CHANGELOG.md +++ b/packages/misc/redwood/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-09) + + +### Bug Fixes + +* more robust calculation of default location for code generation ([#1095](https://github.com/zenstackhq/zenstack/issues/1095)) ([d11d4ba](https://github.com/zenstackhq/zenstack/commit/d11d4bade318d5a17d1a5e3860292352e25cc813)) +* prisma.d.ts is not properly saved ([#1090](https://github.com/zenstackhq/zenstack/issues/1090)) ([d3629be](https://github.com/zenstackhq/zenstack/commit/d3629bef459afc11c16461fb18621d2f77ac35cc)) + ## [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/misc/redwood/package.json b/packages/misc/redwood/package.json index 2f19b2305..10e4b55fb 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.0.0-alpha.5", + "version": "2.0.0-alpha.3", "description": "CLI and runtime for integrating ZenStack with RedwoodJS projects.", "repository": { "type": "git", diff --git a/packages/plugins/openapi/CHANGELOG.md b/packages/plugins/openapi/CHANGELOG.md index cc2a59fdc..719164936 100644 --- a/packages/plugins/openapi/CHANGELOG.md +++ b/packages/plugins/openapi/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-09) + + +### 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)) +* more robust calculation of default location for code generation ([#1095](https://github.com/zenstackhq/zenstack/issues/1095)) ([d11d4ba](https://github.com/zenstackhq/zenstack/commit/d11d4bade318d5a17d1a5e3860292352e25cc813)) +* prisma.d.ts is not properly saved ([#1090](https://github.com/zenstackhq/zenstack/issues/1090)) ([d3629be](https://github.com/zenstackhq/zenstack/commit/d3629bef459afc11c16461fb18621d2f77ac35cc)) + ## [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 314c71f1e..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.5", + "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..719164936 100644 --- a/packages/plugins/swr/CHANGELOG.md +++ b/packages/plugins/swr/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-09) + + +### 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)) +* more robust calculation of default location for code generation ([#1095](https://github.com/zenstackhq/zenstack/issues/1095)) ([d11d4ba](https://github.com/zenstackhq/zenstack/commit/d11d4bade318d5a17d1a5e3860292352e25cc813)) +* prisma.d.ts is not properly saved ([#1090](https://github.com/zenstackhq/zenstack/issues/1090)) ([d3629be](https://github.com/zenstackhq/zenstack/commit/d3629bef459afc11c16461fb18621d2f77ac35cc)) + ## [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 fa22863fa..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.5", + "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..719164936 100644 --- a/packages/plugins/tanstack-query/CHANGELOG.md +++ b/packages/plugins/tanstack-query/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-09) + + +### 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)) +* more robust calculation of default location for code generation ([#1095](https://github.com/zenstackhq/zenstack/issues/1095)) ([d11d4ba](https://github.com/zenstackhq/zenstack/commit/d11d4bade318d5a17d1a5e3860292352e25cc813)) +* prisma.d.ts is not properly saved ([#1090](https://github.com/zenstackhq/zenstack/issues/1090)) ([d3629be](https://github.com/zenstackhq/zenstack/commit/d3629bef459afc11c16461fb18621d2f77ac35cc)) + ## [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 e4f2e548a..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.5", + "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..719164936 100644 --- a/packages/plugins/trpc/CHANGELOG.md +++ b/packages/plugins/trpc/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-09) + + +### 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)) +* more robust calculation of default location for code generation ([#1095](https://github.com/zenstackhq/zenstack/issues/1095)) ([d11d4ba](https://github.com/zenstackhq/zenstack/commit/d11d4bade318d5a17d1a5e3860292352e25cc813)) +* prisma.d.ts is not properly saved ([#1090](https://github.com/zenstackhq/zenstack/issues/1090)) ([d3629be](https://github.com/zenstackhq/zenstack/commit/d3629bef459afc11c16461fb18621d2f77ac35cc)) + ## [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 a0ad55223..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.5", + "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..96f27f038 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-09) + + +### 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)) +* more robust calculation of default location for code generation ([#1095](https://github.com/zenstackhq/zenstack/issues/1095)) ([d11d4ba](https://github.com/zenstackhq/zenstack/commit/d11d4bade318d5a17d1a5e3860292352e25cc813)) +* **polymorphism:** include submodel relations when reading a concrete model ([c38add4](https://github.com/zenstackhq/zenstack/commit/c38add4aa7b5cd0d33e1429cc08468b64a7893d5)) +* **polymorphism:** support `orderBy` with base fields ([#1086](https://github.com/zenstackhq/zenstack/issues/1086)) ([2e81a08](https://github.com/zenstackhq/zenstack/commit/2e81a089a1b57ebf61d25fc49300fa22f0cda06b)) +* prisma.d.ts is not properly saved ([#1090](https://github.com/zenstackhq/zenstack/issues/1090)) ([d3629be](https://github.com/zenstackhq/zenstack/commit/d3629bef459afc11c16461fb18621d2f77ac35cc)) +* several issues with using `auth()` in `[@default](https://github.com/default)` ([#1088](https://github.com/zenstackhq/zenstack/issues/1088)) ([36e515e](https://github.com/zenstackhq/zenstack/commit/36e515e485c580657b9edbfc52014f3542abfb96)) + ## [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 93bd0592e..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.5", + "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 06a96b0c6..fcb20691e 100644 --- a/packages/runtime/src/enhancements/delegate.ts +++ b/packages/runtime/src/enhancements/delegate.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import deepcopy from 'deepcopy'; -import deepmerge from 'deepmerge'; +import deepmerge, { type ArrayMergeOptions } from 'deepmerge'; import { lowerCaseFirst } from 'lower-case-first'; import { DELEGATE_AUX_RELATION_PREFIX } from '../constants'; import { @@ -11,7 +11,6 @@ import { getIdFields, getModelInfo, isDelegateModel, - requireField, resolveField, } from '../cross'; import type { CrudContract, DbClientContract } from '../types'; @@ -204,7 +203,11 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler { } if (!args.select) { + // include base models upwards this.injectBaseIncludeRecursively(model, args); + + // include sub models downwards + this.injectConcreteIncludeRecursively(model, args); } } @@ -302,6 +305,30 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler { this.injectBaseIncludeRecursively(base.name, selectInclude.include[baseRelationName]); } + private injectConcreteIncludeRecursively(model: string, selectInclude: any) { + const modelInfo = getModelInfo(this.options.modelMeta, model); + if (!modelInfo) { + return; + } + + // get sub models of this model + const subModels = Object.values(this.options.modelMeta.models).filter((m) => + m.baseTypes?.includes(modelInfo.name) + ); + + for (const subModel of subModels) { + // include sub model relation field + const subRelationName = this.makeAuxRelationName(subModel); + if (selectInclude.select) { + selectInclude.include = { [subRelationName]: {}, ...selectInclude.select }; + delete selectInclude.select; + } else { + selectInclude.include = { [subRelationName]: {}, ...selectInclude.include }; + } + this.injectConcreteIncludeRecursively(subModel.name, selectInclude.include[subRelationName]); + } + } + // #endregion // #region create @@ -1038,6 +1065,31 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler { return entity; } + const upMerged = this.assembleUp(model, entity); + const downMerged = this.assembleDown(model, entity); + + // https://www.npmjs.com/package/deepmerge#arraymerge-example-combine-arrays + const combineMerge = (target: any[], source: any[], options: ArrayMergeOptions) => { + const destination = target.slice(); + source.forEach((item, index) => { + if (typeof destination[index] === 'undefined') { + destination[index] = options.cloneUnlessOtherwiseSpecified(item, options); + } else if (options.isMergeableObject(item)) { + destination[index] = deepmerge(target[index], item, options); + } else if (target.indexOf(item) === -1) { + destination.push(item); + } + }); + return destination; + }; + + const result = deepmerge(upMerged, downMerged, { + arrayMerge: combineMerge, + }); + return result; + } + + private assembleUp(model: string, entity: any) { const result: any = {}; const base = this.getBaseModel(model); @@ -1046,7 +1098,7 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler { const baseRelationName = this.makeAuxRelationName(base); const baseData = entity[baseRelationName]; if (baseData && typeof baseData === 'object') { - const baseAssembled = this.assembleHierarchy(base.name, baseData); + const baseAssembled = this.assembleUp(base.name, baseData); Object.assign(result, baseAssembled); } } @@ -1063,9 +1115,9 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler { const fieldValue = entity[field.name]; if (field.isDataModel) { if (Array.isArray(fieldValue)) { - result[field.name] = fieldValue.map((item) => this.assembleHierarchy(field.type, item)); + result[field.name] = fieldValue.map((item) => this.assembleUp(field.type, item)); } else { - result[field.name] = this.assembleHierarchy(field.type, fieldValue); + result[field.name] = this.assembleUp(field.type, fieldValue); } } else { result[field.name] = fieldValue; @@ -1076,66 +1128,39 @@ export class DelegateProxyHandler extends DefaultPrismaProxyHandler { return result; } - // #endregion - - // #region backup - - private transformWhereHierarchy(where: any, contextModel: ModelInfo, forModel: ModelInfo) { - if (!where || typeof where !== 'object') { - return where; - } - - let curr: ModelInfo | undefined = contextModel; - const inheritStack: ModelInfo[] = []; - while (curr) { - inheritStack.unshift(curr); - curr = this.getBaseModel(curr.name); - } - - let result: any = {}; - for (const [key, value] of Object.entries(where)) { - const fieldInfo = requireField(this.options.modelMeta, contextModel.name, key); - const fieldHierarchy = this.transformFieldHierarchy(fieldInfo, value, contextModel, forModel, inheritStack); - result = deepmerge(result, fieldHierarchy); - } - - return result; - } - - private transformFieldHierarchy( - fieldInfo: FieldInfo, - value: unknown, - contextModel: ModelInfo, - forModel: ModelInfo, - inheritStack: ModelInfo[] - ): any { - const fieldModel = fieldInfo.inheritedFrom ? this.getModelInfo(fieldInfo.inheritedFrom) : contextModel; - if (fieldModel === forModel) { - return { [fieldInfo.name]: value }; - } - - const fieldModelPos = inheritStack.findIndex((m) => m === fieldModel); - const forModelPos = inheritStack.findIndex((m) => m === forModel); + private assembleDown(model: string, entity: any) { const result: any = {}; - let curr = result; + const modelInfo = getModelInfo(this.options.modelMeta, model, true); - if (fieldModelPos > forModelPos) { - // walk down hierarchy - for (let i = forModelPos + 1; i <= fieldModelPos; i++) { - const rel = this.makeAuxRelationName(inheritStack[i]); - curr[rel] = {}; - curr = curr[rel]; + if (modelInfo.discriminator) { + // model is a delegate, merge sub model fields + const subModelName = entity[modelInfo.discriminator]; + if (subModelName) { + const subModel = getModelInfo(this.options.modelMeta, subModelName, true); + const subRelationName = this.makeAuxRelationName(subModel); + const subData = entity[subRelationName]; + if (subData && typeof subData === 'object') { + const subAssembled = this.assembleDown(subModel.name, subData); + Object.assign(result, subAssembled); + } } - } else { - // walk up hierarchy - for (let i = forModelPos - 1; i >= fieldModelPos; i--) { - const rel = this.makeAuxRelationName(inheritStack[i]); - curr[rel] = {}; - curr = curr[rel]; + } + + for (const field of Object.values(modelInfo.fields)) { + if (field.name in entity) { + const fieldValue = entity[field.name]; + if (field.isDataModel) { + if (Array.isArray(fieldValue)) { + result[field.name] = fieldValue.map((item) => this.assembleDown(field.type, item)); + } else { + result[field.name] = this.assembleDown(field.type, fieldValue); + } + } else { + result[field.name] = fieldValue; + } } } - curr[fieldInfo.name] = value; return result; } diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index cc2a59fdc..658872e42 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-09) + + +### 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)) +* more robust calculation of default location for code generation ([#1095](https://github.com/zenstackhq/zenstack/issues/1095)) ([d11d4ba](https://github.com/zenstackhq/zenstack/commit/d11d4bade318d5a17d1a5e3860292352e25cc813)) +* prisma.d.ts is not properly saved ([#1090](https://github.com/zenstackhq/zenstack/issues/1090)) ([d3629be](https://github.com/zenstackhq/zenstack/commit/d3629bef459afc11c16461fb18621d2f77ac35cc)) +* several issues with using `auth()` in `[@default](https://github.com/default)` ([#1088](https://github.com/zenstackhq/zenstack/issues/1088)) ([36e515e](https://github.com/zenstackhq/zenstack/commit/36e515e485c580657b9edbfc52014f3542abfb96)) + ## [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 11f17f3d6..5bdf1dc2b 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/sdk", - "version": "2.0.0-alpha.5", + "version": "2.0.0-alpha.3", "description": "ZenStack plugin development SDK", "main": "index.js", "scripts": { diff --git a/packages/server/CHANGELOG.md b/packages/server/CHANGELOG.md index cc2a59fdc..bb8e8938c 100644 --- a/packages/server/CHANGELOG.md +++ b/packages/server/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-09) + + +### Bug Fixes + +* more robust calculation of default location for code generation ([#1095](https://github.com/zenstackhq/zenstack/issues/1095)) ([d11d4ba](https://github.com/zenstackhq/zenstack/commit/d11d4bade318d5a17d1a5e3860292352e25cc813)) +* prisma.d.ts is not properly saved ([#1090](https://github.com/zenstackhq/zenstack/issues/1090)) ([d3629be](https://github.com/zenstackhq/zenstack/commit/d3629bef459afc11c16461fb18621d2f77ac35cc)) + ## [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/server/package.json b/packages/server/package.json index 748b68e52..59c01026a 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/server", - "version": "2.0.0-alpha.5", + "version": "2.0.0-alpha.3", "displayName": "ZenStack Server-side Adapters", "description": "ZenStack server-side adapters", "homepage": "https://zenstack.dev", diff --git a/packages/testtools/CHANGELOG.md b/packages/testtools/CHANGELOG.md index cc2a59fdc..658872e42 100644 --- a/packages/testtools/CHANGELOG.md +++ b/packages/testtools/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [2.0.0-alpha.3](https://github.com/zenstackhq/zenstack/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2024-03-09) + + +### 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)) +* more robust calculation of default location for code generation ([#1095](https://github.com/zenstackhq/zenstack/issues/1095)) ([d11d4ba](https://github.com/zenstackhq/zenstack/commit/d11d4bade318d5a17d1a5e3860292352e25cc813)) +* prisma.d.ts is not properly saved ([#1090](https://github.com/zenstackhq/zenstack/issues/1090)) ([d3629be](https://github.com/zenstackhq/zenstack/commit/d3629bef459afc11c16461fb18621d2f77ac35cc)) +* several issues with using `auth()` in `[@default](https://github.com/default)` ([#1088](https://github.com/zenstackhq/zenstack/issues/1088)) ([36e515e](https://github.com/zenstackhq/zenstack/commit/36e515e485c580657b9edbfc52014f3542abfb96)) + ## [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 b6ce4df2e..b4741bb63 100644 --- a/packages/testtools/package.json +++ b/packages/testtools/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/testtools", - "version": "2.0.0-alpha.5", + "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 5a171aa8b..f4b4e63f8 100644 --- a/tests/integration/tests/enhancements/with-delegate/enhanced-client.test.ts +++ b/tests/integration/tests/enhancements/with-delegate/enhanced-client.test.ts @@ -201,24 +201,22 @@ describe('Polymorphism Test', () => { let video = await db.video.findFirst({ where: { duration: r.duration }, include: { owner: true } }); expect(video).toMatchObject({ - id: video.id, - createdAt: r.createdAt, - viewCount: r.viewCount, - url: r.url, - duration: r.duration, + ...r, assetType: 'Video', videoType: 'RatedVideo', }); - expect(video.rating).toBeUndefined(); expect(video.owner).toMatchObject(user); const asset = await db.asset.findFirst({ where: { viewCount: r.viewCount }, include: { owner: true } }); - expect(asset).toMatchObject({ id: r.id, createdAt: r.createdAt, assetType: 'Video', viewCount: r.viewCount }); - expect(asset.url).toBeUndefined(); - expect(asset.duration).toBeUndefined(); - expect(asset.rating).toBeUndefined(); - expect(asset.videoType).toBeUndefined(); - expect(asset.owner).toMatchObject(user); + expect(asset).toMatchObject({ + ...r, + assetType: 'Video', + videoType: 'RatedVideo', + owner: expect.objectContaining(user), + }); + + const userWithAssets = await db.user.findUnique({ where: { id: user.id }, include: { assets: true } }); + expect(userWithAssets.assets[0]).toMatchObject(r); const image = await db.image.create({ data: { owner: { connect: { id: 1 } }, viewCount: 1, format: 'png' }, @@ -230,9 +228,9 @@ describe('Polymorphism Test', () => { createdAt: image.createdAt, assetType: 'Image', viewCount: image.viewCount, + format: 'png', + owner: expect.objectContaining(user), }); - expect(imgAsset.format).toBeUndefined(); - expect(imgAsset.owner).toMatchObject(user); }); it('order by base fields', async () => {