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 7c9c040 commit 563d9c5
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 14 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
49 changes: 35 additions & 14 deletions packages/jest-resolve/src/defaultResolver.ts
Expand Up @@ -42,26 +42,17 @@ export default function defaultResolver(
paths: options.paths,
preserveSymlinks: false,
// @ts-ignore: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/44137
realpathSync: realpath,
realpathSync,
});

try {
// Dereference symlinks to ensure we don't create a separate
// module instance depending on how it was referenced.
const resolved = realpath(result);

if (resolved) {
return resolved;
}
} catch {
// ignore
}

return result;
// Dereference symlinks to ensure we don't create a separate
// module instance depending on how it was referenced.
return realpathSync(result);
}

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

enum IPathType {
Expand Down Expand Up @@ -99,6 +90,32 @@ function statSyncCached(path: string): IPathType {
return IPathType.OTHER;
}

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 {
// ignore
}

if (!result) {
result = path;
}

checkedRealpathPaths.set(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;
}

/*
* helper functions
*/
Expand All @@ -109,3 +126,7 @@ function isFile(file: Config.Path): boolean {
function isDirectory(dir: Config.Path): boolean {
return statSyncCached(dir) === IPathType.DIRECTORY;
}

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

0 comments on commit 563d9c5

Please sign in to comment.