1
1
import {
2
2
type ResolvedFields ,
3
3
type DefaultFieldsResolver ,
4
- type TransientFieldsResolver ,
5
4
type InputFieldsResolver ,
6
5
resolveFields ,
7
6
lazy ,
@@ -27,39 +26,38 @@ export type User = {
27
26
lastName : string ;
28
27
fullName : string ;
29
28
} ;
29
+ const BookFieldNames = [ 'id' , 'title' , 'author' ] as const ;
30
+ const AuthorFieldNames = [ 'id' , 'name' , 'books' ] as const ;
31
+ const UserFieldNames = [ 'id' , 'firstName' , 'lastName' , 'fullName' ] as const ;
30
32
31
33
// ---------- Book ----------
32
34
33
- interface BookFactoryDefineOptions < TransientFields extends Record < string , unknown > > {
35
+ export interface BookFactoryDefineOptions < TransientFields extends Record < string , unknown > > {
34
36
defaultFields : DefaultFieldsResolver < Book , TransientFields > ;
35
- // TODO: add transientFields to here
36
37
}
37
- interface BookFactoryInterface <
38
+ export interface BookFactoryInterface <
38
39
TransientFields extends Record < string , unknown > ,
39
- TOptions extends BookFactoryDefineOptions < TransientFields > ,
40
+ Options extends BookFactoryDefineOptions < TransientFields > ,
40
41
> {
41
- build ( ) : Promise < ResolvedFields < TOptions [ 'defaultFields' ] > > ;
42
+ build ( ) : Promise < ResolvedFields < Options [ 'defaultFields' ] > > ;
42
43
build < const T extends InputFieldsResolver < Book , TransientFields > > (
43
44
inputFieldsResolver : T ,
44
- ) : Promise < Pick < Merge < ResolvedFields < TOptions [ 'defaultFields' ] > , ResolvedFields < T > > , keyof Book > > ;
45
+ ) : Promise < Pick < Merge < ResolvedFields < Options [ 'defaultFields' ] > , ResolvedFields < T > > , keyof Book > > ;
45
46
resetSequence ( ) : void ;
46
47
}
47
48
48
49
function defineBookFactoryInternal <
49
- _TransientFieldsResolver extends TransientFieldsResolver < Book , Record < string , unknown > > ,
50
- TOptions extends BookFactoryDefineOptions < ResolvedFields < _TransientFieldsResolver > > ,
51
- > (
52
- transientFieldsResolver : _TransientFieldsResolver ,
53
- { defaultFields : defaultFieldsResolver } : TOptions ,
54
- ) : BookFactoryInterface < ResolvedFields < _TransientFieldsResolver > , TOptions > {
50
+ TransientFields extends Record < string , unknown > ,
51
+ Options extends BookFactoryDefineOptions < TransientFields > ,
52
+ > ( { defaultFields : defaultFieldsResolver } : Options ) : BookFactoryInterface < TransientFields , Options > {
55
53
const seqKey = { } ;
56
54
const getSeq = ( ) => getSequenceCounter ( seqKey ) ;
57
55
return {
58
- async build < const T extends InputFieldsResolver < Book , ResolvedFields < _TransientFieldsResolver > > > (
56
+ async build < const T extends InputFieldsResolver < Book , TransientFields > > (
59
57
inputFieldsResolver ?: T ,
60
- ) : Promise < Merge < ResolvedFields < TOptions [ 'defaultFields' ] > , Pick < ResolvedFields < T > , keyof Book > > > {
58
+ ) : Promise < Merge < ResolvedFields < Options [ 'defaultFields' ] > , Pick < ResolvedFields < T > , keyof Book > > > {
61
59
const seq = getSeq ( ) ;
62
- return resolveFields ( seq , defaultFieldsResolver , transientFieldsResolver ?? { } , inputFieldsResolver ?? ( { } as T ) ) ;
60
+ return resolveFields ( BookFieldNames , seq , defaultFieldsResolver , inputFieldsResolver ?? ( { } as T ) ) ;
63
61
} ,
64
62
resetSequence ( ) {
65
63
resetSequence ( seqKey ) ;
@@ -73,60 +71,40 @@ function defineBookFactoryInternal<
73
71
* @param options
74
72
* @returns factory {@link BookFactoryInterface}
75
73
*/
76
- export function defineBookFactory < TOptions extends BookFactoryDefineOptions < { } > > (
77
- options : TOptions ,
78
- ) : BookFactoryInterface < { } , TOptions > {
79
- return defineBookFactoryInternal ( { } , options ) ;
80
- }
81
-
82
- /**
83
- * Define factory for {@link Book} model with transient fields.
84
- *
85
- * @param options
86
- * @returns factory {@link BookFactoryInterface}
87
- */
88
- export function defineBookFactoryWithTransientFields <
89
- _TransientFieldsResolver extends TransientFieldsResolver < Book , Record < string , unknown > > ,
90
- TOptions extends BookFactoryDefineOptions < ResolvedFields < _TransientFieldsResolver > > ,
91
- > (
92
- transientFields : _TransientFieldsResolver ,
93
- options : TOptions ,
94
- ) : BookFactoryInterface < ResolvedFields < _TransientFieldsResolver > , TOptions > {
95
- return defineBookFactoryInternal ( transientFields , options ) ;
74
+ export function defineBookFactory < Options extends BookFactoryDefineOptions < { } > > (
75
+ options : Options ,
76
+ ) : BookFactoryInterface < { } , Options > {
77
+ return defineBookFactoryInternal ( options ) ;
96
78
}
97
79
98
80
// ---------- Author ----------
99
81
100
- interface AuthorFactoryDefineOptions < TransientFields extends Record < string , unknown > > {
82
+ export interface AuthorFactoryDefineOptions < TransientFields extends Record < string , unknown > > {
101
83
defaultFields : DefaultFieldsResolver < Author , TransientFields > ;
102
- // TODO: add transientFields to here
103
84
}
104
- interface AuthorFactoryInterface <
85
+ export interface AuthorFactoryInterface <
105
86
TransientFields extends Record < string , unknown > ,
106
- TOptions extends AuthorFactoryDefineOptions < TransientFields > ,
87
+ Options extends AuthorFactoryDefineOptions < TransientFields > ,
107
88
> {
108
- build ( ) : Promise < ResolvedFields < TOptions [ 'defaultFields' ] > > ;
89
+ build ( ) : Promise < ResolvedFields < Options [ 'defaultFields' ] > > ;
109
90
build < const T extends InputFieldsResolver < Author , TransientFields > > (
110
91
inputFieldsResolver : T ,
111
- ) : Promise < Pick < Merge < ResolvedFields < TOptions [ 'defaultFields' ] > , ResolvedFields < T > > , keyof Author > > ;
92
+ ) : Promise < Pick < Merge < ResolvedFields < Options [ 'defaultFields' ] > , ResolvedFields < T > > , keyof Author > > ;
112
93
resetSequence ( ) : void ;
113
94
}
114
95
115
96
function defineAuthorFactoryInternal <
116
- _TransientFieldsResolver extends TransientFieldsResolver < Author , Record < string , unknown > > ,
117
- TOptions extends AuthorFactoryDefineOptions < ResolvedFields < _TransientFieldsResolver > > ,
118
- > (
119
- transientFieldsResolver : _TransientFieldsResolver ,
120
- { defaultFields : defaultFieldsResolver } : TOptions ,
121
- ) : AuthorFactoryInterface < ResolvedFields < _TransientFieldsResolver > , TOptions > {
97
+ TransientFields extends Record < string , unknown > ,
98
+ Options extends AuthorFactoryDefineOptions < TransientFields > ,
99
+ > ( { defaultFields : defaultFieldsResolver } : Options ) : AuthorFactoryInterface < TransientFields , Options > {
122
100
const seqKey = { } ;
123
101
const getSeq = ( ) => getSequenceCounter ( seqKey ) ;
124
102
return {
125
- async build < const T extends InputFieldsResolver < Author , ResolvedFields < _TransientFieldsResolver > > > (
103
+ async build < const T extends InputFieldsResolver < Author , TransientFields > > (
126
104
inputFieldsResolver ?: T ,
127
- ) : Promise < Merge < ResolvedFields < TOptions [ 'defaultFields' ] > , Pick < ResolvedFields < T > , keyof Author > > > {
105
+ ) : Promise < Merge < ResolvedFields < Options [ 'defaultFields' ] > , Pick < ResolvedFields < T > , keyof Author > > > {
128
106
const seq = getSeq ( ) ;
129
- return resolveFields ( seq , defaultFieldsResolver , transientFieldsResolver ?? { } , inputFieldsResolver ?? ( { } as T ) ) ;
107
+ return resolveFields ( AuthorFieldNames , seq , defaultFieldsResolver , inputFieldsResolver ?? ( { } as T ) ) ;
130
108
} ,
131
109
resetSequence ( ) {
132
110
resetSequence ( seqKey ) ;
@@ -140,60 +118,40 @@ function defineAuthorFactoryInternal<
140
118
* @param options
141
119
* @returns factory {@link AuthorFactoryInterface}
142
120
*/
143
- export function defineAuthorFactory < TOptions extends AuthorFactoryDefineOptions < { } > > (
144
- options : TOptions ,
145
- ) : AuthorFactoryInterface < { } , TOptions > {
146
- return defineAuthorFactoryInternal ( { } , options ) ;
147
- }
148
-
149
- /**
150
- * Define factory for {@link Author} model with transient fields.
151
- *
152
- * @param options
153
- * @returns factory {@link AuthorFactoryInterface}
154
- */
155
- export function defineAuthorFactoryWithTransientFields <
156
- _TransientFieldsResolver extends TransientFieldsResolver < Author , Record < string , unknown > > ,
157
- TOptions extends AuthorFactoryDefineOptions < ResolvedFields < _TransientFieldsResolver > > ,
158
- > (
159
- transientFields : _TransientFieldsResolver ,
160
- options : TOptions ,
161
- ) : AuthorFactoryInterface < ResolvedFields < _TransientFieldsResolver > , TOptions > {
162
- return defineAuthorFactoryInternal ( transientFields , options ) ;
121
+ export function defineAuthorFactory < Options extends AuthorFactoryDefineOptions < { } > > (
122
+ options : Options ,
123
+ ) : AuthorFactoryInterface < { } , Options > {
124
+ return defineAuthorFactoryInternal ( options ) ;
163
125
}
164
126
165
127
// ---------- User ----------
166
128
167
- interface UserFactoryDefineOptions < TransientFields extends Record < string , unknown > > {
129
+ export interface UserFactoryDefineOptions < TransientFields extends Record < string , unknown > > {
168
130
defaultFields : DefaultFieldsResolver < User , TransientFields > ;
169
- // TODO: add transientFields to here
170
131
}
171
- interface UserFactoryInterface <
132
+ export interface UserFactoryInterface <
172
133
TransientFields extends Record < string , unknown > ,
173
- TOptions extends UserFactoryDefineOptions < TransientFields > ,
134
+ Options extends UserFactoryDefineOptions < TransientFields > ,
174
135
> {
175
- build ( ) : Promise < ResolvedFields < TOptions [ 'defaultFields' ] > > ;
136
+ build ( ) : Promise < ResolvedFields < Options [ 'defaultFields' ] > > ;
176
137
build < const T extends InputFieldsResolver < User , TransientFields > > (
177
138
inputFieldsResolver : T ,
178
- ) : Promise < Pick < Merge < ResolvedFields < TOptions [ 'defaultFields' ] > , ResolvedFields < T > > , keyof User > > ;
139
+ ) : Promise < Pick < Merge < ResolvedFields < Options [ 'defaultFields' ] > , ResolvedFields < T > > , keyof User > > ;
179
140
resetSequence ( ) : void ;
180
141
}
181
142
182
143
function defineUserFactoryInternal <
183
- _TransientFieldsResolver extends TransientFieldsResolver < User , Record < string , unknown > > ,
184
- TOptions extends UserFactoryDefineOptions < ResolvedFields < _TransientFieldsResolver > > ,
185
- > (
186
- transientFieldsResolver : _TransientFieldsResolver ,
187
- { defaultFields : defaultFieldsResolver } : TOptions ,
188
- ) : UserFactoryInterface < ResolvedFields < _TransientFieldsResolver > , TOptions > {
144
+ TransientFields extends Record < string , unknown > ,
145
+ Options extends UserFactoryDefineOptions < TransientFields > ,
146
+ > ( { defaultFields : defaultFieldsResolver } : Options ) : UserFactoryInterface < TransientFields , Options > {
189
147
const seqKey = { } ;
190
148
const getSeq = ( ) => getSequenceCounter ( seqKey ) ;
191
149
return {
192
- async build < const T extends InputFieldsResolver < User , ResolvedFields < _TransientFieldsResolver > > > (
150
+ async build < const T extends InputFieldsResolver < User , TransientFields > > (
193
151
inputFieldsResolver ?: T ,
194
- ) : Promise < Merge < ResolvedFields < TOptions [ 'defaultFields' ] > , Pick < ResolvedFields < T > , keyof User > > > {
152
+ ) : Promise < Merge < ResolvedFields < Options [ 'defaultFields' ] > , Pick < ResolvedFields < T > , keyof User > > > {
195
153
const seq = getSeq ( ) ;
196
- return resolveFields ( seq , defaultFieldsResolver , transientFieldsResolver ?? { } , inputFieldsResolver ?? ( { } as T ) ) ;
154
+ return resolveFields ( UserFieldNames , seq , defaultFieldsResolver , inputFieldsResolver ?? ( { } as T ) ) ;
197
155
} ,
198
156
resetSequence ( ) {
199
157
resetSequence ( seqKey ) ;
@@ -207,24 +165,8 @@ function defineUserFactoryInternal<
207
165
* @param options
208
166
* @returns factory {@link UserFactoryInterface}
209
167
*/
210
- export function defineUserFactory < TOptions extends UserFactoryDefineOptions < { } > > (
211
- options : TOptions ,
212
- ) : UserFactoryInterface < { } , TOptions > {
213
- return defineUserFactoryInternal ( { } , options ) ;
214
- }
215
-
216
- /**
217
- * Define factory for {@link User} model with transient fields.
218
- *
219
- * @param options
220
- * @returns factory {@link UserFactoryInterface}
221
- */
222
- export function defineUserFactoryWithTransientFields <
223
- _TransientFieldsResolver extends TransientFieldsResolver < User , Record < string , unknown > > ,
224
- TOptions extends UserFactoryDefineOptions < ResolvedFields < _TransientFieldsResolver > > ,
225
- > (
226
- transientFields : _TransientFieldsResolver ,
227
- options : TOptions ,
228
- ) : UserFactoryInterface < ResolvedFields < _TransientFieldsResolver > , TOptions > {
229
- return defineUserFactoryInternal ( transientFields , options ) ;
168
+ export function defineUserFactory < Options extends UserFactoryDefineOptions < { } > > (
169
+ options : Options ,
170
+ ) : UserFactoryInterface < { } , Options > {
171
+ return defineUserFactoryInternal ( options ) ;
230
172
}
0 commit comments