Skip to content

Commit e492cd1

Browse files
committed
fix(json-api-nestjs): Fix circular type for query obkect
1 parent 0b7b4cc commit e492cd1

File tree

9 files changed

+55
-82
lines changed

9 files changed

+55
-82
lines changed

apps/json-api-server/src/app/app.module.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { LoggerModule } from 'nestjs-pino';
33

44
import { TypeOrmDatabaseModule } from '@nestjs-json-api/typeorm-database';
55
import { MicroOrmDatabaseModule } from '@nestjs-json-api/microorm-database';
6-
import { ResourcesModule } from './resources/resources.module';
6+
import { ResourcesTypeModule } from './resources/type-orm/resources-type.module';
7+
import { ResourcesMicroModule } from './resources/micro-orm/resources-micro.module';
78
import { RpcModule } from './rpc/rpc.module';
89
import * as process from 'process';
910

@@ -12,10 +13,15 @@ const ormModule =
1213
? TypeOrmDatabaseModule
1314
: MicroOrmDatabaseModule;
1415

16+
const resourceModule =
17+
process.env['ORM_TYPE'] === 'typeorm'
18+
? ResourcesTypeModule
19+
: ResourcesMicroModule;
20+
1521
@Module({
1622
imports: [
1723
ormModule,
18-
ResourcesModule,
24+
resourceModule,
1925
RpcModule,
2026
LoggerModule.forRoot({
2127
pinoHttp: {

apps/json-api-server/src/app/resources/controllers/entity-orm.ts

-10
This file was deleted.

apps/json-api-server/src/app/resources/resources.module.ts

-56
This file was deleted.

libs/json-api/json-api-nestjs/project.json

+35-6
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,34 @@
1515
"targets": {
1616
"build": {
1717
"executor": "@nx/js:tsc",
18-
"outputs": ["{options.outputPath}"],
18+
"outputs": [
19+
"{options.outputPath}"
20+
],
1921
"options": {
2022
"outputPath": "dist/libs/json-api/json-api-nestjs",
2123
"tsConfig": "libs/json-api/json-api-nestjs/tsconfig.lib.json",
2224
"packageJson": "libs/json-api/json-api-nestjs/package.json",
2325
"main": "libs/json-api/json-api-nestjs/src/index.ts",
24-
"assets": ["libs/json-api/json-api-nestjs/*.md"],
26+
"assets": [
27+
"libs/json-api/json-api-nestjs/*.md"
28+
],
29+
"buildableProjectDepsInPackageJsonType": "peerDependencies",
30+
"generateExportsField": true
31+
}
32+
},
33+
"build-npm": {
34+
"executor": "@nx/js:tsc",
35+
"outputs": [
36+
"{options.outputPath}"
37+
],
38+
"options": {
39+
"outputPath": "node_modules/@klerick/json-api-nestjs",
40+
"tsConfig": "libs/json-api/json-api-nestjs/tsconfig.lib.json",
41+
"packageJson": "libs/json-api/json-api-nestjs/package.json",
42+
"main": "libs/json-api/json-api-nestjs/src/index.ts",
43+
"assets": [
44+
"libs/json-api/json-api-nestjs/*.md"
45+
],
2546
"buildableProjectDepsInPackageJsonType": "peerDependencies",
2647
"generateExportsField": true
2748
}
@@ -33,15 +54,21 @@
3354
},
3455
"publish": {
3556
"command": "node tools/scripts/publish.mjs json-api-nestjs {args.ver} {args.tag}",
36-
"dependsOn": ["build"]
57+
"dependsOn": [
58+
"build"
59+
]
3760
},
3861
"test": {
3962
"executor": "@nx/jest:jest",
40-
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
63+
"outputs": [
64+
"{workspaceRoot}/coverage/{projectRoot}"
65+
],
4166
"options": {
4267
"jestConfig": "libs/json-api/json-api-nestjs/jest.config.ts",
4368
"codeCoverage": true,
44-
"coverageReporters": ["json-summary"]
69+
"coverageReporters": [
70+
"json-summary"
71+
]
4572
}
4673
},
4774
"upload-badge": {
@@ -52,7 +79,9 @@
5279
}
5380
],
5481
"options": {
55-
"commands": ["node tools/scripts/upload-badge.mjs json-api-nestjs"],
82+
"commands": [
83+
"node tools/scripts/upload-badge.mjs json-api-nestjs"
84+
],
5685
"cwd": "./",
5786
"parallel": false,
5887
"outputPath": "{workspaceRoot}/libs/json-api/json-api-nestjs"

libs/json-api/json-api-nestjs/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export {
1010
PostData,
1111
PostRelationshipData,
1212
PatchRelationshipData,
13+
QueryOne,
1314
} from './lib/modules/mixin/zod';
1415

1516
export {

libs/json-api/json-api-nestjs/src/lib/mock-utils/microrom/index.ts

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { DynamicModule } from '@nestjs/common';
21
import { Test, TestingModule } from '@nestjs/testing';
32
import { MikroOrmModule } from '@mikro-orm/nestjs';
43
import { EntityManager, MikroORM } from '@mikro-orm/core';

libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/fields.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ type ZodRule<K extends readonly [string, ...string[]]> = ReturnType<
2020
typeof getZodRules<K>
2121
>;
2222

23+
type TargetRelationShape<E extends ObjectLiteral> = {
24+
[K in keyof RelationTree<E>]: ZodRule<RelationTree<E>[K]>;
25+
};
26+
2327
export function zodFieldsQuery<E extends ObjectLiteral>(
2428
fields: ResultGetField<E>['field'],
2529
relationList: RelationTree<E>
@@ -28,9 +32,7 @@ export function zodFieldsQuery<E extends ObjectLiteral>(
2832
target: getZodRules(fields),
2933
};
3034

31-
const relation = {} as {
32-
[K in keyof RelationTree<E>]: ZodRule<RelationTree<E>[K]>;
33-
};
35+
const relation = {} as TargetRelationShape<E>;
3436

3537
for (const [key, value] of ObjectTyped.entries(relationList)) {
3638
relation[key] = getZodRules(value);

libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/filter.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@ type RelationFilterProps<E extends ObjectLiteral> = {
163163
[R in keyof RelationTree<E>]: ZodRulesForRelationShape<TypeOfArray<E[R]>>;
164164
};
165165

166+
type TargetRelationShape<E extends ObjectLiteral> = {
167+
[K in ResultGetField<E>['relations'][number]]: ZodOptional<ZodRuleFilterRelationSchema>;
168+
};
169+
166170
export function zodFilterQuery<E extends ObjectLiteral>(
167171
fields: ResultGetField<E>['field'],
168172
relationTree: RelationTree<E>,
@@ -182,9 +186,7 @@ export function zodFilterQuery<E extends ObjectLiteral>(
182186
...acum,
183187
[item]: zodRuleFilterRelationSchema.optional(),
184188
}),
185-
{} as {
186-
[K in ResultGetField<E>['relations'][number]]: ZodOptional<ZodRuleFilterRelationSchema>;
187-
}
189+
{} as TargetRelationShape<E>
188190
);
189191

190192
const relationFilterProps = ObjectTyped.keys(relationTree).reduce(

libs/json-api/json-api-nestjs/src/lib/modules/mixin/zod/zod-query-schema/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ function zodQueryOne<E extends ObjectLiteral>(
8181
entityRelationStructure: RelationTree<E>,
8282
propsArray: ArrayPropsForEntity<E>,
8383
propsType: AllFieldWithType<E>
84-
) {
84+
): ZodObject<Pick<Shape<E>, QueryField.fields | QueryField.include>, 'strict'> {
8585
return z
8686
.object({
8787
[QueryField.fields]: zodFieldsQuery(

0 commit comments

Comments
 (0)