@@ -4,27 +4,37 @@ import type { AttributesSchema, DefaultLinks, DefaultMeta, RootLinks } from "./s
4
4
5
5
export type RelationshipType = "one" | "one_nullable" | "many" ;
6
6
7
- export type RelationshipDeserializer <
7
+ export type ReferenceRelationshipDeserializer <
8
+ TRelationshipType extends RelationshipType ,
8
9
TResourceType extends string ,
10
+ > = {
11
+ relationshipType : TRelationshipType ;
12
+ resourceType : TResourceType ;
13
+ } ;
14
+
15
+ export type AnyReferenceRelationshipDeserializer = ReferenceRelationshipDeserializer <
16
+ RelationshipType ,
17
+ string
18
+ > ;
19
+
20
+ export type IncludedRelationshipDeserializer <
9
21
TRelationshipType extends RelationshipType ,
10
- TInclude extends AnyResourceDeserializer | undefined ,
11
- > = TInclude extends undefined
12
- ? {
13
- relationshipType : TRelationshipType ;
14
- resourceType : TResourceType ;
15
- }
16
- : {
17
- relationshipType : TRelationshipType ;
18
- include : TInclude ;
19
- } ;
22
+ TInclude extends AnyResourceDeserializer ,
23
+ > = {
24
+ relationshipType : TRelationshipType ;
25
+ include : TInclude ;
26
+ } ;
20
27
21
- export type AnyRelationshipDeserializer = RelationshipDeserializer <
22
- string ,
28
+ export type AnyIncludedRelationshipDeserializer = IncludedRelationshipDeserializer <
23
29
RelationshipType ,
24
- // biome-ignore lint/suspicious/noExplicitAny: required to avoid circular dependency error
25
- ResourceDeserializer < string , AttributesSchema | undefined , any > | undefined
30
+ // biome-ignore lint/suspicious/noExplicitAny: required to avoid circular dependency
31
+ any
26
32
> ;
27
33
34
+ export type AnyRelationshipDeserializer =
35
+ | AnyReferenceRelationshipDeserializer
36
+ | AnyIncludedRelationshipDeserializer ;
37
+
28
38
export type Relationships = Record < string , AnyRelationshipDeserializer > ;
29
39
30
40
export type ResourceDeserializer <
@@ -43,21 +53,22 @@ export type AnyResourceDeserializer = ResourceDeserializer<
43
53
Relationships | undefined
44
54
> ;
45
55
46
- export type InferResourceType < T > = T extends RelationshipDeserializer <
47
- infer U ,
56
+ export type InferResourceType < T > = T extends ReferenceRelationshipDeserializer <
48
57
RelationshipType ,
49
- AnyResourceDeserializer | undefined
58
+ infer U
50
59
>
51
60
? U
52
- : never ;
53
- export type InferRelationshipType < T > = T extends RelationshipDeserializer <
54
- string ,
55
- infer U ,
56
- AnyResourceDeserializer | undefined
57
- >
61
+ : T extends IncludedRelationshipDeserializer < infer U , AnyResourceDeserializer >
62
+ ? U extends AnyResourceDeserializer
63
+ ? U [ "type" ]
64
+ : never
65
+ : never ;
66
+ export type InferRelationshipType < T > = T extends ReferenceRelationshipDeserializer < infer U , string >
58
67
? U
59
- : never ;
60
- export type InferInclude < T > = T extends RelationshipDeserializer < string , RelationshipType , infer U >
68
+ : T extends IncludedRelationshipDeserializer < infer U , AnyResourceDeserializer >
69
+ ? U
70
+ : never ;
71
+ export type InferInclude < T > = T extends IncludedRelationshipDeserializer < RelationshipType , infer U >
61
72
? U
62
73
: never ;
63
74
export type InferType < T > = T extends ResourceDeserializer <
@@ -82,10 +93,10 @@ export type InferRelationships<T> = T extends ResourceDeserializer<
82
93
? U
83
94
: never ;
84
95
85
- type IncludeResult <
86
- TDeserializer extends AnyRelationshipDeserializer ,
87
- TInclude extends AnyResourceDeserializer | undefined = InferInclude < TDeserializer > ,
88
- > = TInclude extends AnyResourceDeserializer ? ResourceResult < TInclude > : { id : string } ;
96
+ type IncludeResult < TDeserializer extends AnyRelationshipDeserializer > =
97
+ TDeserializer extends AnyReferenceRelationshipDeserializer
98
+ ? { id : string }
99
+ : InferInclude < TDeserializer > ;
89
100
90
101
export type RelationshipResult <
91
102
TDeserializer extends AnyRelationshipDeserializer ,
0 commit comments