@@ -37,18 +37,25 @@ module.exports = class TsconfigPathsPlugin {
37
37
apply ( resolver ) {
38
38
const aliasTarget = resolver . ensureHook ( "internal-resolve" ) ;
39
39
const moduleTarget = resolver . ensureHook ( "module" ) ;
40
- const aliasOptionsPromise = this . loadAndConvertPaths ( resolver ) ;
40
+ const aliasResultCachePromise = this . loadAndConvertPaths ( resolver ) ;
41
41
42
42
resolver
43
43
. getHook ( "raw-resolve" )
44
44
. tapAsync (
45
45
"TsconfigPathsPlugin" ,
46
46
async ( request , resolveContext , callback ) => {
47
47
try {
48
- const aliasOptions = await aliasOptionsPromise ;
48
+ const aliasResult = await aliasResultCachePromise ;
49
+ if ( ! aliasResult ) return callback ( ) ;
50
+ const { aliases, fileDependencies } = aliasResult ;
51
+ for ( const fileDependency of fileDependencies ) {
52
+ if ( resolveContext . fileDependencies ) {
53
+ resolveContext . fileDependencies . add ( fileDependency ) ;
54
+ }
55
+ }
49
56
aliasResolveHandler (
50
57
resolver ,
51
- aliasOptions . filter ( ( option ) => option . name !== "*" ) ,
58
+ aliases . filter ( ( option ) => option . name !== "*" ) ,
52
59
aliasTarget ,
53
60
request ,
54
61
resolveContext ,
@@ -66,8 +73,15 @@ module.exports = class TsconfigPathsPlugin {
66
73
"TsconfigPathsPlugin" ,
67
74
async ( request , resolveContext , callback ) => {
68
75
try {
69
- const aliasOptions = await aliasOptionsPromise ;
70
- const directories = aliasOptions
76
+ const aliasResult = await aliasResultCachePromise ;
77
+ if ( ! aliasResult ) return callback ( ) ;
78
+ const { aliases, fileDependencies } = aliasResult ;
79
+ for ( const fileDependency of fileDependencies ) {
80
+ if ( resolveContext . fileDependencies ) {
81
+ resolveContext . fileDependencies . add ( fileDependency ) ;
82
+ }
83
+ }
84
+ const directories = aliases
71
85
. filter ( ( option ) => option . name === "*" )
72
86
. map ( ( option ) => /** @type {string } */ ( option . alias ) ) ;
73
87
if ( directories . length === 0 ) return callback ( ) ;
@@ -90,7 +104,7 @@ module.exports = class TsconfigPathsPlugin {
90
104
/**
91
105
* Load tsconfig.json (and referenced tsconfigs) and convert paths to AliasPlugin format
92
106
* @param {Resolver } resolver the resolver
93
- * @returns {Promise<AliasOption[]> } Array of alias options for AliasPlugin
107
+ * @returns {Promise<{aliases: AliasOption[], fileDependencies: Set<string>} | null > } Array of alias options for AliasPlugin
94
108
*/
95
109
async loadAndConvertPaths ( resolver ) {
96
110
try {
@@ -103,10 +117,16 @@ module.exports = class TsconfigPathsPlugin {
103
117
resolver ,
104
118
configPath ,
105
119
) ;
106
- if ( ! mainOptions ) return [ ] ;
120
+ if ( ! mainOptions ) return null ;
107
121
108
122
/** @type {AliasOption[] } */
109
123
const aliases = [ ] ;
124
+ /** @type {Set<string> } */
125
+ const fileDependencies = new Set ( ) ;
126
+ const result = {
127
+ aliases,
128
+ fileDependencies,
129
+ } ;
110
130
aliases . push (
111
131
...this . convertPathsToAliases (
112
132
resolver ,
@@ -122,6 +142,8 @@ module.exports = class TsconfigPathsPlugin {
122
142
resolve ( JSON . parse ( /** @type {string } */ ( data ) ) ) ;
123
143
} ) ;
124
144
} ) ;
145
+ fileDependencies . add ( configPath ) ;
146
+
125
147
const references = Array . isArray ( tsconfigJson . references )
126
148
? tsconfigJson . references
127
149
: [ ] ;
@@ -157,6 +179,8 @@ module.exports = class TsconfigPathsPlugin {
157
179
refPath ,
158
180
) ;
159
181
if ( ! refOptions ) continue ;
182
+ fileDependencies . add ( refPath ) ;
183
+
160
184
aliases . push (
161
185
...this . convertPathsToAliases (
162
186
resolver ,
@@ -166,9 +190,9 @@ module.exports = class TsconfigPathsPlugin {
166
190
) ;
167
191
}
168
192
169
- return aliases ;
193
+ return result ;
170
194
} catch ( _error ) {
171
- return [ ] ;
195
+ return null ;
172
196
}
173
197
}
174
198
0 commit comments