From b30a81e50796e69b32dc3a3a4bfb9a0281c1da25 Mon Sep 17 00:00:00 2001 From: zoomdong <1344492820@qq.com> Date: Thu, 12 Feb 2026 11:24:56 +0800 Subject: [PATCH 1/2] chore: add napi types for react --- crates/pack-core/src/config.rs | 11 +++++++++-- crates/pack-core/src/transform_options.rs | 10 ++++++++-- packages/pack-shared/src/config.ts | 3 +++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/crates/pack-core/src/config.rs b/crates/pack-core/src/config.rs index 8d7a28f5d2..382c533059 100644 --- a/crates/pack-core/src/config.rs +++ b/crates/pack-core/src/config.rs @@ -241,12 +241,19 @@ pub struct ExternalAdvanced { pub sub_path: Option, } +#[turbo_tasks::value] +#[derive(Clone, Debug, Deserialize, OperationValue)] +#[serde(rename_all = "camelCase")] +pub enum ReactRuntime { + Automatic, + Classic, +} + #[turbo_tasks::value(eq = "manual")] #[derive(Clone, Debug, PartialEq, Default, Deserialize, OperationValue)] #[serde(rename_all = "camelCase")] pub struct ReactConfig { - /// JSX runtime mode: "automatic" (default) or "classic" - pub runtime: Option, + pub runtime: Option, } #[turbo_tasks::value(eq = "manual")] diff --git a/crates/pack-core/src/transform_options.rs b/crates/pack-core/src/transform_options.rs index ee54a29f2a..17d35a084d 100644 --- a/crates/pack-core/src/transform_options.rs +++ b/crates/pack-core/src/transform_options.rs @@ -11,7 +11,10 @@ use turbopack_core::{ }; use turbopack_ecmascript::typescript::resolve::{read_from_tsconfigs, read_tsconfigs, tsconfig}; -use crate::{config::Config, mode::Mode}; +use crate::{ + config::{Config, ReactRuntime}, + mode::Mode, +}; async fn get_typescript_options( project_path: FileSystemPath, @@ -133,7 +136,10 @@ pub async fn get_jsx_transform_options( } else { None }, - runtime: react_config.runtime.clone().or(Some("automatic".into())), + runtime: react_config.runtime.clone().map(|runtime| match runtime { + ReactRuntime::Automatic => "automatic".into(), + ReactRuntime::Classic => "classic".into(), + }), react_refresh: enable_react_refresh, }; diff --git a/packages/pack-shared/src/config.ts b/packages/pack-shared/src/config.ts index 2ebe834c38..da27f9bc52 100644 --- a/packages/pack-shared/src/config.ts +++ b/packages/pack-shared/src/config.ts @@ -189,6 +189,9 @@ export interface ConfigComplete { images?: { inlineLimit?: number; }; + react?: { + runtime?: "automatic" | "classic"; + }; stats?: boolean; persistentCaching?: boolean; nodePolyfill?: boolean; From ccdef692521f5304bbb08341dfeb92792ae75719 Mon Sep 17 00:00:00 2001 From: zoomdong <1344492820@qq.com> Date: Wed, 11 Feb 2026 19:32:52 -0800 Subject: [PATCH 2/2] Update crates/pack-core/src/transform_options.rs Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- crates/pack-core/src/transform_options.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/pack-core/src/transform_options.rs b/crates/pack-core/src/transform_options.rs index 17d35a084d..7d674bba4f 100644 --- a/crates/pack-core/src/transform_options.rs +++ b/crates/pack-core/src/transform_options.rs @@ -136,7 +136,7 @@ pub async fn get_jsx_transform_options( } else { None }, - runtime: react_config.runtime.clone().map(|runtime| match runtime { + runtime: react_config.runtime.as_ref().map(|runtime| match runtime { ReactRuntime::Automatic => "automatic".into(), ReactRuntime::Classic => "classic".into(), }),