1
1
// MEMO: The tests for this module are covered by `e2e/*.e2e.ts`.
2
2
3
- import {
4
- ResolvedFields ,
5
- DefaultFieldsResolver ,
6
- InputFieldsResolver ,
7
- resolveFields ,
8
- FieldResolver ,
9
- } from './field-resolver.js' ;
3
+ import { ResolvedFields , FieldsResolver , resolveFields , FieldResolver } from './field-resolver.js' ;
10
4
import { getSequenceCounter , resetSequence } from './sequence.js' ;
11
5
import { Merge , StrictlyPick } from './util.js' ;
12
6
13
- export type Traits < OptionalType extends Record < string , unknown > , TransientFields extends Record < string , unknown > > = {
7
+ export type Traits < Type extends Record < string , unknown > , TransientFields extends Record < string , unknown > > = {
14
8
[ traitName : string ] : {
15
- defaultFields : InputFieldsResolver < OptionalType & TransientFields > ;
9
+ defaultFields : FieldsResolver < Type & TransientFields > ;
16
10
} ;
17
11
} ;
18
12
19
13
export interface TypeFactoryDefineOptions <
20
- OptionalType extends Record < string , unknown > ,
14
+ Type extends Record < string , unknown > ,
21
15
TransientFields extends Record < string , unknown > ,
22
- _DefaultFieldsResolver extends DefaultFieldsResolver < OptionalType & TransientFields > ,
23
- _Traits extends Traits < OptionalType , TransientFields > ,
16
+ _DefaultFieldsResolver extends FieldsResolver < Type & TransientFields > ,
17
+ _Traits extends Traits < Type , TransientFields > ,
24
18
> {
25
19
defaultFields : _DefaultFieldsResolver ;
26
20
traits ?: _Traits ;
27
21
}
28
22
29
23
export interface TypeFactoryInterface <
30
- OptionalType extends Record < string , unknown > ,
24
+ Type extends Record < string , unknown > ,
31
25
TransientFields extends Record < string , unknown > ,
32
26
// NOTE: The constraints of _DefaultFieldsResolver are loose so that `Merge<_DefaultFieldsResolver, _Traits[T]['defaultFields']>` is accepted.
33
- _DefaultFieldsResolver extends Partial <
34
- Record < keyof OptionalType , FieldResolver < OptionalType & TransientFields , unknown > >
35
- > ,
36
- _Traits extends Traits < OptionalType , TransientFields > ,
27
+ _DefaultFieldsResolver extends Partial < Record < keyof Type , FieldResolver < Type & TransientFields , unknown > > > ,
28
+ _Traits extends Traits < Type , TransientFields > ,
37
29
> {
38
- build ( ) : Promise < StrictlyPick < Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < { } > > , keyof OptionalType > > ;
39
- build < T extends InputFieldsResolver < OptionalType & TransientFields > > (
30
+ build ( ) : Promise < StrictlyPick < Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < { } > > , keyof Type > > ;
31
+ build < T extends FieldsResolver < Type & TransientFields > > (
40
32
inputFieldsResolver : T ,
41
- ) : Promise < StrictlyPick < Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < T > > , keyof OptionalType > > ;
33
+ ) : Promise < StrictlyPick < Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < T > > , keyof Type > > ;
42
34
buildList (
43
35
count : number ,
44
- ) : Promise < StrictlyPick < Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < { } > > , keyof OptionalType > [ ] > ;
45
- buildList < T extends InputFieldsResolver < OptionalType & TransientFields > > (
36
+ ) : Promise < StrictlyPick < Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < { } > > , keyof Type > [ ] > ;
37
+ buildList < T extends FieldsResolver < Type & TransientFields > > (
46
38
count : number ,
47
39
inputFieldsResolver : T ,
48
- ) : Promise < StrictlyPick < Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < T > > , keyof OptionalType > [ ] > ;
40
+ ) : Promise < StrictlyPick < Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < T > > , keyof Type > [ ] > ;
49
41
use < T extends keyof _Traits > (
50
42
traitName : T ,
51
- ) : TypeFactoryInterface <
52
- OptionalType ,
53
- TransientFields ,
54
- Merge < _DefaultFieldsResolver , _Traits [ T ] [ 'defaultFields' ] > ,
55
- _Traits
56
- > ;
43
+ ) : TypeFactoryInterface < Type , TransientFields , Merge < _DefaultFieldsResolver , _Traits [ T ] [ 'defaultFields' ] > , _Traits > ;
57
44
resetSequence ( ) : void ;
58
45
}
59
46
60
47
export function defineTypeFactoryInternal <
61
- OptionalType extends Record < string , unknown > ,
48
+ Type extends Record < string , unknown > ,
62
49
TransientFields extends Record < string , unknown > ,
63
- _DefaultFieldsResolver extends DefaultFieldsResolver < OptionalType & TransientFields > ,
64
- _Traits extends Traits < OptionalType , TransientFields > ,
50
+ _DefaultFieldsResolver extends FieldsResolver < Type & TransientFields > ,
51
+ _Traits extends Traits < Type , TransientFields > ,
65
52
> (
66
- typeFieldNames : readonly ( keyof OptionalType ) [ ] ,
53
+ typeFieldNames : readonly ( keyof Type ) [ ] ,
67
54
{
68
55
defaultFields : defaultFieldsResolver ,
69
56
traits,
70
- } : TypeFactoryDefineOptions < OptionalType , TransientFields , _DefaultFieldsResolver , _Traits > ,
71
- ) : TypeFactoryInterface < OptionalType , TransientFields , _DefaultFieldsResolver , _Traits > {
57
+ } : TypeFactoryDefineOptions < Type , TransientFields , _DefaultFieldsResolver , _Traits > ,
58
+ ) : TypeFactoryInterface < Type , TransientFields , _DefaultFieldsResolver , _Traits > {
72
59
const seqKey = { } ;
73
60
const getSeq = ( ) => getSequenceCounter ( seqKey ) ;
74
61
return {
75
- async build < T extends InputFieldsResolver < OptionalType & TransientFields > > (
62
+ async build < T extends FieldsResolver < Type & TransientFields > > (
76
63
inputFieldsResolver ?: T ,
77
- ) : Promise < StrictlyPick < Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < T > > , keyof OptionalType > > {
64
+ ) : Promise < StrictlyPick < Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < T > > , keyof Type > > {
78
65
const seq = getSeq ( ) ;
79
- return resolveFields < OptionalType , TransientFields , _DefaultFieldsResolver , T > (
66
+ return resolveFields < Type , TransientFields , _DefaultFieldsResolver , T > (
80
67
typeFieldNames ,
81
68
seq ,
82
69
defaultFieldsResolver ,
83
70
inputFieldsResolver ?? ( { } as T ) ,
84
71
) ;
85
72
} ,
86
- async buildList < T extends InputFieldsResolver < OptionalType & TransientFields > > (
73
+ async buildList < T extends FieldsResolver < Type & TransientFields > > (
87
74
count : number ,
88
75
inputFieldsResolver ?: T ,
89
- ) : Promise < StrictlyPick < Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < T > > , keyof OptionalType > [ ] > {
90
- const array : StrictlyPick <
91
- Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < T > > ,
92
- keyof OptionalType
93
- > [ ] = [ ] ;
76
+ ) : Promise < StrictlyPick < Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < T > > , keyof Type > [ ] > {
77
+ const array : StrictlyPick < Merge < ResolvedFields < _DefaultFieldsResolver > , ResolvedFields < T > > , keyof Type > [ ] = [ ] ;
94
78
for ( let i = 0 ; i < count ; i ++ ) {
95
79
if ( inputFieldsResolver ) {
96
80
// eslint-disable-next-line no-await-in-loop, @typescript-eslint/no-explicit-any
@@ -105,7 +89,7 @@ export function defineTypeFactoryInternal<
105
89
use < T extends keyof _Traits > (
106
90
traitName : T ,
107
91
) : TypeFactoryInterface <
108
- OptionalType ,
92
+ Type ,
109
93
TransientFields ,
110
94
Merge < _DefaultFieldsResolver , _Traits [ T ] [ 'defaultFields' ] > ,
111
95
_Traits
0 commit comments