Skip to content

Commit

Permalink
fix(transform_options): enforce default react runtime
Browse files Browse the repository at this point in the history
  • Loading branch information
kwonoj committed Apr 14, 2023
1 parent 3aca97b commit 51b5820
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ pub async fn get_client_module_options_context(
let tsconfig = get_typescript_transform_options(project_path);
let decorators_options = get_decorators_transform_options(project_path);
let mdx_rs_options = *next_config.mdx_rs().await?;
let jsx_runtime_options = get_jsx_transform_options(project_path, mdx_rs_options);
let jsx_runtime_options = get_jsx_transform_options(project_path);
let enable_webpack_loaders = {
let options = &*next_config.webpack_loaders_options().await?;
let loaders_options = WebpackLoadersOptions {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ pub async fn get_server_module_options_context(
let tsconfig = get_typescript_transform_options(project_path);
let decorators_options = get_decorators_transform_options(project_path);
let mdx_rs_options = *next_config.mdx_rs().await?;
let jsx_runtime_options = get_jsx_transform_options(project_path, mdx_rs_options);
let jsx_runtime_options = get_jsx_transform_options(project_path);
let enable_emotion = *get_emotion_compiler_config(next_config).await?;
let enable_styled_components = *get_styled_components_compiler_config(next_config).await?;

Expand Down
34 changes: 11 additions & 23 deletions packages/next-swc/crates/next-core/src/transform_options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,45 +123,33 @@ pub async fn get_decorators_transform_options(
#[turbo_tasks::function]
pub async fn get_jsx_transform_options(
project_path: FileSystemPathVc,
is_mdx_rs_enabled: bool,
) -> Result<JsxTransformOptionsVc> {
let tsconfig = get_typescript_options(project_path).await;

// [NOTE]: ref: WEB-901
// next.js does not allow to overriding react runtime config via tsconfig / jsconfig,
// it forces overrides into automatic runtime instead.
// [TODO]: we need to emit / validate config message as same as next.js devserver does
let react_transform_options = JsxTransformOptions {
import_source: None,
runtime: Some("automatic".to_string()),
};

let react_transform_options = if let Some(tsconfig) = tsconfig {
read_from_tsconfigs(&tsconfig, |json, _| {
let jsx_import_source = json["compilerOptions"]["jsxImportSource"]
.as_str()
.map(|s| s.to_string());

// interop between tsconfig's jsx to swc's jsx runtime configuration. Swc's jsx
// runtime is a subset of tsconfig's jsx.
let runtime = if let Some(jsx_runtime) = json["compilerOptions"]["jsx"].as_str() {
match jsx_runtime {
"react" => Some("classic".to_string()),
"react-jsx" => Some("automatic".to_string()),
"react-jsxdev" => Some("automatic".to_string()),
_ => None,
}
} else {
None
};

Some(JsxTransformOptions {
import_source: jsx_import_source,
runtime,
..react_transform_options.clone()
})
})
.await?
.unwrap_or_default()
} else if is_mdx_rs_enabled {
// Mdx can implicitly includes jsx components, trying to enable jsx with default
// if jsx is not explicitly enabled
JsxTransformOptions {
import_source: None,
runtime: None,
}
} else {
Default::default()
react_transform_options
};

Ok(react_transform_options.cell())
Expand Down

0 comments on commit 51b5820

Please sign in to comment.