@@ -20,6 +20,11 @@ type Append<T extends any[], U> = {
20
20
} [ Measure < T [ "length" ] > ] ;
21
21
type AsArray < T > = T extends any [ ] ? T : [ T ] ;
22
22
23
+ declare class UnsetAdditionalOptions {
24
+ _UnsetAdditionalOptions : true
25
+ }
26
+ type IfSet < X > = X extends UnsetAdditionalOptions ? { } : X ;
27
+
23
28
type Callback < E , T > = ( error : E | null , result ?: T ) => void ;
24
29
type InnerCallback < E , T > = ( error ?: E | null | false , result ?: T ) => void ;
25
30
@@ -37,55 +42,55 @@ type TapOptions = {
37
42
stage ?: number ;
38
43
} ;
39
44
40
- interface HookInterceptor < T , R , AdditionalOptions = { } > {
45
+ interface HookInterceptor < T , R , AdditionalOptions = UnsetAdditionalOptions > {
41
46
name ?: string ;
42
- tap ?: ( tap : FullTap & AdditionalOptions ) => void ;
47
+ tap ?: ( tap : FullTap & IfSet < AdditionalOptions > ) => void ;
43
48
call ?: ( ...args : any [ ] ) => void ;
44
49
loop ?: ( ...args : any [ ] ) => void ;
45
50
error ?: ( err : Error ) => void ;
46
51
result ?: ( result : R ) => void ;
47
52
done ?: ( ) => void ;
48
- register ?: ( tap : FullTap & AdditionalOptions ) => FullTap & AdditionalOptions ;
53
+ register ?: ( tap : FullTap & IfSet < AdditionalOptions > ) => FullTap & IfSet < AdditionalOptions > ;
49
54
}
50
55
51
56
type ArgumentNames < T extends any [ ] > = FixedSizeArray < T [ "length" ] , string > ;
52
57
53
- declare class Hook < T , R , AdditionalOptions = { } > {
58
+ declare class Hook < T , R , AdditionalOptions = UnsetAdditionalOptions > {
54
59
constructor ( args ?: ArgumentNames < AsArray < T > > , name ?: string ) ;
55
60
name : string | undefined ;
56
61
intercept ( interceptor : HookInterceptor < T , R , AdditionalOptions > ) : void ;
57
62
isUsed ( ) : boolean ;
58
63
callAsync ( ...args : Append < AsArray < T > , Callback < Error , R > > ) : void ;
59
64
promise ( ...args : AsArray < T > ) : Promise < R > ;
60
- tap ( options : string | Tap & AdditionalOptions , fn : ( ...args : AsArray < T > ) => R ) : void ;
61
- withOptions ( options : TapOptions & AdditionalOptions ) : Hook < T , R > ;
65
+ tap ( options : string | Tap & IfSet < AdditionalOptions > , fn : ( ...args : AsArray < T > ) => R ) : void ;
66
+ withOptions ( options : TapOptions & IfSet < AdditionalOptions > ) : Hook < T , R > ;
62
67
}
63
68
64
- export class SyncHook < T , R = void , AdditionalOptions = { } > extends Hook < T , R , AdditionalOptions > {
69
+ export class SyncHook < T , R = void , AdditionalOptions = UnsetAdditionalOptions > extends Hook < T , R , AdditionalOptions > {
65
70
call ( ...args : AsArray < T > ) : R ;
66
71
}
67
72
68
- export class SyncBailHook < T , R , AdditionalOptions = { } > extends SyncHook < T , R , AdditionalOptions > { }
69
- export class SyncLoopHook < T , AdditionalOptions = { } > extends SyncHook < T , void , AdditionalOptions > { }
70
- export class SyncWaterfallHook < T , AdditionalOptions = { } > extends SyncHook < T , AsArray < T > [ 0 ] , AdditionalOptions > { }
73
+ export class SyncBailHook < T , R , AdditionalOptions = UnsetAdditionalOptions > extends SyncHook < T , R , AdditionalOptions > { }
74
+ export class SyncLoopHook < T , AdditionalOptions = UnsetAdditionalOptions > extends SyncHook < T , void , AdditionalOptions > { }
75
+ export class SyncWaterfallHook < T , AdditionalOptions = UnsetAdditionalOptions > extends SyncHook < T , AsArray < T > [ 0 ] , AdditionalOptions > { }
71
76
72
- declare class AsyncHook < T , R , AdditionalOptions = { } > extends Hook < T , R , AdditionalOptions > {
77
+ declare class AsyncHook < T , R , AdditionalOptions = UnsetAdditionalOptions > extends Hook < T , R , AdditionalOptions > {
73
78
tapAsync (
74
- options : string | Tap & AdditionalOptions ,
79
+ options : string | Tap & IfSet < AdditionalOptions > ,
75
80
fn : ( ...args : Append < AsArray < T > , InnerCallback < Error , R > > ) => void
76
81
) : void ;
77
82
tapPromise (
78
- options : string | Tap & AdditionalOptions ,
83
+ options : string | Tap & IfSet < AdditionalOptions > ,
79
84
fn : ( ...args : AsArray < T > ) => Promise < R >
80
85
) : void ;
81
86
}
82
87
83
- export class AsyncParallelHook < T , AdditionalOptions = { } > extends AsyncHook < T , void , AdditionalOptions > { }
84
- export class AsyncParallelBailHook < T , R , AdditionalOptions = { } > extends AsyncHook < T , R , AdditionalOptions > { }
85
- export class AsyncSeriesHook < T , AdditionalOptions = { } > extends AsyncHook < T , void , AdditionalOptions > { }
86
- export class AsyncSeriesBailHook < T , R , AdditionalOptions = { } > extends AsyncHook < T , R , AdditionalOptions > { }
87
- export class AsyncSeriesLoopHook < T , AdditionalOptions = { } > extends AsyncHook < T , void , AdditionalOptions > { }
88
- export class AsyncSeriesWaterfallHook < T , AdditionalOptions = { } > extends AsyncHook < T , AsArray < T > [ 0 ] , AdditionalOptions > { }
88
+ export class AsyncParallelHook < T , AdditionalOptions = UnsetAdditionalOptions > extends AsyncHook < T , void , AdditionalOptions > { }
89
+ export class AsyncParallelBailHook < T , R , AdditionalOptions = UnsetAdditionalOptions > extends AsyncHook < T , R , AdditionalOptions > { }
90
+ export class AsyncSeriesHook < T , AdditionalOptions = UnsetAdditionalOptions > extends AsyncHook < T , void , AdditionalOptions > { }
91
+ export class AsyncSeriesBailHook < T , R , AdditionalOptions = UnsetAdditionalOptions > extends AsyncHook < T , R , AdditionalOptions > { }
92
+ export class AsyncSeriesLoopHook < T , AdditionalOptions = UnsetAdditionalOptions > extends AsyncHook < T , void , AdditionalOptions > { }
93
+ export class AsyncSeriesWaterfallHook < T , AdditionalOptions = UnsetAdditionalOptions > extends AsyncHook < T , AsArray < T > [ 0 ] , AdditionalOptions > { }
89
94
90
95
type HookFactory < H > = ( key : any , hook ?: H ) => H ;
91
96
0 commit comments