8
8
import { dirname , isAbsolute , resolve as pathResolve } from 'path' ;
9
9
import pnpResolver from 'jest-pnp-resolver' ;
10
10
import { SyncOpts as UpstreamResolveOptions , sync as resolveSync } from 'resolve' ;
11
- import {
12
- Options as ResolveExportsOptions ,
13
- resolve as resolveExports ,
14
- } from 'resolve.exports' ;
15
- import { resolve as resolveImports } from 'resolve.imports' ;
11
+ import * as resolve from 'resolve.exports' ;
16
12
import {
17
13
findClosestPackageJson ,
18
14
isDirectory ,
@@ -148,28 +144,26 @@ function getPathInModule(
148
144
149
145
const pkg = readPackageCached ( closestPackageJson ) ;
150
146
151
- const resolved = resolveImports (
152
- {
153
- base : options . basedir ,
154
- content : pkg ,
155
- path : dirname ( closestPackageJson ) ,
156
- } ,
157
- path ,
158
- createImportsResolveOptions ( options . conditions ) ,
147
+ const resolved = resolve . imports (
148
+ pkg ,
149
+ path as resolve . Imports . Entry ,
150
+ createResolveOptions ( options . conditions ) ,
159
151
) ;
160
152
161
- if ( ! resolved ) {
153
+ if ( resolved ) {
154
+ const target = resolved [ 0 ] ;
155
+ return target . startsWith ( '.' )
156
+ ? // internal relative filepath
157
+ pathResolve ( dirname ( closestPackageJson ) , target )
158
+ : // this is an external module, re-resolve it
159
+ defaultResolver ( target , options ) ;
160
+ }
161
+
162
+ if ( pkg . imports ) {
162
163
throw new Error (
163
164
'`imports` exists, but no results - this is a bug in Jest. Please report an issue' ,
164
165
) ;
165
166
}
166
-
167
- if ( resolved . startsWith ( '.' ) ) {
168
- return pathResolve ( dirname ( closestPackageJson ) , resolved ) ;
169
- }
170
-
171
- // this is an external module, re-resolve it
172
- return defaultResolver ( resolved , options ) ;
173
167
}
174
168
175
169
const segments = path . split ( '/' ) ;
@@ -186,22 +180,22 @@ function getPathInModule(
186
180
if ( closestPackageJson ) {
187
181
const pkg = readPackageCached ( closestPackageJson ) ;
188
182
189
- if ( pkg . name === moduleName && pkg . exports ) {
190
- const subpath = segments . join ( '/' ) || '.' ;
191
-
192
- const resolved = resolveExports (
183
+ if ( pkg . name === moduleName ) {
184
+ const resolved = resolve . exports (
193
185
pkg ,
194
- subpath ,
186
+ ( segments . join ( '/' ) || '.' ) as resolve . Exports . Entry ,
195
187
createResolveOptions ( options . conditions ) ,
196
188
) ;
197
189
198
- if ( ! resolved ) {
190
+ if ( resolved ) {
191
+ return pathResolve ( dirname ( closestPackageJson ) , resolved [ 0 ] ) ;
192
+ }
193
+
194
+ if ( pkg . exports ) {
199
195
throw new Error (
200
196
'`exports` exists, but no results - this is a bug in Jest. Please report an issue' ,
201
197
) ;
202
198
}
203
-
204
- return pathResolve ( dirname ( closestPackageJson ) , resolved ) ;
205
199
}
206
200
}
207
201
@@ -216,22 +210,20 @@ function getPathInModule(
216
210
if ( packageJsonPath && isFile ( packageJsonPath ) ) {
217
211
const pkg = readPackageCached ( packageJsonPath ) ;
218
212
219
- if ( pkg . exports ) {
220
- const subpath = segments . join ( '/' ) || '.' ;
221
-
222
- const resolved = resolveExports (
223
- pkg ,
224
- subpath ,
225
- createResolveOptions ( options . conditions ) ,
226
- ) ;
213
+ const resolved = resolve . exports (
214
+ pkg ,
215
+ ( segments . join ( '/' ) || '.' ) as resolve . Exports . Entry ,
216
+ createResolveOptions ( options . conditions ) ,
217
+ ) ;
227
218
228
- if ( ! resolved ) {
229
- throw new Error (
230
- '`exports` exists, but no results - this is a bug in Jest. Please report an issue' ,
231
- ) ;
232
- }
219
+ if ( resolved ) {
220
+ return pathResolve ( dirname ( packageJsonPath ) , resolved [ 0 ] ) ;
221
+ }
233
222
234
- return pathResolve ( dirname ( packageJsonPath ) , resolved ) ;
223
+ if ( pkg . exports ) {
224
+ throw new Error (
225
+ '`exports` exists, but no results - this is a bug in Jest. Please report an issue' ,
226
+ ) ;
235
227
}
236
228
}
237
229
}
@@ -241,21 +233,13 @@ function getPathInModule(
241
233
242
234
function createResolveOptions (
243
235
conditions : Array < string > | undefined ,
244
- ) : ResolveExportsOptions {
236
+ ) : resolve . Options {
245
237
return conditions
246
238
? { conditions, unsafe : true }
247
239
: // no conditions were passed - let's assume this is Jest internal and it should be `require`
248
240
{ browser : false , require : true } ;
249
241
}
250
242
251
- function createImportsResolveOptions ( conditions : Array < string > | undefined ) {
252
- return {
253
- conditions : conditions
254
- ? [ ...conditions , 'default' ]
255
- : [ 'node' , 'require' , 'default' ] ,
256
- } ;
257
- }
258
-
259
243
// if it's a relative import or an absolute path, imports/exports are ignored
260
244
const shouldIgnoreRequestForExports = ( path : string ) =>
261
245
path . startsWith ( '.' ) || isAbsolute ( path ) ;
0 commit comments