@@ -94,15 +94,30 @@ export interface TsResolverOptions
94
94
extensions ?: string [ ]
95
95
}
96
96
97
+ type InternalResolverOptions = Required <
98
+ Pick <
99
+ ResolveOptions ,
100
+ | 'conditionNames'
101
+ | 'extensionAlias'
102
+ | 'extensions'
103
+ | 'mainFields'
104
+ | 'useSyncFileSystemCalls'
105
+ >
106
+ > &
107
+ ResolveOptions &
108
+ TsResolverOptions
109
+
97
110
const fileSystem = fs as FileSystem
98
111
99
112
const JS_EXT_PATTERN = / \. (?: [ c m ] j s | j s x ? ) $ /
100
113
const RELATIVE_PATH_PATTERN = / ^ \. { 1 , 2 } (?: \/ .* ) ? $ /
101
114
102
- let mappersCachedOptions : TsResolverOptions
115
+ let cachedOptions : InternalResolverOptions | undefined
116
+
117
+ let mappersCachedOptions : InternalResolverOptions
103
118
let mappers : Array < ( ( specifier : string ) => string [ ] ) | null > | undefined
104
119
105
- let resolverCachedOptions : TsResolverOptions
120
+ let resolverCachedOptions : InternalResolverOptions
106
121
let resolver : Resolver | undefined
107
122
108
123
/**
@@ -119,30 +134,21 @@ export function resolve(
119
134
found : boolean
120
135
path ?: string | null
121
136
} {
122
- const opts : Required <
123
- Pick <
124
- ResolveOptions ,
125
- | 'conditionNames'
126
- | 'extensionAlias'
127
- | 'extensions'
128
- | 'mainFields'
129
- | 'useSyncFileSystemCalls'
130
- >
131
- > &
132
- ResolveOptions &
133
- TsResolverOptions = {
134
- ...options ,
135
- conditionNames : options ?. conditionNames ?? defaultConditionNames ,
136
- extensions : options ?. extensions ?? defaultExtensions ,
137
- extensionAlias : options ?. extensionAlias ?? defaultExtensionAlias ,
138
- mainFields : options ?. mainFields ?? defaultMainFields ,
139
- fileSystem,
140
- useSyncFileSystemCalls : true ,
137
+ if ( ! cachedOptions || cachedOptions !== options ) {
138
+ cachedOptions = {
139
+ ...options ,
140
+ conditionNames : options ?. conditionNames ?? defaultConditionNames ,
141
+ extensions : options ?. extensions ?? defaultExtensions ,
142
+ extensionAlias : options ?. extensionAlias ?? defaultExtensionAlias ,
143
+ mainFields : options ?. mainFields ?? defaultMainFields ,
144
+ fileSystem,
145
+ useSyncFileSystemCalls : true ,
146
+ }
141
147
}
142
148
143
- if ( ! resolver || resolverCachedOptions !== opts ) {
144
- resolver = ResolverFactory . createResolver ( opts )
145
- resolverCachedOptions = opts
149
+ if ( ! resolver || resolverCachedOptions !== cachedOptions ) {
150
+ resolver = ResolverFactory . createResolver ( cachedOptions )
151
+ resolverCachedOptions = cachedOptions
146
152
}
147
153
148
154
log ( 'looking for:' , source )
@@ -159,9 +165,9 @@ export function resolve(
159
165
}
160
166
}
161
167
162
- initMappers ( opts )
168
+ initMappers ( cachedOptions )
163
169
164
- const mappedPath = getMappedPath ( source , file , opts . extensions , true )
170
+ const mappedPath = getMappedPath ( source , file , cachedOptions . extensions , true )
165
171
if ( mappedPath ) {
166
172
log ( 'matched ts path:' , mappedPath )
167
173
}
@@ -183,7 +189,7 @@ export function resolve(
183
189
// if path is neither absolute nor relative
184
190
if (
185
191
( JS_EXT_PATTERN . test ( foundNodePath ! ) ||
186
- ( opts . alwaysTryTypes && ! foundNodePath ) ) &&
192
+ ( cachedOptions . alwaysTryTypes && ! foundNodePath ) ) &&
187
193
! / ^ @ t y p e s [ / \\ ] / . test ( source ) &&
188
194
! path . isAbsolute ( source ) &&
189
195
! source . startsWith ( '.' )
@@ -304,7 +310,7 @@ function getMappedPath(
304
310
return paths [ 0 ]
305
311
}
306
312
307
- function initMappers ( options : TsResolverOptions ) {
313
+ function initMappers ( options : InternalResolverOptions ) {
308
314
if ( mappers && mappersCachedOptions === options ) {
309
315
return
310
316
}
0 commit comments