@@ -33,72 +33,69 @@ export function createIdSelector<P>(
33
33
/// createSelector ///
34
34
//////////////////////
35
35
36
- type ExtractSelectorResult <
37
- T extends ReadonlyArray < Selector < unknown , unknown > >
38
- > = {
39
- [ Index in keyof T ] : T [ Index ] extends Selector < any , infer R > ? R : never
40
- }
41
- type ExtractSelectorInput <
42
- T extends ReadonlyArray < Selector < unknown , unknown > >
43
- > = {
44
- [ Index in keyof T ] : T [ Index ] extends Selector < infer I , any > ? I : never
45
- }
46
- type MergeTypes < T extends ReadonlyArray < unknown > > = T extends [
47
- infer F ,
48
- ...( infer R )
49
- ]
50
- ? F & MergeTypes < R >
51
- : { }
52
-
53
- type ExtractParametricSelectorResult <
54
- T extends ReadonlyArray < ParametricSelector < unknown , unknown , unknown > >
36
+ type ExtractSelectorsResult <
37
+ T extends ReadonlyArray <
38
+ Selector < unknown , unknown > | ParametricSelector < unknown , unknown , unknown >
39
+ >
55
40
> = {
56
- [ Index in keyof T ] : T [ Index ] extends ParametricSelector < any , any , infer R >
57
- ? R
41
+ [ Index in keyof T ] : T [ Index ] extends Selector < any , infer Result >
42
+ ? Result
43
+ : T [ Index ] extends ParametricSelector < any , any , infer Result >
44
+ ? Result
58
45
: never
59
46
}
60
- type ExtractParametricSelectorProps <
61
- T extends ReadonlyArray < ParametricSelector < unknown , unknown , unknown > >
47
+ type ExtractSelectorsInput <
48
+ T extends ReadonlyArray <
49
+ Selector < unknown , unknown > | ParametricSelector < unknown , unknown , unknown >
50
+ >
62
51
> = {
63
- [ Index in keyof T ] : T [ Index ] extends ParametricSelector < any , infer P , any >
64
- ? P
52
+ [ Index in keyof T ] : T [ Index ] extends Selector < infer Input , any >
53
+ ? Input
54
+ : T [ Index ] extends ParametricSelector < infer Input , any , any >
55
+ ? Input
65
56
: never
66
57
}
67
- type ExtractParametricSelectorInput <
58
+ type ExtractSelectorsProps <
68
59
T extends ReadonlyArray < ParametricSelector < unknown , unknown , unknown > >
69
60
> = {
70
- [ Index in keyof T ] : T [ Index ] extends ParametricSelector < infer I , any , any >
71
- ? I
61
+ [ Index in keyof T ] : T [ Index ] extends ParametricSelector < any , infer Props , any >
62
+ ? Props
72
63
: never
73
64
}
65
+ type MergeTypes < T extends ReadonlyArray < unknown > , Acc = { } > = T extends [
66
+ infer Front ,
67
+ ...( infer Tail )
68
+ ]
69
+ ? MergeTypes < Tail , Front & Acc >
70
+ : Acc
74
71
75
72
type EqualityFn < T > = ( a : T , b : T ) => boolean
76
73
interface SelectorCreator {
77
74
<
78
75
T ,
79
76
S extends ReadonlyArray < Selector < any , any > > ,
80
- Args extends ExtractSelectorResult < S >
77
+ Args extends ExtractSelectorsResult < S >
81
78
> (
82
79
selectors : [ ...S ] ,
83
80
combiner : ( ...results : Args ) => T ,
84
81
equalityFn ?: EqualityFn < T >
85
82
) : OutputSelector <
86
- MergeTypes < ExtractSelectorInput < S > > ,
83
+ MergeTypes < ExtractSelectorsInput < S > > ,
87
84
T ,
88
85
( ...results : Args ) => T
89
86
>
90
87
91
88
<
92
89
T ,
93
90
S extends ReadonlyArray < ParametricSelector < any , any , any > > ,
94
- Args extends ExtractParametricSelectorResult < S >
91
+ Args extends ExtractSelectorsResult < S >
95
92
> (
96
93
selectors : [ ...S ] ,
97
94
combiner : ( ...results : Args ) => T ,
98
95
equalityFn ?: EqualityFn < T >
99
96
) : OutputParametricSelector <
100
- MergeTypes < ExtractParametricSelectorInput < S > > ,
101
- MergeTypes < ExtractParametricSelectorProps < S > > ,
97
+ MergeTypes < ExtractSelectorsInput < S > > ,
98
+ MergeTypes < ExtractSelectorsProps < S > > ,
102
99
T ,
103
100
( ...results : Args ) => T
104
101
>
0 commit comments