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