Skip to content

Commit 88bacfd

Browse files
authored
feat(ecmascript): transform ts input with runtime flags (vercel/turborepo#4142)
### Description Another attempt to close WEB-659. The crux is same as previous PR, but attempt to change the location where it read config / bubble down the config values to the actual transform stage. Mainly, `enable_typescript_transform` is now accepting an option instead of boolean flag to down to `EcmaInputTransform::Typescript`, and `get_*_module_context()` reads the config value as needed.
1 parent 799077d commit 88bacfd

File tree

12 files changed

+88
-17
lines changed

12 files changed

+88
-17
lines changed

crates/next-core/src/app_render/next_layout_entry_transition.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ impl Transition for NextLayoutEntryTransition {
6666
context.into(),
6767
Value::new(EcmascriptModuleAssetType::Typescript),
6868
EcmascriptInputTransformsVc::cell(vec![
69-
EcmascriptInputTransform::TypeScript,
69+
EcmascriptInputTransform::TypeScript {
70+
use_define_for_class_fields: false,
71+
},
7072
EcmascriptInputTransform::React { refresh: false },
7173
]),
7274
context.compile_time_info(),

crates/next-core/src/app_source.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,9 @@ import BOOTSTRAP from {};
659659
Value::new(EcmascriptModuleAssetType::Typescript),
660660
EcmascriptInputTransformsVc::cell(vec![
661661
EcmascriptInputTransform::React { refresh: false },
662-
EcmascriptInputTransform::TypeScript,
662+
EcmascriptInputTransform::TypeScript {
663+
use_define_for_class_fields: false,
664+
},
663665
]),
664666
context.compile_time_info(),
665667
),
@@ -727,7 +729,9 @@ impl AppRouteVc {
727729
virtual_asset.into(),
728730
this.context,
729731
Value::new(EcmascriptModuleAssetType::Typescript),
730-
EcmascriptInputTransformsVc::cell(vec![EcmascriptInputTransform::TypeScript]),
732+
EcmascriptInputTransformsVc::cell(vec![EcmascriptInputTransform::TypeScript {
733+
use_define_for_class_fields: false,
734+
}]),
731735
this.context.compile_time_info(),
732736
InnerAssetsVc::cell(indexmap! {
733737
"ROUTE_CHUNK_GROUP".to_string() => entry

crates/next-core/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ pub mod react_refresh;
2828
pub mod router;
2929
pub mod router_source;
3030
mod runtime;
31+
mod typescript;
3132
mod util;
3233
mod web_entry_source;
3334

crates/next-core/src/next_client/context.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ use crate::{
3838
get_next_client_resolved_map,
3939
},
4040
react_refresh::assert_can_resolve_react_refresh,
41+
typescript::get_typescript_transform_options,
4142
util::foreign_code_context_condition,
4243
};
4344

@@ -128,6 +129,7 @@ pub async fn get_client_module_options_context(
128129
.await?
129130
.is_found();
130131

132+
let tsconfig = get_typescript_transform_options(project_path);
131133
let enable_webpack_loaders = {
132134
let options = &*next_config.webpack_loaders_options().await?;
133135
let loaders_options = WebpackLoadersOptions {
@@ -164,7 +166,7 @@ pub async fn get_client_module_options_context(
164166
..Default::default()
165167
}),
166168
enable_webpack_loaders,
167-
enable_typescript_transform: true,
169+
enable_typescript_transform: Some(tsconfig),
168170
rules: vec![(
169171
foreign_code_context_condition(next_config).await?,
170172
module_options_context.clone().cell(),

crates/next-core/src/next_client/transition.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ impl Transition for NextClientTransition {
8080
context.into(),
8181
Value::new(EcmascriptModuleAssetType::Typescript),
8282
EcmascriptInputTransformsVc::cell(vec![
83-
EcmascriptInputTransform::TypeScript,
83+
EcmascriptInputTransform::TypeScript {
84+
use_define_for_class_fields: false,
85+
},
8486
EcmascriptInputTransform::React { refresh: false },
8587
]),
8688
context.compile_time_info(),

crates/next-core/src/next_client_component/server_to_client_transition.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ impl Transition for NextServerToClientTransition {
5454
context.into(),
5555
Value::new(EcmascriptModuleAssetType::Typescript),
5656
EcmascriptInputTransformsVc::cell(vec![
57-
EcmascriptInputTransform::TypeScript,
57+
EcmascriptInputTransform::TypeScript {
58+
use_define_for_class_fields: false,
59+
},
5860
EcmascriptInputTransform::React { refresh: false },
5961
]),
6062
context.compile_time_info(),

crates/next-core/src/next_edge/transition.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,9 @@ impl Transition for NextEdgeTransition {
101101
virtual_asset.into(),
102102
context.into(),
103103
Value::new(EcmascriptModuleAssetType::Typescript),
104-
EcmascriptInputTransformsVc::cell(vec![EcmascriptInputTransform::TypeScript]),
104+
EcmascriptInputTransformsVc::cell(vec![EcmascriptInputTransform::TypeScript {
105+
use_define_for_class_fields: false,
106+
}]),
105107
context.compile_time_info(),
106108
InnerAssetsVc::cell(indexmap! {
107109
"ENTRY".to_string() => asset

crates/next-core/src/next_server/context.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ use crate::{
2828
next_build::{get_external_next_compiled_package_mapping, get_postcss_package_mapping},
2929
next_config::NextConfigVc,
3030
next_import_map::get_next_server_import_map,
31+
typescript::get_typescript_transform_options,
3132
util::foreign_code_context_condition,
3233
};
3334

@@ -228,6 +229,8 @@ pub async fn get_server_module_options_context(
228229
.clone_if()
229230
};
230231

232+
let tsconfig = get_typescript_transform_options(project_path);
233+
231234
let module_options_context = match ty.into_value() {
232235
ServerContextType::Pages { .. } | ServerContextType::PagesData { .. } => {
233236
let module_options_context = ModuleOptionsContext {
@@ -239,7 +242,7 @@ pub async fn get_server_module_options_context(
239242
enable_styled_jsx: true,
240243
enable_postcss_transform,
241244
enable_webpack_loaders,
242-
enable_typescript_transform: true,
245+
enable_typescript_transform: Some(tsconfig),
243246
rules: vec![(
244247
foreign_code_context_condition,
245248
module_options_context.clone().cell(),
@@ -258,7 +261,7 @@ pub async fn get_server_module_options_context(
258261
enable_styled_jsx: true,
259262
enable_postcss_transform,
260263
enable_webpack_loaders,
261-
enable_typescript_transform: true,
264+
enable_typescript_transform: Some(tsconfig),
262265
rules: vec![(
263266
foreign_code_context_condition,
264267
module_options_context.clone().cell(),
@@ -279,7 +282,7 @@ pub async fn get_server_module_options_context(
279282
enable_jsx: true,
280283
enable_postcss_transform,
281284
enable_webpack_loaders,
282-
enable_typescript_transform: true,
285+
enable_typescript_transform: Some(tsconfig),
283286
rules: vec![(
284287
foreign_code_context_condition,
285288
module_options_context.clone().cell(),
@@ -296,7 +299,7 @@ pub async fn get_server_module_options_context(
296299
ModuleOptionsContext {
297300
enable_postcss_transform,
298301
enable_webpack_loaders,
299-
enable_typescript_transform: true,
302+
enable_typescript_transform: Some(tsconfig),
300303
rules: vec![(
301304
foreign_code_context_condition,
302305
module_options_context.clone().cell(),
@@ -315,7 +318,7 @@ pub async fn get_server_module_options_context(
315318
enable_styled_jsx: true,
316319
enable_postcss_transform,
317320
enable_webpack_loaders,
318-
enable_typescript_transform: true,
321+
enable_typescript_transform: Some(tsconfig),
319322
rules: vec![(
320323
foreign_code_context_condition,
321324
module_options_context.clone().cell(),
@@ -333,7 +336,7 @@ pub async fn get_server_module_options_context(
333336
#[turbo_tasks::function]
334337
pub fn get_build_module_options_context() -> ModuleOptionsContextVc {
335338
ModuleOptionsContext {
336-
enable_typescript_transform: true,
339+
enable_typescript_transform: Some(Default::default()),
337340
..Default::default()
338341
}
339342
.cell()

crates/next-core/src/page_loader.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,9 @@ impl PageLoaderAssetVc {
8686
loader_entry_asset,
8787
this.client_context,
8888
Value::new(EcmascriptModuleAssetType::Typescript),
89-
EcmascriptInputTransformsVc::cell(vec![EcmascriptInputTransform::TypeScript]),
89+
EcmascriptInputTransformsVc::cell(vec![EcmascriptInputTransform::TypeScript {
90+
use_define_for_class_fields: false,
91+
}]),
9092
this.client_context.compile_time_info(),
9193
InnerAssetsVc::cell(indexmap! {
9294
"PAGE".to_string() => this.client_context.process(this.entry_asset, Value::new(ReferenceType::Entry(EntryReferenceSubType::Page)))

crates/next-core/src/page_source.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -718,7 +718,9 @@ impl SsrEntryVc {
718718
this.context,
719719
Value::new(EcmascriptModuleAssetType::Typescript),
720720
EcmascriptInputTransformsVc::cell(vec![
721-
EcmascriptInputTransform::TypeScript,
721+
EcmascriptInputTransform::TypeScript {
722+
use_define_for_class_fields: false,
723+
},
722724
EcmascriptInputTransform::React { refresh: false },
723725
]),
724726
this.context.compile_time_info(),

0 commit comments

Comments
 (0)