Skip to content

Commit aafdf3f

Browse files
committed
🐞 fix: types for nested fetched relations
1 parent 6a3ef48 commit aafdf3f

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

lib/client/types.ts

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { argsKey } from "./request";
2-
import type { RequireAtLeastOneFieldSet, UnArray } from "./utilTypes";
2+
import type { RequireAtLeastOneFieldSet, UnArray, UnFunc } from "./utilTypes";
33

44
//TODO: Find out how to sanely refactor these types
55

@@ -27,13 +27,19 @@ type QueryableObjectField<T> =
2727
) => QueryResponse extends null
2828
? Response<
2929
QueryResponse extends Array<any>
30-
? ApplySelection<NonNullable<UnArray<QueryResponse>>, Selected>[]
31-
: ApplySelection<NonNullable<UnArray<QueryResponse>>, Selected>
30+
? ApplySelection<
31+
NonNullable<UnArray<UnFunc<QueryResponse>>>,
32+
Selected
33+
>[]
34+
: ApplySelection<
35+
NonNullable<UnArray<UnFunc<QueryResponse>>>,
36+
Selected
37+
>
3238
> | null
3339
: Response<
3440
QueryResponse extends Array<any>
35-
? ApplySelection<UnArray<QueryResponse>, Selected>[]
36-
: ApplySelection<UnArray<QueryResponse>, Selected>
41+
? ApplySelection<UnArray<UnFunc<QueryResponse>>, Selected>[]
42+
: ApplySelection<UnArray<UnFunc<QueryResponse>>, Selected>
3743
>
3844
: // otherwise this is just types as a simple field
3945
Response<T>;
@@ -54,8 +60,13 @@ export type ApplySelection<Object, Selection> = {
5460
p: infer _P,
5561
) => infer _A
5662
? ReturnType<Object[Key]> extends Array<any>
57-
? Array<ApplySelection<UnArray<ReturnType<Object[Key]>>, Selection[Key]>>
58-
: ApplySelection<UnArray<Object[Key]>, Selection[Key]>
63+
? Array<
64+
ApplySelection<
65+
UnArray<UnFunc<ReturnType<Object[Key]>>>,
66+
Selection[Key]
67+
>
68+
>
69+
: ApplySelection<UnArray<UnFunc<Object[Key]>>, Selection[Key]>
5970
: Object[Key];
6071
};
6172

lib/client/utilTypes.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
export type UnArray<T> = T extends Array<infer U> ? U : T;
22

3+
export type UnFunc<T> = T extends () => infer A ? A : T;
4+
35
export type UnArrayFields<T> = {
46
[K in keyof T]: T[K] extends Array<any> ? UnArray<T[K]> : T[K];
57
};

0 commit comments

Comments
 (0)