Skip to content

Commit ed1351c

Browse files
henryqdineenHenry Q. Dineen
andauthored
[compiler] improve zod v3 backwards compat (#34877)
## Summary When upgrading to `babel-plugin-react-compiler@1.0.0` in a project that uses `zod@3` we are running into TypeScript errors like: ``` node_modules/babel-plugin-react-compiler/dist/index.d.ts:435:10 - error TS2694: Namespace '"/REDACTED/node_modules/zod/v3/external"' has no exported member 'core'. 435 }, z.core.$strip>>>; ~~~~ ``` This problem seems to be related to d6eb735, which introduced zod v3/v4 compatibility. Since `zod` is bundled into the compiler source this does not cause runtime issues and only manifests as TypeScript errors. My proposed solution is this PR is to use zod's [subpath versioning strategy](https://zod.dev/v4/versioning?id=versioning-in-zod-4) which allows you to support v3 and v4 APIs on both major versions. Changes in this PR include: - Updated `zod` import paths to `zod/v4` - Bumped min `zod` version to `^3.25.0` for zod which guarantees the `zod/v4` subpath is available. - Updated `zod-validation-error` import paths to `zod-validation-error/v4` - Bumped min `zod-validation-error ` version to `^3.5.0` - Updated `externals` tsup configuration where appropriate. Once the compiler drops zod v3 support we could optionally remove the `/v4` subpath from the imports. ## How did you test this change? Not totally sure the best way to test. I ran `NODE_ENV=production yarn workspace babel-plugin-react-compiler run build --dts` and diffed the `dist/` folder between my change and `v1.0.0` and it looks correct. We have a `patch-package` patch to workaround this for now and it works as expected. ```diff diff --git a/node_modules/babel-plugin-react-compiler/dist/index.d.ts b/node_modules/babel-plugin-react-compiler/dist/index.d.ts index 81c3f3d..daafc2c 100644 --- a/node_modules/babel-plugin-react-compiler/dist/index.d.ts +++ b/node_modules/babel-plugin-react-compiler/dist/index.d.ts @@ -1,7 +1,7 @@ import * as BabelCore from '@babel/core'; import { NodePath as NodePath$1 } from '@babel/core'; import * as t from '@babel/types'; -import { z } from 'zod'; +import { z } from 'zod/v4'; import { NodePath, Scope } from '@babel/traverse'; interface Result<T, E> { ``` Co-authored-by: Henry Q. Dineen <henryqdineen@gmail.com>
1 parent 93f8593 commit ed1351c

File tree

18 files changed

+45
-32
lines changed

18 files changed

+45
-32
lines changed

compiler/packages/babel-plugin-react-compiler/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@
5252
"react-dom": "0.0.0-experimental-4beb1fd8-20241118",
5353
"ts-jest": "^29.1.1",
5454
"ts-node": "^10.9.2",
55-
"zod": "^3.22.4 || ^4.0.0",
56-
"zod-validation-error": "^3.0.3 || ^4.0.0"
55+
"zod": "^3.25.0 || ^4.0.0",
56+
"zod-validation-error": "^3.5.0 || ^4.0.0"
5757
},
5858
"resolutions": {
5959
"./**/@babel/parser": "7.7.4",

compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Options.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import * as t from '@babel/types';
9-
import {z} from 'zod';
9+
import {z} from 'zod/v4';
1010
import {
1111
CompilerDiagnostic,
1212
CompilerError,
@@ -20,7 +20,7 @@ import {
2020
tryParseExternalFunction,
2121
} from '../HIR/Environment';
2222
import {hasOwnProperty} from '../Utils/utils';
23-
import {fromZodError} from 'zod-validation-error';
23+
import {fromZodError} from 'zod-validation-error/v4';
2424
import {CompilerPipelineValue} from './Pipeline';
2525

2626
const PanicThresholdOptionsSchema = z.enum([

compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
*/
77

88
import * as t from '@babel/types';
9-
import {ZodError, z} from 'zod';
10-
import {fromZodError} from 'zod-validation-error';
9+
import {ZodError, z} from 'zod/v4';
10+
import {fromZodError} from 'zod-validation-error/v4';
1111
import {CompilerError} from '../CompilerError';
1212
import {Logger, ProgramContext} from '../Entrypoint';
1313
import {Err, Ok, Result} from '../Utils/Result';

compiler/packages/babel-plugin-react-compiler/src/HIR/HIR.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {assertExhaustive} from '../Utils/utils';
1616
import {Environment, ReactFunctionType} from './Environment';
1717
import type {HookKind} from './ObjectShape';
1818
import {Type, makeType} from './Types';
19-
import {z} from 'zod';
19+
import {z} from 'zod/v4';
2020
import type {AliasingEffect} from '../Inference/AliasingEffects';
2121
import {isReservedWord} from '../Utils/Keyword';
2222
import {Err, Ok, Result} from '../Utils/Result';

compiler/packages/babel-plugin-react-compiler/src/HIR/TypeSchema.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import {isValidIdentifier} from '@babel/types';
9-
import {z} from 'zod';
9+
import {z} from 'zod/v4';
1010
import {Effect, ValueKind} from '..';
1111
import {
1212
EffectSchema,

compiler/packages/babel-plugin-react-compiler/src/Utils/TestUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8-
import {fromZodError} from 'zod-validation-error';
8+
import {fromZodError} from 'zod-validation-error/v4';
99
import {CompilerError} from '../CompilerError';
1010
import {
1111
CompilationMode,

compiler/packages/eslint-plugin-react-compiler/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
"@babel/core": "^7.24.4",
1616
"@babel/parser": "^7.24.4",
1717
"hermes-parser": "^0.25.1",
18-
"zod": "^3.22.4 || ^4.0.0",
19-
"zod-validation-error": "^3.0.3 || ^4.0.0"
18+
"zod": "^3.25.0 || ^4.0.0",
19+
"zod-validation-error": "^3.5.0 || ^4.0.0"
2020
},
2121
"devDependencies": {
2222
"@babel/preset-env": "^7.22.4",

compiler/packages/eslint-plugin-react-compiler/tsup.config.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,14 @@ import {defineConfig} from 'tsup';
1010
export default defineConfig({
1111
entry: ['./src/index.ts'],
1212
outDir: './dist',
13-
external: ['@babel/core', 'hermes-parser', 'zod', 'zod-validation-error'],
13+
external: [
14+
'@babel/core',
15+
'hermes-parser',
16+
'zod',
17+
'zod/v4',
18+
'zod-validation-error',
19+
'zod-validation-error/v4',
20+
],
1421
splitting: false,
1522
sourcemap: false,
1623
dts: false,

compiler/packages/react-compiler-healthcheck/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
"fast-glob": "^3.3.2",
1818
"ora": "5.4.1",
1919
"yargs": "^17.7.2",
20-
"zod": "^3.22.4 || ^4.0.0",
21-
"zod-validation-error": "^3.0.3 || ^4.0.0"
20+
"zod": "^3.25.0 || ^4.0.0",
21+
"zod-validation-error": "^3.5.0 || ^4.0.0"
2222
},
2323
"devDependencies": {},
2424
"engines": {

compiler/packages/react-compiler-healthcheck/tsup.config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ export default defineConfig({
1818
'ora',
1919
'yargs',
2020
'zod',
21+
'zod/v4',
2122
'zod-validation-error',
23+
'zod-validation-error/v4',
2224
],
2325
splitting: false,
2426
sourcemap: false,

0 commit comments

Comments
 (0)