From 40b4f1cc07c5d9f1adac09493bc875dff94acdbb Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 11 Feb 2021 16:10:01 +0100 Subject: [PATCH] fix(jest-resolve): cache package.json lookups --- packages/jest-resolve/package.json | 2 +- packages/jest-resolve/src/defaultResolver.ts | 22 ++++++++++++ yarn.lock | 36 ++++++++++---------- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/packages/jest-resolve/package.json b/packages/jest-resolve/package.json index 12c22e9c23fd..72b8e84c1d5c 100644 --- a/packages/jest-resolve/package.json +++ b/packages/jest-resolve/package.json @@ -20,7 +20,7 @@ "graceful-fs": "^4.2.4", "jest-pnp-resolver": "^1.2.2", "jest-util": "^27.0.0-next.1", - "resolve": "^1.18.1", + "resolve": "^1.20.0", "slash": "^3.0.0" }, "devDependencies": { diff --git a/packages/jest-resolve/src/defaultResolver.ts b/packages/jest-resolve/src/defaultResolver.ts index b97bc182a8c4..172376bda70c 100644 --- a/packages/jest-resolve/src/defaultResolver.ts +++ b/packages/jest-resolve/src/defaultResolver.ts @@ -50,6 +50,8 @@ export default function defaultResolver( packageFilter: options.packageFilter, paths: options.paths, preserveSymlinks: false, + // @ts-expect-error: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/51182 + readPackageSync, realpathSync, }); @@ -61,6 +63,7 @@ export default function defaultResolver( export function clearDefaultResolverCache(): void { checkedPaths.clear(); checkedRealpathPaths.clear(); + packageContents.clear(); } enum IPathType { @@ -118,6 +121,21 @@ function realpathCached(path: Config.Path): Config.Path { return result; } +const packageContents = new Map(); +function readPackageCached(path: Config.Path): unknown { + 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 */ @@ -132,3 +150,7 @@ function isDirectory(dir: Config.Path): boolean { function realpathSync(file: Config.Path): Config.Path { return realpathCached(file); } + +function readPackageSync(_: unknown, file: Config.Path): unknown { + return readPackageCached(file); +} diff --git a/yarn.lock b/yarn.lock index ad2b0c01ef47..60873a327dd4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9402,11 +9402,11 @@ fsevents@^1.2.7: linkType: hard fsevents@^2.2.1: - version: 2.3.1 - resolution: "fsevents@npm:2.3.1" + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" dependencies: node-gyp: latest - checksum: 32619a121e7f9ac8a5ce4954f5fdf06be68b7b1c16e4ac8fa6e5e13cbf97d83c86cdcdf872ab7b188ebb07b34d2271b7818aebfc305b4a7d5b35f4bc2117f8be + checksum: a1883f4ca12b8b403ec528f1a4cb312b0877eacd24719da535cabea78d6fdd78530e3538bdba590a1c0f6c295128f964a89182621885296353a44dcfa4f9db53 languageName: node linkType: hard @@ -9421,11 +9421,11 @@ fsevents@^2.2.1: linkType: hard "fsevents@patch:fsevents@^2.2.1#builtin": - version: 2.3.1 - resolution: "fsevents@patch:fsevents@npm%3A2.3.1#builtin::version=2.3.1&hash=11e9ea" + version: 2.3.2 + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#builtin::version=2.3.2&hash=11e9ea" dependencies: node-gyp: latest - checksum: 66b24358e15cdd0f705b456346e58b4613f2bf54206b47874decda4152614fb0632d2d662c92b0ea54810109f646e5233e4cdd64dbb2a1949070ee5dc14dab87 + checksum: 7b25d9251aefe433d508a0eb614217f0495ae05a9e8af15f7dbf9998e08c4e675acd1cf32361e0fcf71d917d9e8c4b76301fdc72a1ec1105a3ea0994f5e15a8d languageName: node linkType: hard @@ -10931,7 +10931,7 @@ fsevents@~2.1.2: languageName: node linkType: hard -"is-core-module@npm:^2.1.0": +"is-core-module@npm:^2.2.0": version: 2.2.0 resolution: "is-core-module@npm:2.2.0" dependencies: @@ -12041,7 +12041,7 @@ fsevents@~2.1.2: jest-haste-map: ^27.0.0-next.2 jest-pnp-resolver: ^1.2.2 jest-util: ^27.0.0-next.1 - resolve: ^1.18.1 + resolve: ^1.20.0 slash: ^3.0.0 languageName: unknown linkType: soft @@ -17345,23 +17345,23 @@ react-native@0.63.2: languageName: node linkType: hard -"resolve@^1.1.6, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.15.0, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1": - version: 1.19.0 - resolution: "resolve@npm:1.19.0" +"resolve@^1.1.6, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.15.0, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1": + version: 1.20.0 + resolution: "resolve@npm:1.20.0" dependencies: - is-core-module: ^2.1.0 + is-core-module: ^2.2.0 path-parse: ^1.0.6 - checksum: 8b23c7fde1224898ffb9fec2a2295a44d1564981343bdbf5fd3769465658f6a6f6647bb7ea66dfb3c1291ca86046b0233be2edfcd8ca05b38886521e8869677c + checksum: 0f5206d454b30e74d9b2d575b5f8aedf443c4d8b90b84cdf79474ade29bb459075220da3127b682896872a16022ed65cc4db09e0f23849654144d3d75c65cd1b languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#builtin, resolve@patch:resolve@^1.10.0#builtin, resolve@patch:resolve@^1.13.1#builtin, resolve@patch:resolve@^1.15.0#builtin, resolve@patch:resolve@^1.17.0#builtin, resolve@patch:resolve@^1.18.1#builtin, resolve@patch:resolve@^1.3.2#builtin, resolve@patch:resolve@^1.5.0#builtin, resolve@patch:resolve@^1.8.1#builtin": - version: 1.19.0 - resolution: "resolve@patch:resolve@npm%3A1.19.0#builtin::version=1.19.0&hash=3388aa" +"resolve@patch:resolve@^1.1.6#builtin, resolve@patch:resolve@^1.10.0#builtin, resolve@patch:resolve@^1.13.1#builtin, resolve@patch:resolve@^1.15.0#builtin, resolve@patch:resolve@^1.17.0#builtin, resolve@patch:resolve@^1.20.0#builtin, resolve@patch:resolve@^1.3.2#builtin, resolve@patch:resolve@^1.5.0#builtin, resolve@patch:resolve@^1.8.1#builtin": + version: 1.20.0 + resolution: "resolve@patch:resolve@npm%3A1.20.0#builtin::version=1.20.0&hash=3388aa" dependencies: - is-core-module: ^2.1.0 + is-core-module: ^2.2.0 path-parse: ^1.0.6 - checksum: 188d5167e8578a9af8d194faf382b8f3526aad5145391c24ecdc6246c6fc82c10fc66d6352267f8e93c5977c503d61803169c91b9e2ee36dd2de759915c9b673 + checksum: c4a515b76026806b5b26513fc7bdb80458c532bc91c02ef45ac928d1025585f93bec0b904be39c02131118a37ff7e3f9258f1526850b025d2ec0948bb5fd03d0 languageName: node linkType: hard