Skip to content

Commit d17f467

Browse files
SimenBTrySound
andauthored
fix(resolve): use escalade to find package.json (#10781)
Co-authored-by: Bogdan Chadkin <[email protected]>
1 parent ddccb79 commit d17f467

File tree

7 files changed

+90
-18
lines changed

7 files changed

+90
-18
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
### Fixes
99

10+
- `[jest-resolve]` Replace read-pkg-up with escalade package ([#10781](https://github.com/facebook/jest/pull/10781))
1011
- `[jest-runtime]` [**BREAKING**] Do not inject `global` variable into module wrapper ([#10644](https://github.com/facebook/jest/pull/10644))
1112
- `[jest-transform]` Show enhanced `SyntaxError` message for all `SyntaxError`s ([#10749](https://github.com/facebook/jest/pull/10749))
1213
- `[jest-transform]` [**BREAKING**] Refactor API to pass an options bag around rather than multiple boolean options ([#10753](https://github.com/facebook/jest/pull/10753))

packages/jest-cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"jest-util": "^26.6.2",
2323
"jest-validate": "^26.6.2",
2424
"prompts": "^2.0.1",
25-
"yargs": "^15.4.1"
25+
"yargs": "^16.0.3"
2626
},
2727
"devDependencies": {
2828
"@jest/test-utils": "^26.6.2",

packages/jest-repl/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"jest-runtime": "^26.6.3",
2222
"jest-validate": "^26.6.2",
2323
"repl": "^0.1.3",
24-
"yargs": "^15.4.1"
24+
"yargs": "^16.0.3"
2525
},
2626
"devDependencies": {
2727
"@jest/test-utils": "^26.6.2",

packages/jest-resolve/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616
"dependencies": {
1717
"@jest/types": "^26.6.2",
1818
"chalk": "^4.0.0",
19+
"escalade": "^3.1.1",
1920
"graceful-fs": "^4.2.4",
2021
"jest-pnp-resolver": "^1.2.2",
2122
"jest-util": "^26.6.2",
22-
"read-pkg-up": "^7.0.1",
2323
"resolve": "^1.18.1",
2424
"slash": "^3.0.0"
2525
},

packages/jest-resolve/src/shouldLoadAsEsm.ts

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,20 @@
88
import {dirname, extname} from 'path';
99
// @ts-expect-error: experimental, not added to the types
1010
import {SyntheticModule} from 'vm';
11-
import readPkgUp = require('read-pkg-up');
11+
import escalade from 'escalade/sync';
12+
import {readFileSync} from 'graceful-fs';
1213
import type {Config} from '@jest/types';
1314

1415
const runtimeSupportsVmModules = typeof SyntheticModule === 'function';
1516

1617
const cachedFileLookups = new Map<string, boolean>();
1718
const cachedDirLookups = new Map<string, boolean>();
19+
const cachedChecks = new Map<string, boolean>();
1820

1921
export function clearCachedLookups(): void {
2022
cachedFileLookups.clear();
2123
cachedDirLookups.clear();
24+
cachedChecks.clear();
2225
}
2326

2427
export default function cachedShouldLoadAsEsm(path: Config.Path): boolean {
@@ -67,12 +70,29 @@ function shouldLoadAsEsm(path: Config.Path): boolean {
6770
}
6871

6972
function cachedPkgCheck(cwd: Config.Path): boolean {
70-
// TODO: can we cache lookups somehow?
71-
const pkg = readPkgUp.sync({cwd, normalize: false});
72-
73-
if (!pkg) {
73+
const pkgPath = escalade(cwd, (_dir, names) => {
74+
if (names.includes('package.json')) {
75+
// will be resolved into absolute
76+
return 'package.json';
77+
}
78+
return false;
79+
});
80+
if (!pkgPath) {
7481
return false;
7582
}
7683

77-
return pkg.packageJson.type === 'module';
84+
let hasModuleField = cachedChecks.get(pkgPath);
85+
if (hasModuleField != null) {
86+
return hasModuleField;
87+
}
88+
89+
try {
90+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
91+
hasModuleField = pkg.type === 'module';
92+
} catch {
93+
hasModuleField = false;
94+
}
95+
96+
cachedChecks.set(pkgPath, hasModuleField);
97+
return hasModuleField;
7898
}

packages/jest-runtime/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"jest-validate": "^26.6.2",
4242
"slash": "^3.0.0",
4343
"strip-bom": "^4.0.0",
44-
"yargs": "^15.4.1"
44+
"yargs": "^16.0.3"
4545
},
4646
"devDependencies": {
4747
"@jest/test-utils": "^26.6.2",

yarn.lock

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5918,6 +5918,17 @@ __metadata:
59185918
languageName: node
59195919
linkType: hard
59205920

5921+
"cliui@npm:^7.0.2":
5922+
version: 7.0.3
5923+
resolution: "cliui@npm:7.0.3"
5924+
dependencies:
5925+
string-width: ^4.2.0
5926+
strip-ansi: ^6.0.0
5927+
wrap-ansi: ^7.0.0
5928+
checksum: aa05598ac7178428d41188e73fcafd25dd17ddba6aba2f99d5c7805fc6655d503e46a0a56e4e173dbda9a4adf0001c484cd586f50324365e0c83cfa6c58a6520
5929+
languageName: node
5930+
linkType: hard
5931+
59215932
"clone-deep@npm:^4.0.1":
59225933
version: 4.0.1
59235934
resolution: "clone-deep@npm:4.0.1"
@@ -9448,7 +9459,7 @@ fsevents@^1.2.7:
94489459
languageName: node
94499460
linkType: hard
94509461

9451-
"get-caller-file@npm:^2.0.1":
9462+
"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5":
94529463
version: 2.0.5
94539464
resolution: "get-caller-file@npm:2.0.5"
94549465
checksum: 9dd9e1e2591039ee4c38c897365b904f66f1e650a8c1cb7b7db8ce667fa63e88cc8b13282b74df9d93de481114b3304a0487880d31cd926dfda6efe71455855d
@@ -11545,7 +11556,7 @@ fsevents@^1.2.7:
1154511556
jest-util: ^26.6.2
1154611557
jest-validate: ^26.6.2
1154711558
prompts: ^2.0.1
11548-
yargs: ^15.4.1
11559+
yargs: ^16.0.3
1154911560
bin:
1155011561
jest: ./bin/jest.js
1155111562
languageName: unknown
@@ -11893,7 +11904,7 @@ fsevents@^1.2.7:
1189311904
jest-runtime: ^26.6.3
1189411905
jest-validate: ^26.6.2
1189511906
repl: ^0.1.3
11896-
yargs: ^15.4.1
11907+
yargs: ^16.0.3
1189711908
bin:
1189811909
jest-repl: ./bin/jest-repl.js
1189911910
languageName: unknown
@@ -11921,11 +11932,11 @@ fsevents@^1.2.7:
1192111932
"@types/graceful-fs": ^4.1.3
1192211933
"@types/resolve": ^1.17.0
1192311934
chalk: ^4.0.0
11935+
escalade: ^3.1.1
1192411936
graceful-fs: ^4.2.4
1192511937
jest-haste-map: ^26.6.2
1192611938
jest-pnp-resolver: ^1.2.2
1192711939
jest-util: ^26.6.2
11928-
read-pkg-up: ^7.0.1
1192911940
resolve: ^1.18.1
1193011941
slash: ^3.0.0
1193111942
languageName: unknown
@@ -12011,7 +12022,7 @@ fsevents@^1.2.7:
1201112022
jest-validate: ^26.6.2
1201212023
slash: ^3.0.0
1201312024
strip-bom: ^4.0.0
12014-
yargs: ^15.4.1
12025+
yargs: ^16.0.3
1201512026
bin:
1201612027
jest-runtime: ./bin/jest-runtime.js
1201712028
languageName: unknown
@@ -17374,14 +17385,14 @@ fsevents@^1.2.7:
1737417385
languageName: node
1737517386
linkType: hard
1737617387

17377-
"safe-buffer@npm:5.1.2, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1":
17388+
"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1":
1737817389
version: 5.1.2
1737917390
resolution: "safe-buffer@npm:5.1.2"
1738017391
checksum: 2708587c1b5e70a5e420714ceb59f30f5791c6e831d39812125a008eca63a4ac18578abd020a0776ea497ff03b4543f2b2a223a7b9073bf2d6c7af9ec6829218
1738117392
languageName: node
1738217393
linkType: hard
1738317394

17384-
"safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.2.0":
17395+
"safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0":
1738517396
version: 5.2.1
1738617397
resolution: "safe-buffer@npm:5.2.1"
1738717398
checksum: 0bb57f0d8f9d1fa4fe35ad8a2db1f83a027d48f2822d59ede88fd5cd4ddad83c0b497213feb7a70fbf90597a70c5217f735b0eb1850df40ce9b4ae81dd22b3f9
@@ -20056,6 +20067,17 @@ fsevents@^1.2.7:
2005620067
languageName: node
2005720068
linkType: hard
2005820069

20070+
"wrap-ansi@npm:^7.0.0":
20071+
version: 7.0.0
20072+
resolution: "wrap-ansi@npm:7.0.0"
20073+
dependencies:
20074+
ansi-styles: ^4.0.0
20075+
string-width: ^4.1.0
20076+
strip-ansi: ^6.0.0
20077+
checksum: 09939dd775ae565bb99a25a6c072fe3775a95fa71751b5533c94265fe986ba3e3ab071a027ab76cf26876bd9afd10ac3c2d06d7c4bcce148bf7d2d9514e3a0df
20078+
languageName: node
20079+
linkType: hard
20080+
2005920081
"wrappy@npm:1":
2006020082
version: 1.0.2
2006120083
resolution: "wrappy@npm:1.0.2"
@@ -20276,6 +20298,13 @@ fsevents@^1.2.7:
2027620298
languageName: node
2027720299
linkType: hard
2027820300

20301+
"y18n@npm:^5.0.2":
20302+
version: 5.0.5
20303+
resolution: "y18n@npm:5.0.5"
20304+
checksum: a7d41b0cccca1c98ebab270a944df48eb3b5352d3be0affb8afc8369823f6aa97a5fbead2c5b35e59a5650cb786b2b37627b45be5ff31f02a80dd3b881aceb17
20305+
languageName: node
20306+
linkType: hard
20307+
2027920308
"yallist@npm:^2.1.2":
2028020309
version: 2.1.2
2028120310
resolution: "yallist@npm:2.1.2"
@@ -20330,6 +20359,13 @@ fsevents@^1.2.7:
2033020359
languageName: node
2033120360
linkType: hard
2033220361

20362+
"yargs-parser@npm:^20.2.2":
20363+
version: 20.2.3
20364+
resolution: "yargs-parser@npm:20.2.3"
20365+
checksum: 6504b053bbb7ac0a3cd4c0e343447f2a7bb7ee18f3de8865a83874531ac8b8b0661cab4a4603a515224d5f5cfcd26d0d9998642b07a58ceab29eea12878123f7
20366+
languageName: node
20367+
linkType: hard
20368+
2033320369
"yargs@npm:^14.2.0, yargs@npm:^14.2.2":
2033420370
version: 14.2.3
2033520371
resolution: "yargs@npm:14.2.3"
@@ -20349,7 +20385,7 @@ fsevents@^1.2.7:
2034920385
languageName: node
2035020386
linkType: hard
2035120387

20352-
"yargs@npm:^15.1.0, yargs@npm:^15.4.1":
20388+
"yargs@npm:^15.1.0":
2035320389
version: 15.4.1
2035420390
resolution: "yargs@npm:15.4.1"
2035520391
dependencies:
@@ -20368,6 +20404,21 @@ fsevents@^1.2.7:
2036820404
languageName: node
2036920405
linkType: hard
2037020406

20407+
"yargs@npm:^16.0.3":
20408+
version: 16.1.0
20409+
resolution: "yargs@npm:16.1.0"
20410+
dependencies:
20411+
cliui: ^7.0.2
20412+
escalade: ^3.1.1
20413+
get-caller-file: ^2.0.5
20414+
require-directory: ^2.1.1
20415+
string-width: ^4.2.0
20416+
y18n: ^5.0.2
20417+
yargs-parser: ^20.2.2
20418+
checksum: 19e94e62eb653f8310aa4ed6eab797b1756fea90cdacb38dec45afdd21b8607bf38723ee0fae0b967ca3886ad58b8430eb48b716958231f2f1b950c1c7f11034
20419+
languageName: node
20420+
linkType: hard
20421+
2037120422
"yargs@npm:^2.3.0":
2037220423
version: 2.3.0
2037320424
resolution: "yargs@npm:2.3.0"

0 commit comments

Comments
 (0)