Skip to content

Commit 37f75a0

Browse files
committed
feat: peer deps check
1 parent 9660127 commit 37f75a0

File tree

4 files changed

+65
-7
lines changed

4 files changed

+65
-7
lines changed

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
"@release-it/conventional-changelog": "^10.0.0",
7878
"@relmify/jest-serializer-strip-ansi": "^1.0.2",
7979
"@types/jest": "^29.5.14",
80+
"@types/node": "^22.13.8",
8081
"@types/react": "^19.0.0",
8182
"@types/react-test-renderer": "^19.0.0",
8283
"babel-jest": "^29.7.0",
@@ -87,9 +88,9 @@
8788
"flow-bin": "~0.170.0",
8889
"jest": "^29.7.0",
8990
"prettier": "^2.8.8",
90-
"react": "^19.0.0",
91+
"react": "19.0.0",
9192
"react-native": "0.78.0",
92-
"react-test-renderer": "^19.0.0",
93+
"react-test-renderer": "19.0.0",
9394
"release-it": "^18.0.0",
9495
"typescript": "^5.6.3",
9596
"typescript-eslint": "^8.19.1"

src/helpers/ensure-peer-deps.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
function ensurePeerDeps() {
2+
const reactVersion = getPackageVersion('react');
3+
ensurePackage('react-test-renderer', reactVersion);
4+
}
5+
6+
function ensurePackage(name: string, expectedVersion: string) {
7+
const actualVersion = getPackageVersion(name);
8+
if (!actualVersion) {
9+
const error = new Error(
10+
`Missing dev dependency "${name}@${expectedVersion}".\n\nFix it by running:\nnpm install -D ${name}@${expectedVersion}`,
11+
);
12+
Error.captureStackTrace(error, ensurePeerDeps);
13+
throw error;
14+
}
15+
16+
if (expectedVersion !== actualVersion) {
17+
const error = new Error(
18+
`Incorrect version of "${name}" detected. Expected "${expectedVersion}", but found "${actualVersion}".\n\nFix it by running:\nnpm install -D ${name}@${expectedVersion}`,
19+
);
20+
Error.captureStackTrace(error, ensurePeerDeps);
21+
throw error;
22+
}
23+
}
24+
25+
function getPackageVersion(name: string) {
26+
try {
27+
// eslint-disable-next-line @typescript-eslint/no-require-imports
28+
const packageJson = require(`${name}/package.json`);
29+
return packageJson.version;
30+
} catch {
31+
return null;
32+
}
33+
}
34+
35+
if (!process.env.RNTL_SKIP_DEPS_CHECK) {
36+
ensurePeerDeps();
37+
}

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import './helpers/ensure-peer-deps';
12
import './matchers/extend-expect';
23

34
import { getIsReactActEnvironment, setReactActEnvironment } from './act';

yarn.lock

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2838,6 +2838,7 @@ __metadata:
28382838
"@release-it/conventional-changelog": "npm:^10.0.0"
28392839
"@relmify/jest-serializer-strip-ansi": "npm:^1.0.2"
28402840
"@types/jest": "npm:^29.5.14"
2841+
"@types/node": "npm:^22.13.8"
28412842
"@types/react": "npm:^19.0.0"
28422843
"@types/react-test-renderer": "npm:^19.0.0"
28432844
babel-jest: "npm:^29.7.0"
@@ -2851,10 +2852,10 @@ __metadata:
28512852
jest-matcher-utils: "npm:^29.7.0"
28522853
prettier: "npm:^2.8.8"
28532854
pretty-format: "npm:^29.7.0"
2854-
react: "npm:^19.0.0"
2855+
react: "npm:19.0.0"
28552856
react-native: "npm:0.78.0"
28562857
react-native-gesture-handler: "npm:^2.23.1"
2857-
react-test-renderer: "npm:^19.0.0"
2858+
react-test-renderer: "npm:19.0.0"
28582859
redent: "npm:^3.0.0"
28592860
release-it: "npm:^18.0.0"
28602861
typescript: "npm:^5.6.3"
@@ -3008,6 +3009,15 @@ __metadata:
30083009
languageName: node
30093010
linkType: hard
30103011

3012+
"@types/node@npm:^22.13.8":
3013+
version: 22.13.8
3014+
resolution: "@types/node@npm:22.13.8"
3015+
dependencies:
3016+
undici-types: "npm:~6.20.0"
3017+
checksum: 10c0/bfc92b734a9dce6ac5daee0a52feccdf5dcb3804d895e4bc5384e2f4644612b8801725cd03c8c3c0888fb5eeb16b875877ac44b77641e0196dc1a837b1c2a366
3018+
languageName: node
3019+
linkType: hard
3020+
30113021
"@types/normalize-package-data@npm:^2.4.3":
30123022
version: 2.4.4
30133023
resolution: "@types/normalize-package-data@npm:2.4.4"
@@ -3031,7 +3041,16 @@ __metadata:
30313041
languageName: node
30323042
linkType: hard
30333043

3034-
"@types/react@npm:*, @types/react@npm:^19.0.0":
3044+
"@types/react@npm:*":
3045+
version: 19.0.10
3046+
resolution: "@types/react@npm:19.0.10"
3047+
dependencies:
3048+
csstype: "npm:^3.0.2"
3049+
checksum: 10c0/41884cca21850c8b2d6578b172ca0ca4fff6021251a68532b19f2031ac23dc5a9222470208065f8d9985d367376047df2f49ece8d927f7d04cdc94922b1eb34b
3050+
languageName: node
3051+
linkType: hard
3052+
3053+
"@types/react@npm:^19.0.0":
30353054
version: 19.0.8
30363055
resolution: "@types/react@npm:19.0.8"
30373056
dependencies:
@@ -9261,7 +9280,7 @@ __metadata:
92619280
languageName: node
92629281
linkType: hard
92639282

9264-
"react-test-renderer@npm:^19.0.0":
9283+
"react-test-renderer@npm:19.0.0":
92659284
version: 19.0.0
92669285
resolution: "react-test-renderer@npm:19.0.0"
92679286
dependencies:
@@ -9273,7 +9292,7 @@ __metadata:
92739292
languageName: node
92749293
linkType: hard
92759294

9276-
"react@npm:^19.0.0":
9295+
"react@npm:19.0.0":
92779296
version: 19.0.0
92789297
resolution: "react@npm:19.0.0"
92799298
checksum: 10c0/9cad8f103e8e3a16d15cb18a0d8115d8bd9f9e1ce3420310aea381eb42aa0a4f812cf047bb5441349257a05fba8a291515691e3cb51267279b2d2c3253f38471

0 commit comments

Comments
 (0)