@@ -5,18 +5,19 @@ import * as Options from "./options";
55import * as Logger from "./logger" ;
66import * as fs from "fs" ;
77import { ResolvePluginInstance , Resolver } from "webpack" ;
8- import { ResolveRequest , ResolveContext } from "enhanced-resolve" ;
8+ import { AsyncSeriesBailHook } from "tapable" ;
9+ import { ResolveContext , ResolveRequest } from "enhanced-resolve" ;
10+
11+ type TapAsyncCallback = Parameters <
12+ AsyncSeriesBailHook <
13+ [ ResolveRequest , ResolveContext ] ,
14+ null | ResolveRequest
15+ > [ "tapAsync" ]
16+ > [ 1 ] ;
17+
18+ type TapAsyncInnerCallback = Parameters < TapAsyncCallback > [ 2 ] ;
919
1020type FileSystem = Resolver [ "fileSystem" ] ;
11- type TapAsyncCallback = (
12- request : ResolveRequest ,
13- context : ResolveContext ,
14- callback : TapAsyncInnerCallback
15- ) => void ;
16- type TapAsyncInnerCallback = (
17- error ?: Error | null | false ,
18- result ?: null | ResolveRequest
19- ) => void ;
2021
2122export interface LegacyResolverPlugin {
2223 readonly apply : ( resolver : LegacyResolver ) => void ;
@@ -28,7 +29,12 @@ export interface LegacyResolver {
2829 readonly doResolve : doResolveLegacy | doResolve ;
2930 readonly join : ( relativePath : string , innerRequest : Request ) => Request ;
3031 readonly fileSystem : LegacyResolverFileSystem ;
31- readonly getHook : ( hook : string ) => Tapable ;
32+ readonly getHook : (
33+ hook : string
34+ ) => AsyncSeriesBailHook <
35+ [ ResolveRequest , ResolveContext ] ,
36+ null | ResolveRequest
37+ > ;
3238}
3339
3440export type doResolveLegacy = (
@@ -39,14 +45,20 @@ export type doResolveLegacy = (
3945) => void ;
4046
4147export type doResolve = (
42- hook : Tapable ,
48+ hook : AsyncSeriesBailHook <
49+ [ ResolveRequest , ResolveContext ] ,
50+ null | ResolveRequest
51+ > ,
4352 req : Request ,
4453 message : string ,
4554 resolveContext : LegacyResolveContext ,
4655 callback : Callback
4756) => void ;
4857
49- export type ReadJsonCallback = ( error : Error | undefined , result ?: { } ) => void ;
58+ export type ReadJsonCallback = (
59+ error : Error | undefined | null ,
60+ result ?: { }
61+ ) => void ;
5062
5163export type ReadJson = ( path2 : string , callback : ReadJsonCallback ) => void ;
5264
@@ -58,17 +70,6 @@ export interface LegacyResolveContext {
5870 missing ?: string ;
5971}
6072
61- export interface Tapable {
62- readonly tapAsync : (
63- options : TapableOptions ,
64- callback : TapAsyncCallback
65- ) => void ;
66- }
67-
68- export interface TapableOptions {
69- readonly name : string ;
70- }
71-
7273export type ResolverCallbackLegacy = (
7374 request : Request ,
7475 callback : Callback
@@ -120,7 +121,9 @@ export interface Callback {
120121// eslint-disable-next-line no-redeclare
121122const getInnerRequest : getInnerRequest = require ( "enhanced-resolve/lib/getInnerRequest" ) ;
122123
123- export class TsconfigPathsPlugin implements ResolvePluginInstance {
124+ export class TsconfigPathsPlugin
125+ implements Exclude < ResolvePluginInstance , Function >
126+ {
124127 source : string = "described-resolve" ;
125128 target : string = "resolve" ;
126129
@@ -216,12 +219,12 @@ export class TsconfigPathsPlugin implements ResolvePluginInstance {
216219 ) ;
217220 } else if ( "plugin" in resolver ) {
218221 // This is the legacy (Webpack < 4.0.0) way of using the plugin system.
219- const legacyResolver = ( resolver as unknown ) as LegacyResolver ;
222+ const legacyResolver = resolver as unknown as LegacyResolver ;
220223 legacyResolver . plugin (
221224 this . source ,
222225 createPluginLegacy (
223226 this . matchPath ,
224- ( resolver as unknown ) as LegacyResolver ,
227+ resolver as unknown as LegacyResolver ,
225228 this . absoluteBaseUrl ,
226229 this . target ,
227230 this . extensions
@@ -251,7 +254,10 @@ function createPluginCallback(
251254 baseMatchPath : TsconfigPaths . MatchPathAsync ,
252255 resolver : Resolver ,
253256 baseAbsoluteBaseUrl : string ,
254- hook : Tapable ,
257+ hook : AsyncSeriesBailHook <
258+ [ ResolveRequest , ResolveContext ] ,
259+ null | ResolveRequest
260+ > ,
255261 extensions : ReadonlyArray < string >
256262) : TapAsyncCallback {
257263 const fileExistAsync = createFileExistAsync ( resolver . fileSystem ) ;
@@ -420,7 +426,7 @@ function createPluginLegacy(
420426}
421427
422428function readJson (
423- fileSystem : FileSystem ,
429+ fileSystem : FileSystem | LegacyResolverFileSystem ,
424430 path2 : string ,
425431 callback : ReadJsonCallback
426432) : void {
@@ -447,7 +453,7 @@ function readJson(
447453}
448454
449455function createReadJsonAsync (
450- filesystem : FileSystem
456+ filesystem : FileSystem | LegacyResolverFileSystem
451457) : TsconfigPaths . ReadJsonAsync {
452458 // eslint-disable-next-line @typescript-eslint/no-explicit-any
453459 return ( path2 : string , callback2 : ( err ?: Error , content ?: any ) => void ) => {
@@ -463,7 +469,7 @@ function createReadJsonAsync(
463469}
464470
465471function createFileExistAsync (
466- filesystem : FileSystem
472+ filesystem : FileSystem | LegacyResolverFileSystem
467473) : TsconfigPaths . FileExistsAsync {
468474 return (
469475 path2 : string ,
0 commit comments