Skip to content

Commit

Permalink
fix: pass custom cached realpath function to resolve
Browse files Browse the repository at this point in the history
  • Loading branch information
SimenB committed Apr 23, 2020
1 parent 2af0232 commit 07b4863
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -7,6 +7,7 @@

### Fixes

- `[jest-resolve]` Pass custom cached `realpath` function to `resolve` ([#9873](https://github.com/facebook/jest/pull/9873))
- `[jest-runtime]` Support importing CJS from ESM using `import` statements ([#9850](https://github.com/facebook/jest/pull/9850))
- `[jest-runtime]` Support importing parallel dynamic `import`s ([#9858](https://github.com/facebook/jest/pull/9858))

Expand Down
20 changes: 17 additions & 3 deletions packages/jest-resolve/src/defaultResolver.ts
Expand Up @@ -52,6 +52,7 @@ export default function defaultResolver(

export function clearDefaultResolverCache(): void {
checkedPaths.clear();
checkedRealpathPaths.clear();
}

enum IPathType {
Expand Down Expand Up @@ -89,8 +90,14 @@ function statSyncCached(path: string): IPathType {
return IPathType.OTHER;
}

function tolerantRealpath(path: Config.Path): Config.Path {
let result: Config.Path | undefined = undefined;
const checkedRealpathPaths = new Map<string, string>();
function realpathCached(path: Config.Path): Config.Path {
let result = checkedRealpathPaths.get(path);

if (result !== undefined) {
return result;
}

try {
result = realpath(path);
} catch (error) {
Expand All @@ -103,6 +110,13 @@ function tolerantRealpath(path: Config.Path): Config.Path {
result = 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;
}

Expand All @@ -118,5 +132,5 @@ function isDirectory(dir: Config.Path): boolean {
}

function realpathSync(file: Config.Path): Config.Path {
return tolerantRealpath(file);
return realpathCached(file);
}

0 comments on commit 07b4863

Please sign in to comment.