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..7d674bba4f 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.as_ref().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;