You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.6 KiB
49 lines
1.6 KiB
let globalPnpApi; |
|
try { |
|
globalPnpApi = require(`pnpapi`); |
|
} catch { |
|
// Just ignore if we don't have a global PnP instance - perhaps |
|
// we'll eventually find one at runtime due to multi-tree |
|
} |
|
|
|
const createRequire = require(`./createRequire`); |
|
const getDefaultResolver = require(`./getDefaultResolver`); |
|
|
|
module.exports = (request, options) => { |
|
const {basedir, defaultResolver, extensions} = options; |
|
|
|
if (process.versions.pnp) { |
|
let pnpApi = globalPnpApi; |
|
|
|
// While technically it would be more correct to run this code |
|
// everytime (since they file being run *may* belong to a |
|
// different dependency tree than the one owning Jest), in |
|
// practice this doesn't happen anywhere else than on the Jest |
|
// repository itself (in the test env). So in order to preserve |
|
// the performances, we can afford a slight incoherence here. |
|
if (!pnpApi) { |
|
try { |
|
const baseReq = createRequire(`${basedir}/internal.js`); |
|
pnpApi = baseReq(`pnpapi`); |
|
} catch { |
|
// The file isn't part of a PnP dependency tree, so we can |
|
// just use the default Jest resolver. |
|
} |
|
} |
|
|
|
if (pnpApi) { |
|
const resolution = pnpApi.resolveRequest(request, `${basedir}/`, {extensions}); |
|
|
|
// When the request is a native module, Jest expects to get the string back unmodified, but pnp returns null instead. |
|
if (resolution === null) |
|
return request; |
|
|
|
return resolution; |
|
} |
|
} |
|
|
|
if (!defaultResolver) |
|
defaultResolver = getDefaultResolver(); |
|
|
|
return defaultResolver(request, {...options, allowPnp: false}); |
|
};
|
|
|