11import { DataFormatDeclarations , DataFormatFieldToRecordPropertyValue } from '../../dataFormat/types'
2- import { OmitTyped } from '../../helpers/types'
2+ import { ExpandRecursively } from '../../helpers/types'
33import {
44 ExtractRelationNamesOfManyToManyRelations ,
55 Relation ,
99 RelationType ,
1010} from '../../relations/types'
1111
12- type JoinTableRecord <
12+ type JoinTableRecordLinkedFields <
1313 T extends DataFormatDeclarations ,
1414 TFieldRef1DataFormat extends T [ number ] ,
1515 TFieldRef2DataFormat extends T [ number ] ,
@@ -19,15 +19,34 @@ type JoinTableRecord<
1919 [ fieldRef1FieldName in `${TFieldRef1DataFormat [ 'name' ] } ${Capitalize < TFieldRef1Field [ 'name' ] > } `] : DataFormatFieldToRecordPropertyValue < TFieldRef1Field >
2020} & {
2121 [ fieldRef2FieldName in `${TFieldRef2DataFormat [ 'name' ] } ${Capitalize < TFieldRef2Field [ 'name' ] > } `] : DataFormatFieldToRecordPropertyValue < TFieldRef2Field >
22- } & { id : number } // TODO: Do we need to make this configurable?
22+ }
23+
24+ type JoinTableRecord <
25+ T extends DataFormatDeclarations ,
26+ TFieldRef1DataFormat extends T [ number ] ,
27+ TFieldRef2DataFormat extends T [ number ] ,
28+ TFieldRef1Field extends T [ number ] [ 'fields' ] [ number ] ,
29+ TFieldRef2Field extends T [ number ] [ 'fields' ] [ number ] ,
30+ TRelation extends AnyManyToManyRelation < T > = AnyManyToManyRelation < T >
31+ > = ExpandRecursively <
32+ JoinTableRecordLinkedFields < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field >
33+ & {
34+ id : number // TODO: Do we need to make this configurable?
35+ }
36+ & ( TRelation extends { includeDateCreated : boolean }
37+ ? TRelation [ 'includeDateCreated' ] extends true
38+ ? { dateCreated : string }
39+ : { }
40+ : { } )
41+ >
2342
2443type CreateJoinTableRecordOptions <
2544 T extends DataFormatDeclarations ,
2645 TFieldRef1DataFormat extends T [ number ] ,
2746 TFieldRef2DataFormat extends T [ number ] ,
2847 TFieldRef1Field extends T [ number ] [ 'fields' ] [ number ] ,
2948 TFieldRef2Field extends T [ number ] [ 'fields' ] [ number ] ,
30- > = OmitTyped < JoinTableRecord < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field > , 'id' >
49+ > = JoinTableRecordLinkedFields < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field >
3150
3251export type _CreateJoinTableRecordOptions <
3352 T extends DataFormatDeclarations = DataFormatDeclarations ,
@@ -39,14 +58,16 @@ export type _CreateJoinTableRecordOptions<
3958 Extract < Extract < T [ number ] , { name : TRelation [ 'fieldRef1' ] [ 'formatName' ] } > [ 'fields' ] [ number ] , { name : TRelation [ 'fieldRef1' ] [ 'fieldName' ] } > ,
4059 Extract < Extract < T [ number ] , { name : TRelation [ 'fieldRef2' ] [ 'formatName' ] } > [ 'fields' ] [ number ] , { name : TRelation [ 'fieldRef2' ] [ 'fieldName' ] } >
4160>
61+
4262type CreateLinkFunction <
4363 T extends DataFormatDeclarations ,
4464 TFieldRef1DataFormat extends T [ number ] ,
4565 TFieldRef2DataFormat extends T [ number ] ,
4666 TFieldRef1Field extends T [ number ] [ 'fields' ] [ number ] ,
4767 TFieldRef2Field extends T [ number ] [ 'fields' ] [ number ] ,
68+ TRelation extends AnyManyToManyRelation < T > = AnyManyToManyRelation < T > ,
4869> = ( options : CreateJoinTableRecordOptions < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field > ) => (
49- Promise < JoinTableRecord < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field > >
70+ Promise < JoinTableRecord < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field , TRelation > >
5071)
5172
5273export type _CreateLinkFunction <
@@ -57,7 +78,8 @@ export type _CreateLinkFunction<
5778 Extract < T [ number ] , { name : TRelation [ 'fieldRef1' ] [ 'formatName' ] } > ,
5879 Extract < T [ number ] , { name : TRelation [ 'fieldRef2' ] [ 'formatName' ] } > ,
5980 Extract < Extract < T [ number ] , { name : TRelation [ 'fieldRef1' ] [ 'formatName' ] } > [ 'fields' ] [ number ] , { name : TRelation [ 'fieldRef1' ] [ 'fieldName' ] } > ,
60- Extract < Extract < T [ number ] , { name : TRelation [ 'fieldRef2' ] [ 'formatName' ] } > [ 'fields' ] [ number ] , { name : TRelation [ 'fieldRef2' ] [ 'fieldName' ] } >
81+ Extract < Extract < T [ number ] , { name : TRelation [ 'fieldRef2' ] [ 'formatName' ] } > [ 'fields' ] [ number ] , { name : TRelation [ 'fieldRef2' ] [ 'fieldName' ] } > ,
82+ TRelation
6183>
6284
6385type CreateLinksFunction <
@@ -92,10 +114,11 @@ type DeleteLinkByIdFunctionResult<
92114 TFieldRef2DataFormat extends T [ number ] ,
93115 TFieldRef1Field extends T [ number ] [ 'fields' ] [ number ] ,
94116 TFieldRef2Field extends T [ number ] [ 'fields' ] [ number ] ,
95- TOptions extends DeleteLinkByIdFunctionOptions
117+ TOptions extends DeleteLinkByIdFunctionOptions ,
118+ TRelation extends AnyManyToManyRelation < T > = AnyManyToManyRelation < T >
96119> = TOptions extends { return : boolean }
97120 ? TOptions [ 'return' ] extends true
98- ? JoinTableRecord < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field > | null
121+ ? JoinTableRecord < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field , TRelation > | null
99122 : boolean
100123 : boolean
101124
@@ -105,10 +128,11 @@ type DeleteLinkByIdFunction<
105128 TFieldRef2DataFormat extends T [ number ] ,
106129 TFieldRef1Field extends T [ number ] [ 'fields' ] [ number ] ,
107130 TFieldRef2Field extends T [ number ] [ 'fields' ] [ number ] ,
131+ TRelation extends AnyManyToManyRelation < T > = AnyManyToManyRelation < T >
108132> = < TOptions extends DeleteLinkByIdFunctionOptions = DeleteLinkByIdFunctionOptions > (
109133 options : TOptions
110134) => Promise <
111- DeleteLinkByIdFunctionResult < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field , TOptions >
135+ DeleteLinkByIdFunctionResult < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field , TOptions , TRelation >
112136>
113137
114138export type _DeleteLinkByIdFunction <
@@ -128,12 +152,13 @@ export type _JoinTableStore<
128152 TFieldRef2DataFormat extends T [ number ] ,
129153 TFieldRef1Field extends T [ number ] [ 'fields' ] [ number ] ,
130154 TFieldRef2Field extends T [ number ] [ 'fields' ] [ number ] ,
155+ TRelation extends AnyManyToManyRelation < T > = AnyManyToManyRelation < T > ,
131156> = {
132157 provision : ( ) => Promise < void >
133158 unprovision : ( ) => Promise < void >
134- createlink : CreateLinkFunction < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field >
135- createLinks : CreateLinksFunction < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field >
136- deleteLinkById : DeleteLinkByIdFunction < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field >
159+ create : CreateLinkFunction < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field , TRelation >
160+ createMultiple : CreateLinksFunction < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field >
161+ deleteById : DeleteLinkByIdFunction < T , TFieldRef1DataFormat , TFieldRef2DataFormat , TFieldRef1Field , TFieldRef2Field , TRelation >
137162}
138163
139164type AnyManyToManyRelation < T extends DataFormatDeclarations > =
@@ -147,7 +172,8 @@ export type JoinTableStore<
147172 Extract < T [ number ] , { name : TRelation [ 'fieldRef1' ] [ 'formatName' ] } > ,
148173 Extract < T [ number ] , { name : TRelation [ 'fieldRef2' ] [ 'formatName' ] } > ,
149174 Extract < Extract < T [ number ] , { name : TRelation [ 'fieldRef1' ] [ 'formatName' ] } > [ 'fields' ] [ number ] , { name : TRelation [ 'fieldRef1' ] [ 'fieldName' ] } > ,
150- Extract < Extract < T [ number ] , { name : TRelation [ 'fieldRef2' ] [ 'formatName' ] } > [ 'fields' ] [ number ] , { name : TRelation [ 'fieldRef2' ] [ 'fieldName' ] } >
175+ Extract < Extract < T [ number ] , { name : TRelation [ 'fieldRef2' ] [ 'formatName' ] } > [ 'fields' ] [ number ] , { name : TRelation [ 'fieldRef2' ] [ 'fieldName' ] } > ,
176+ TRelation
151177>
152178
153179export type JoinTableStoresDict <
0 commit comments