jest-resolve
Advanced tools
Comparing version 27.2.5 to 27.3.0
@@ -7,5 +7,5 @@ /** | ||
*/ | ||
import { Opts as ResolveOpts } from 'resolve'; | ||
import type { Config } from '@jest/types'; | ||
interface ResolverOptions extends ResolveOpts { | ||
import { PkgJson } from './fileWalkers'; | ||
interface ResolverOptions { | ||
basedir: Config.Path; | ||
@@ -16,3 +16,7 @@ browser?: boolean; | ||
extensions?: Array<string>; | ||
moduleDirectory?: Array<string>; | ||
paths?: Array<Config.Path>; | ||
rootDir?: Config.Path; | ||
packageFilter?: (pkg: PkgJson, dir: string) => PkgJson; | ||
pathFilter?: (pkg: PkgJson, path: string, relativePath: string) => string; | ||
} | ||
@@ -27,3 +31,2 @@ declare global { | ||
export default function defaultResolver(path: Config.Path, options: ResolverOptions): Config.Path; | ||
export declare function clearDefaultResolverCache(): void; | ||
export {}; |
@@ -7,8 +7,7 @@ 'use strict'; | ||
exports.default = defaultResolver; | ||
exports.clearDefaultResolverCache = clearDefaultResolverCache; | ||
function fs() { | ||
const data = _interopRequireWildcard(require('graceful-fs')); | ||
function _path() { | ||
const data = require('path'); | ||
fs = function () { | ||
_path = function () { | ||
return data; | ||
@@ -40,12 +39,6 @@ }; | ||
function _jestUtil() { | ||
const data = require('jest-util'); | ||
var _resolve2 = require('resolve.exports'); | ||
_jestUtil = function () { | ||
return data; | ||
}; | ||
var _fileWalkers = require('./fileWalkers'); | ||
return data; | ||
} | ||
function _interopRequireDefault(obj) { | ||
@@ -55,44 +48,2 @@ return obj && obj.__esModule ? obj : {default: obj}; | ||
function _getRequireWildcardCache(nodeInterop) { | ||
if (typeof WeakMap !== 'function') return null; | ||
var cacheBabelInterop = new WeakMap(); | ||
var cacheNodeInterop = new WeakMap(); | ||
return (_getRequireWildcardCache = function (nodeInterop) { | ||
return nodeInterop ? cacheNodeInterop : cacheBabelInterop; | ||
})(nodeInterop); | ||
} | ||
function _interopRequireWildcard(obj, nodeInterop) { | ||
if (!nodeInterop && obj && obj.__esModule) { | ||
return obj; | ||
} | ||
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { | ||
return {default: obj}; | ||
} | ||
var cache = _getRequireWildcardCache(nodeInterop); | ||
if (cache && cache.has(obj)) { | ||
return cache.get(obj); | ||
} | ||
var newObj = {}; | ||
var hasPropertyDescriptor = | ||
Object.defineProperty && Object.getOwnPropertyDescriptor; | ||
for (var key in obj) { | ||
if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { | ||
var desc = hasPropertyDescriptor | ||
? Object.getOwnPropertyDescriptor(obj, key) | ||
: null; | ||
if (desc && (desc.get || desc.set)) { | ||
Object.defineProperty(newObj, key, desc); | ||
} else { | ||
newObj[key] = obj[key]; | ||
} | ||
} | ||
} | ||
newObj.default = obj; | ||
if (cache) { | ||
cache.set(obj, newObj); | ||
} | ||
return newObj; | ||
} | ||
/** | ||
@@ -113,111 +64,64 @@ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. | ||
...options, | ||
isDirectory, | ||
isFile, | ||
isDirectory: _fileWalkers.isDirectory, | ||
isFile: _fileWalkers.isFile, | ||
packageFilter: createPackageFilter( | ||
options.conditions, | ||
options.packageFilter | ||
), | ||
preserveSymlinks: false, | ||
readPackageSync, | ||
realpathSync | ||
realpathSync: _fileWalkers.realpathSync | ||
}); // Dereference symlinks to ensure we don't create a separate | ||
// module instance depending on how it was referenced. | ||
return realpathSync(result); | ||
return (0, _fileWalkers.realpathSync)(result); | ||
} | ||
/* | ||
* helper functions | ||
*/ | ||
function clearDefaultResolverCache() { | ||
checkedPaths.clear(); | ||
checkedRealpathPaths.clear(); | ||
packageContents.clear(); | ||
function readPackageSync(_, file) { | ||
return (0, _fileWalkers.readPackageCached)(file); | ||
} | ||
var IPathType; | ||
function createPackageFilter(conditions, userFilter) { | ||
function attemptExportsFallback(pkg) { | ||
const options = conditions | ||
? { | ||
conditions, | ||
unsafe: true | ||
} // no conditions were passed - let's assume this is Jest internal and it should be `require` | ||
: { | ||
browser: false, | ||
require: true | ||
}; | ||
(function (IPathType) { | ||
IPathType[(IPathType['FILE'] = 1)] = 'FILE'; | ||
IPathType[(IPathType['DIRECTORY'] = 2)] = 'DIRECTORY'; | ||
IPathType[(IPathType['OTHER'] = 3)] = 'OTHER'; | ||
})(IPathType || (IPathType = {})); | ||
const checkedPaths = new Map(); | ||
function statSyncCached(path) { | ||
const result = checkedPaths.get(path); | ||
if (result !== undefined) { | ||
return result; | ||
try { | ||
return (0, _resolve2.resolve)(pkg, '.', options); | ||
} catch { | ||
return undefined; | ||
} | ||
} | ||
let stat; | ||
return function packageFilter(pkg, packageDir) { | ||
let filteredPkg = pkg; | ||
try { | ||
stat = fs().statSync(path); | ||
} catch (e) { | ||
if (!(e && (e.code === 'ENOENT' || e.code === 'ENOTDIR'))) { | ||
throw e; | ||
if (userFilter) { | ||
filteredPkg = userFilter(filteredPkg, packageDir); | ||
} | ||
} | ||
if (stat) { | ||
if (stat.isFile() || stat.isFIFO()) { | ||
checkedPaths.set(path, IPathType.FILE); | ||
return IPathType.FILE; | ||
} else if (stat.isDirectory()) { | ||
checkedPaths.set(path, IPathType.DIRECTORY); | ||
return IPathType.DIRECTORY; | ||
if (filteredPkg.main != null) { | ||
return filteredPkg; | ||
} | ||
} | ||
checkedPaths.set(path, IPathType.OTHER); | ||
return IPathType.OTHER; | ||
} | ||
const indexInRoot = (0, _path().resolve)(packageDir, './index.js'); // if the module contains an `index.js` file in root, `resolve` will request | ||
// that if there is no `main`. Since we don't wanna break that, add this | ||
// check | ||
const checkedRealpathPaths = new Map(); | ||
if ((0, _fileWalkers.isFile)(indexInRoot)) { | ||
return filteredPkg; | ||
} | ||
function realpathCached(path) { | ||
let result = checkedRealpathPaths.get(path); | ||
if (result !== undefined) { | ||
return result; | ||
} | ||
result = (0, _jestUtil().tryRealpath)(path); | ||
checkedRealpathPaths.set(path, result); | ||
if (path !== result) { | ||
// also cache the result in case it's ever referenced directly - no reason to `realpath` that as well | ||
checkedRealpathPaths.set(result, result); | ||
} | ||
return result; | ||
return {...filteredPkg, main: attemptExportsFallback(filteredPkg)}; | ||
}; | ||
} | ||
const packageContents = new Map(); | ||
function readPackageCached(path) { | ||
let result = packageContents.get(path); | ||
if (result !== undefined) { | ||
return result; | ||
} | ||
result = JSON.parse(fs().readFileSync(path, 'utf8')); | ||
packageContents.set(path, result); | ||
return result; | ||
} | ||
/* | ||
* helper functions | ||
*/ | ||
function isFile(file) { | ||
return statSyncCached(file) === IPathType.FILE; | ||
} | ||
function isDirectory(dir) { | ||
return statSyncCached(dir) === IPathType.DIRECTORY; | ||
} | ||
function realpathSync(file) { | ||
return realpathCached(file); | ||
} | ||
function readPackageSync(_, file) { | ||
return readPackageCached(file); | ||
} |
@@ -52,4 +52,6 @@ 'use strict'; | ||
var _defaultResolver = _interopRequireWildcard(require('./defaultResolver')); | ||
var _defaultResolver = _interopRequireDefault(require('./defaultResolver')); | ||
var _fileWalkers = require('./fileWalkers'); | ||
var _isBuiltinModule = _interopRequireDefault(require('./isBuiltinModule')); | ||
@@ -181,3 +183,3 @@ | ||
static clearDefaultResolverCache() { | ||
(0, _defaultResolver.clearDefaultResolverCache)(); | ||
(0, _fileWalkers.clearFsCache)(); | ||
(0, _shouldLoadAsEsm.clearCachedLookups)(); | ||
@@ -184,0 +186,0 @@ } |
@@ -29,26 +29,4 @@ 'use strict'; | ||
function _sync() { | ||
const data = _interopRequireDefault(require('escalade/sync')); | ||
var _fileWalkers = require('./fileWalkers'); | ||
_sync = function () { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _gracefulFs() { | ||
const data = require('graceful-fs'); | ||
_gracefulFs = function () { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _interopRequireDefault(obj) { | ||
return obj && obj.__esModule ? obj : {default: obj}; | ||
} | ||
/** | ||
@@ -114,11 +92,4 @@ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. | ||
function cachedPkgCheck(cwd) { | ||
const pkgPath = (0, _sync().default)(cwd, (_dir, names) => { | ||
if (names.includes('package.json')) { | ||
// will be resolved into absolute | ||
return 'package.json'; | ||
} | ||
const pkgPath = (0, _fileWalkers.findClosestPackageJson)(cwd); | ||
return false; | ||
}); | ||
if (!pkgPath) { | ||
@@ -135,3 +106,3 @@ return false; | ||
try { | ||
const pkg = JSON.parse((0, _gracefulFs().readFileSync)(pkgPath, 'utf-8')); | ||
const pkg = (0, _fileWalkers.readPackageCached)(pkgPath); | ||
hasModuleField = pkg.type === 'module'; | ||
@@ -138,0 +109,0 @@ } catch { |
{ | ||
"name": "jest-resolve", | ||
"version": "27.2.5", | ||
"version": "27.3.0", | ||
"repository": { | ||
@@ -19,9 +19,9 @@ "type": "git", | ||
"chalk": "^4.0.0", | ||
"escalade": "^3.1.1", | ||
"graceful-fs": "^4.2.4", | ||
"jest-haste-map": "^27.2.5", | ||
"jest-haste-map": "^27.3.0", | ||
"jest-pnp-resolver": "^1.2.2", | ||
"jest-util": "^27.2.5", | ||
"jest-validate": "^27.2.5", | ||
"jest-util": "^27.3.0", | ||
"jest-validate": "^27.3.0", | ||
"resolve": "^1.20.0", | ||
"resolve.exports": "^1.1.0", | ||
"slash": "^3.0.0" | ||
@@ -39,3 +39,3 @@ }, | ||
}, | ||
"gitHead": "251b8014e8e3ac8da2fca88b5a1bc401f3b92326" | ||
"gitHead": "14b0c2c1d6f81b64adf8b827649ece80a4448cfc" | ||
} |
52617
22
1591
+ Addedresolve.exports@^1.1.0
+ Addedresolve.exports@1.1.1(transitive)
- Removedescalade@^3.1.1
- Removedescalade@3.2.0(transitive)
Updatedjest-haste-map@^27.3.0
Updatedjest-util@^27.3.0
Updatedjest-validate@^27.3.0