Skip to content

Commit 5d69191

Browse files
committed
update code mods
1 parent c7b2679 commit 5d69191

17 files changed

Lines changed: 152 additions & 19 deletions

File tree

codemods/v14-update-deps/README.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,12 @@ This codemod automatically updates your `package.json` to prepare for React Nati
66

77
- Removes `@types/react-test-renderer` and `react-test-renderer` (no longer needed)
88
- Moves `@testing-library/react-native` to `devDependencies` if it's in `dependencies`
9-
- Updates `@testing-library/react-native` to `^14.0.0-beta.0`
10-
- Adds `test-renderer@^1.0.0` to `devDependencies`
9+
- Updates `@testing-library/react-native` to `^14.0.0-0`
10+
- Adds `test-renderer` to `devDependencies`, using the matching React 19 compatibility line when it can infer one:
11+
- React 19.0: `test-renderer@^1.0.0`
12+
- React 19.1: `test-renderer@^1.1.0`
13+
- React 19.2: `test-renderer@^1.2.0`
14+
- Missing or ambiguous React version: `test-renderer@^1.2.0`
1115

1216
## Usage
1317

@@ -37,8 +41,8 @@ npx codemod@latest run rntl-v14-update-deps --target ./path/to/your/project
3741
```json
3842
{
3943
"devDependencies": {
40-
"@testing-library/react-native": "^14.0.0-beta.0",
41-
"test-renderer": "^1.0.0"
44+
"@testing-library/react-native": "^14.0.0-0",
45+
"test-renderer": "^1.2.0"
4246
}
4347
}
4448
```
@@ -50,7 +54,7 @@ npx codemod@latest run rntl-v14-update-deps --target ./path/to/your/project
5054
npm install
5155
# or yarn install / pnpm install
5256
```
53-
- The codemod sets the version to `^14.0.0-beta.0`. You can manually update this if needed.
57+
- The codemod sets the version to `^14.0.0-0`. You can manually update this if needed.
5458
- For monorepos, the codemod processes each `package.json` file individually.
5559

5660
## Next steps

codemods/v14-update-deps/scripts/codemod.ts

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@
33
import type { Transform } from 'codemod:ast-grep';
44
import type JSONLang from 'codemod:ast-grep/langs/json';
55

6-
const RNTL_VERSION = '^14.0.0-beta.0';
7-
const TEST_RENDERER_VERSION = '^1.0.0';
6+
const RNTL_VERSION = '^14.0.0-0';
7+
const TEST_RENDERER_FALLBACK_VERSION = '^1.2.0';
8+
const TEST_RENDERER_VERSION_BY_REACT_MINOR: Record<string, string> = {
9+
'19.0': '^1.0.0',
10+
'19.1': '^1.1.0',
11+
'19.2': '^1.2.0',
12+
};
813

914
interface PackageJson {
1015
dependencies?: Record<string, string>;
@@ -141,10 +146,44 @@ function ensureRntlInDevDependencies(packageJson: PackageJson): boolean {
141146
}
142147

143148
function updateTestRendererVersionInDevDependencies(packageJson: PackageJson): boolean {
149+
const expectedVersion = getTestRendererVersion(packageJson);
144150
const currentVersion = packageJson.devDependencies?.['test-renderer'];
145-
if (currentVersion !== TEST_RENDERER_VERSION) {
146-
packageJson.devDependencies!['test-renderer'] = TEST_RENDERER_VERSION;
151+
if (currentVersion !== expectedVersion) {
152+
packageJson.devDependencies!['test-renderer'] = expectedVersion;
147153
return true;
148154
}
149155
return false;
150156
}
157+
158+
function getTestRendererVersion(packageJson: PackageJson): string {
159+
const reactVersion = getPackageVersion(packageJson, 'react');
160+
const reactMinor = reactVersion ? getKnownReact19Minor(reactVersion) : null;
161+
162+
return reactMinor
163+
? TEST_RENDERER_VERSION_BY_REACT_MINOR[reactMinor]
164+
: TEST_RENDERER_FALLBACK_VERSION;
165+
}
166+
167+
function getPackageVersion(packageJson: PackageJson, pkgName: string): string | undefined {
168+
for (const depType of [
169+
'dependencies',
170+
'devDependencies',
171+
'peerDependencies',
172+
'optionalDependencies',
173+
] as const) {
174+
const version = packageJson[depType]?.[pkgName];
175+
if (version) {
176+
return version;
177+
}
178+
}
179+
180+
return undefined;
181+
}
182+
183+
function getKnownReact19Minor(version: string): string | null {
184+
const trimmedVersion = version.trim();
185+
const exactVersionMatch = trimmedVersion.match(/^=?~?(19\.(?:0|1|2))(?:\.\d+)?(?:-[\w.-]+)?$/);
186+
const xRangeMatch = trimmedVersion.match(/^~?(19\.(?:0|1|2))\.(?:x|\*)$/i);
187+
188+
return exactVersionMatch?.[1] ?? xRangeMatch?.[1] ?? null;
189+
}

codemods/v14-update-deps/tests/fixtures/already-alpha/expected.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "test-project",
33
"version": "1.0.0",
44
"devDependencies": {
5-
"@testing-library/react-native": "^14.0.0-beta.0",
6-
"test-renderer": "^1.0.0"
5+
"@testing-library/react-native": "^14.0.0-0",
6+
"test-renderer": "^1.2.0"
77
}
88
}

codemods/v14-update-deps/tests/fixtures/basic-update/expected.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "test-project",
33
"version": "1.0.0",
44
"devDependencies": {
5-
"@testing-library/react-native": "^14.0.0-beta.0",
6-
"test-renderer": "^1.0.0"
5+
"@testing-library/react-native": "^14.0.0-0",
6+
"test-renderer": "^1.2.0"
77
}
88
}

codemods/v14-update-deps/tests/fixtures/move-from-deps/expected.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "test-project",
33
"version": "1.0.0",
44
"devDependencies": {
5-
"@testing-library/react-native": "^14.0.0-beta.0",
6-
"test-renderer": "^1.0.0"
5+
"@testing-library/react-native": "^14.0.0-0",
6+
"test-renderer": "^1.2.0"
77
}
88
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"dependencies": {
3+
"react": "19.0.0"
4+
},
5+
"devDependencies": {
6+
"@testing-library/react-native": "^14.0.0-0",
7+
"test-renderer": "^1.0.0"
8+
}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"dependencies": {
3+
"@testing-library/react-native": "^13.0.0",
4+
"react": "19.0.0"
5+
},
6+
"devDependencies": {
7+
"react-test-renderer": "19.0.0"
8+
}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"dependencies": {
3+
"react": "~19.1.0"
4+
},
5+
"devDependencies": {
6+
"@testing-library/react-native": "^14.0.0-0",
7+
"test-renderer": "^1.1.0"
8+
}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"dependencies": {
3+
"@testing-library/react-native": "^13.0.0",
4+
"react": "~19.1.0"
5+
},
6+
"devDependencies": {
7+
"react-test-renderer": "19.1.0"
8+
}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"dependencies": {
3+
"react": "19.2.x"
4+
},
5+
"devDependencies": {
6+
"@testing-library/react-native": "^14.0.0-0",
7+
"test-renderer": "^1.2.0"
8+
}
9+
}

0 commit comments

Comments
 (0)