Skip to content

Commit e4a6c3b

Browse files
authored
Merge pull request #148 from webpack/bugfix/js-workaround
add workaround for jsdoc-style typescript bug
2 parents 0c4aacb + 302b732 commit e4a6c3b

File tree

1 file changed

+24
-19
lines changed

1 file changed

+24
-19
lines changed

tapable.d.ts

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ type Append<T extends any[], U> = {
2020
}[Measure<T["length"]>];
2121
type AsArray<T> = T extends any[] ? T : [T];
2222

23+
declare class UnsetAdditionalOptions {
24+
_UnsetAdditionalOptions: true
25+
}
26+
type IfSet<X> = X extends UnsetAdditionalOptions ? {} : X;
27+
2328
type Callback<E, T> = (error: E | null, result?: T) => void;
2429
type InnerCallback<E, T> = (error?: E | null | false, result?: T) => void;
2530

@@ -37,55 +42,55 @@ type TapOptions = {
3742
stage?: number;
3843
};
3944

40-
interface HookInterceptor<T, R, AdditionalOptions = {}> {
45+
interface HookInterceptor<T, R, AdditionalOptions = UnsetAdditionalOptions> {
4146
name?: string;
42-
tap?: (tap: FullTap & AdditionalOptions) => void;
47+
tap?: (tap: FullTap & IfSet<AdditionalOptions>) => void;
4348
call?: (...args: any[]) => void;
4449
loop?: (...args: any[]) => void;
4550
error?: (err: Error) => void;
4651
result?: (result: R) => void;
4752
done?: () => void;
48-
register?: (tap: FullTap & AdditionalOptions) => FullTap & AdditionalOptions;
53+
register?: (tap: FullTap & IfSet<AdditionalOptions>) => FullTap & IfSet<AdditionalOptions>;
4954
}
5055

5156
type ArgumentNames<T extends any[]> = FixedSizeArray<T["length"], string>;
5257

53-
declare class Hook<T, R, AdditionalOptions = {}> {
58+
declare class Hook<T, R, AdditionalOptions = UnsetAdditionalOptions> {
5459
constructor(args?: ArgumentNames<AsArray<T>>, name?: string);
5560
name: string | undefined;
5661
intercept(interceptor: HookInterceptor<T, R, AdditionalOptions>): void;
5762
isUsed(): boolean;
5863
callAsync(...args: Append<AsArray<T>, Callback<Error, R>>): void;
5964
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>;
6267
}
6368

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> {
6570
call(...args: AsArray<T>): R;
6671
}
6772

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> {}
7176

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> {
7378
tapAsync(
74-
options: string | Tap & AdditionalOptions,
79+
options: string | Tap & IfSet<AdditionalOptions>,
7580
fn: (...args: Append<AsArray<T>, InnerCallback<Error, R>>) => void
7681
): void;
7782
tapPromise(
78-
options: string | Tap & AdditionalOptions,
83+
options: string | Tap & IfSet<AdditionalOptions>,
7984
fn: (...args: AsArray<T>) => Promise<R>
8085
): void;
8186
}
8287

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> {}
8994

9095
type HookFactory<H> = (key: any, hook?: H) => H;
9196

0 commit comments

Comments
 (0)