1
+ import type { Resolver } from "enhanced-resolve"
1
2
import fs from "fs"
2
3
import ts from "typescript"
3
4
import { convertLogLevel , createHandler , createLogger , LogFunc , LogLevel , RegisterOptions } from "typescript-paths"
@@ -15,8 +16,8 @@ interface Request {
15
16
descriptionFileRoot : string
16
17
descriptionFileData : unknown
17
18
relativePath : string
18
- context : {
19
- issuer : string
19
+ context ? : {
20
+ issuer ? : string
20
21
}
21
22
}
22
23
@@ -37,36 +38,30 @@ export class TsPathsResolvePlugin {
37
38
falllback : moduleName => fs . existsSync ( moduleName ) ,
38
39
} )
39
40
}
40
- apply ( compiler : Compiler ) {
41
- compiler . resolverFactory . hooks . resolver . for ( "normal" ) . tap ( PLUGIN_NAME , resolver => {
42
- resolver . hooks . resolve . tapAsync ( PLUGIN_NAME , ( request , context , callback ) => {
43
- const innerRequest = request . request || request . path
44
- if ( ! innerRequest || request . module === false ) {
45
- return callback ( )
46
- }
47
-
48
- const importer = ( request as Request ) . context . issuer
49
- if ( ! importer ) {
50
- return callback ( )
51
- }
52
-
53
- const moduleName = this . handler ?.( innerRequest , importer )
54
- if ( ! moduleName ) {
55
- return callback ( )
56
- }
57
-
58
- this . log ( LogLevel . Debug , `${ innerRequest } -> ${ moduleName } ` )
59
-
60
- return resolver . doResolve (
61
- resolver . hooks . resolve ,
62
- { ...request , request : moduleName } ,
63
- "" ,
64
- context ,
65
- callback ,
66
- )
67
- } )
41
+ apply ( c : Compiler | Resolver ) {
42
+ if ( this . isRsolver ( c ) ) {
43
+ this . setup ( c )
44
+ return
45
+ }
46
+ c . resolverFactory . hooks . resolver . for ( "normal" ) . tap ( PLUGIN_NAME , this . setup . bind ( this ) )
47
+ }
48
+ setup ( resolver : Resolver ) {
49
+ const target = resolver . ensureHook ( "resolve" )
50
+ const hook = resolver . getHook ( "described-resolve" )
51
+ hook . tapAsync ( PLUGIN_NAME , ( request , resolveContext , callback ) => {
52
+ const innerRequest = request . request || request . path
53
+ if ( ! innerRequest || ! request . module ) return callback ( )
54
+ const importer = ( request as Request ) . context ?. issuer
55
+ if ( ! importer ) return callback ( )
56
+ const moduleName = this . handler ?.( innerRequest , importer )
57
+ if ( ! moduleName ) return callback ( )
58
+ this . log ( LogLevel . Debug , `${ innerRequest } -> ${ moduleName } ` )
59
+ return resolver . doResolve ( target , { ...request , request : moduleName } , "" , resolveContext , callback )
68
60
} )
69
61
}
62
+ isRsolver ( obj : any ) : obj is Resolver {
63
+ return typeof obj ?. doResolve === "function"
64
+ }
70
65
}
71
66
72
67
export default TsPathsResolvePlugin
0 commit comments