From 8278245d3eca2141eef6ece5cc1a25c27f8da887 Mon Sep 17 00:00:00 2001 From: OJ Kwon <1210596+kwonoj@users.noreply.github.com> Date: Fri, 2 Feb 2024 12:21:35 -0800 Subject: [PATCH 1/4] refactor(turbopack): remove deprecated options --- crates/turbopack/src/module_options/mod.rs | 27 +------------------ .../module_options/module_options_context.rs | 18 +------------ 2 files changed, 2 insertions(+), 43 deletions(-) diff --git a/crates/turbopack/src/module_options/mod.rs b/crates/turbopack/src/module_options/mod.rs index 6ed4fe3456aa9..96442c250a2a5 100644 --- a/crates/turbopack/src/module_options/mod.rs +++ b/crates/turbopack/src/module_options/mod.rs @@ -72,7 +72,6 @@ impl ModuleOptions { ref enable_postcss_transform, ref enable_webpack_loaders, preset_env_versions, - ref custom_ecma_transform_plugins, ref custom_rules, execution_context, ref rules, @@ -91,28 +90,7 @@ impl ModuleOptions { } } - let (before_transform_plugins, after_transform_plugins) = - if let Some(transform_plugins) = custom_ecma_transform_plugins { - let transform_plugins = transform_plugins.await?; - ( - transform_plugins - .source_transforms - .iter() - .cloned() - .map(EcmascriptInputTransform::Plugin) - .collect(), - transform_plugins - .output_transforms - .iter() - .cloned() - .map(EcmascriptInputTransform::Plugin) - .collect(), - ) - } else { - (vec![], vec![]) - }; - - let mut transforms = before_transform_plugins; + let mut transforms = vec![]; // Order of transforms is important. e.g. if the React transform occurs before // Styled JSX, there won't be JSX nodes for Styled JSX to transform. @@ -176,7 +154,6 @@ impl ModuleOptions { .iter() .cloned() .chain(transforms.iter().cloned()) - .chain(after_transform_plugins.iter().cloned()) .collect(), ) } else { @@ -196,7 +173,6 @@ impl ModuleOptions { .iter() .cloned() .chain(transforms.iter().cloned()) - .chain(after_transform_plugins.iter().cloned()) .collect(), ); @@ -217,7 +193,6 @@ impl ModuleOptions { .iter() .cloned() .chain(transforms.iter().cloned()) - .chain(after_transform_plugins.iter().cloned()) .collect(), ); diff --git a/crates/turbopack/src/module_options/module_options_context.rs b/crates/turbopack/src/module_options/module_options_context.rs index 9dfc97db7cef0..3dfb216b8aeee 100644 --- a/crates/turbopack/src/module_options/module_options_context.rs +++ b/crates/turbopack/src/module_options/module_options_context.rs @@ -2,7 +2,7 @@ use indexmap::IndexMap; use serde::{Deserialize, Serialize}; use turbo_tasks::{trace::TraceRawVcs, ValueDefault, Vc}; use turbopack_core::{environment::Environment, resolve::options::ImportMapping}; -use turbopack_ecmascript::{references::esm::UrlRewriteBehavior, TransformPlugin, TreeShakingMode}; +use turbopack_ecmascript::{references::esm::UrlRewriteBehavior, TreeShakingMode}; use turbopack_node::{ execution_context::ExecutionContext, transforms::{postcss::PostCssTransformOptions, webpack::WebpackLoaderItems}, @@ -99,18 +99,6 @@ pub struct JsxTransformOptions { pub runtime: Option, } -/// Configuration options for the custom ecma transform to be applied. -#[turbo_tasks::value(shared)] -#[derive(Default, Clone)] -pub struct CustomEcmascriptTransformPlugins { - /// List of plugins to be applied before the main transform. - /// Transform will be applied in the order of the list. - pub source_transforms: Vec>, - /// List of plugins to be applied after the main transform. - /// Transform will be applied in the order of the list. - pub output_transforms: Vec>, -} - #[turbo_tasks::value(shared)] #[derive(Default, Clone)] #[serde(default)] @@ -152,10 +140,6 @@ pub struct ModuleOptionsContext { // however we might want to unify them in the future. pub enable_mdx_rs: Option>, pub preset_env_versions: Option>, - #[deprecated( - note = "Use custom_rules with ModuleRuleEffect::ExtendEcmascriptTransforms instead" - )] - pub custom_ecma_transform_plugins: Option>, /// Custom rules to be applied after all default rules. pub custom_rules: Vec, pub execution_context: Option>, From bdb1f03feaa2ac7786fa93615524f0afb672bce1 Mon Sep 17 00:00:00 2001 From: OJ Kwon <1210596+kwonoj@users.noreply.github.com> Date: Fri, 2 Feb 2024 12:26:08 -0800 Subject: [PATCH 2/4] refactor(turbopack): remove deprecated moduleruleeffect --- crates/turbopack/src/lib.rs | 61 ------------------- .../src/module_options/module_rule.rs | 5 -- 2 files changed, 66 deletions(-) diff --git a/crates/turbopack/src/lib.rs b/crates/turbopack/src/lib.rs index 61195e8d73211..efbaaf530c750 100644 --- a/crates/turbopack/src/lib.rs +++ b/crates/turbopack/src/lib.rs @@ -466,67 +466,6 @@ async fn process_default_internal( ModuleRuleEffect::ModuleType(module) => { current_module_type = Some(*module); } - ModuleRuleEffect::AddEcmascriptTransforms(additional_transforms) => { - current_module_type = match current_module_type { - Some(ModuleType::Ecmascript { - transforms, - options, - }) => Some(ModuleType::Ecmascript { - transforms: transforms.extend(*additional_transforms), - options, - }), - Some(ModuleType::Typescript { - transforms, - tsx, - analyze_types, - options, - }) => Some(ModuleType::Typescript { - transforms: transforms.extend(*additional_transforms), - tsx, - analyze_types, - options, - }), - Some(ModuleType::Mdx { - transforms, - options, - }) => Some(ModuleType::Mdx { - transforms: transforms.extend(*additional_transforms), - options, - }), - Some(module_type) => { - ModuleIssue { - ident, - title: StyledString::Text("Invalid module type".to_string()) - .cell(), - description: StyledString::Text( - "The module type must be Ecmascript or Typescript to add \ - Ecmascript transforms" - .to_string(), - ) - .cell(), - } - .cell() - .emit(); - Some(module_type) - } - None => { - ModuleIssue { - ident, - title: StyledString::Text("Missing module type".to_string()) - .cell(), - description: StyledString::Text( - "The module type effect must be applied before adding \ - Ecmascript transforms" - .to_string(), - ) - .cell(), - } - .cell() - .emit(); - None - } - }; - } ModuleRuleEffect::ExtendEcmascriptTransforms { prepend, append } => { current_module_type = match current_module_type { Some(ModuleType::Ecmascript { diff --git a/crates/turbopack/src/module_options/module_rule.rs b/crates/turbopack/src/module_options/module_rule.rs index 282a3261e0efe..7508dc7f783bf 100644 --- a/crates/turbopack/src/module_options/module_rule.rs +++ b/crates/turbopack/src/module_options/module_rule.rs @@ -85,11 +85,6 @@ impl ModuleRule { #[derive(Debug, Clone)] pub enum ModuleRuleEffect { ModuleType(ModuleType), - #[deprecated( - note = "ExtendEcmascriptTransforms provides equivalent features, as well as supporting an \ - additional way to prepend transforms." - )] - AddEcmascriptTransforms(Vc), /// Allow to extend an existing Ecmascript module rules for the additional /// transforms. First argument will prepend the existing transforms, and /// the second argument will append the new transforms. From 39c5f65021a4ecf624f45300a483ded28207b480 Mon Sep 17 00:00:00 2001 From: OJ Kwon <1210596+kwonoj@users.noreply.github.com> Date: Fri, 2 Feb 2024 12:55:13 -0800 Subject: [PATCH 3/4] refactor(cli): update references --- crates/turbopack-cli/src/contexts.rs | 45 +++++++++++++++++----------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/crates/turbopack-cli/src/contexts.rs b/crates/turbopack-cli/src/contexts.rs index a0e56d813d863..3a35185c3168c 100644 --- a/crates/turbopack-cli/src/contexts.rs +++ b/crates/turbopack-cli/src/contexts.rs @@ -5,8 +5,11 @@ use turbo_tasks::{Value, Vc}; use turbo_tasks_fs::{FileSystem, FileSystemPath}; use turbopack::{ condition::ContextCondition, - ecmascript::TreeShakingMode, - module_options::{CustomEcmascriptTransformPlugins, JsxTransformOptions, ModuleOptionsContext}, + ecmascript::{EcmascriptInputTransform, TreeShakingMode}, + module_options::{ + JsxTransformOptions, ModuleOptionsContext, ModuleRule, ModuleRuleCondition, + ModuleRuleEffect, + }, resolve_options_context::ResolveOptionsContext, ModuleAssetContext, }; @@ -123,24 +126,32 @@ async fn get_client_module_options_context( let versions = *env.runtime_versions().await?; - let custom_ecma_transform_plugins = Some(CustomEcmascriptTransformPlugins::cell( - CustomEcmascriptTransformPlugins { - source_transforms: vec![ - Vc::cell(Box::new( + let conditions = ModuleRuleCondition::any(vec![ + ModuleRuleCondition::ResourcePathEndsWith(".js".to_string()), + ModuleRuleCondition::ResourcePathEndsWith(".jsx".to_string()), + ModuleRuleCondition::ResourcePathEndsWith(".ts".to_string()), + ModuleRuleCondition::ResourcePathEndsWith(".tsx".to_string()), + ]); + + let custom_rules = ModuleRule::new( + conditions, + vec![ModuleRuleEffect::ExtendEcmascriptTransforms { + prepend: Vc::cell(vec![ + EcmascriptInputTransform::Plugin(Vc::cell(Box::new( EmotionTransformer::new(&EmotionTransformConfig::default()) .expect("Should be able to create emotion transformer"), - ) as _), - Vc::cell(Box::new(StyledComponentsTransformer::new( - &StyledComponentsTransformConfig::default(), - )) as _), - Vc::cell(Box::new(StyledJsxTransformer::new( + ) as _)), + EcmascriptInputTransform::Plugin(Vc::cell(Box::new( + StyledComponentsTransformer::new(&StyledComponentsTransformConfig::default()), + ) as _)), + EcmascriptInputTransform::Plugin(Vc::cell(Box::new(StyledJsxTransformer::new( module_options_context.use_lightningcss, versions, - )) as _), - ], - output_transforms: vec![], - }, - )); + )) as _)), + ]), + append: Vc::cell(vec![]), + }], + ); let module_options_context = ModuleOptionsContext { enable_jsx, @@ -150,7 +161,7 @@ async fn get_client_module_options_context( foreign_code_context_condition().await?, module_options_context.clone().cell(), )], - custom_ecma_transform_plugins, + custom_rules: vec![custom_rules], ..module_options_context } .cell(); From b36b7518bf10f4bdb70ed37d131970e15438cfbb Mon Sep 17 00:00:00 2001 From: OJ Kwon <1210596+kwonoj@users.noreply.github.com> Date: Fri, 2 Feb 2024 13:09:44 -0800 Subject: [PATCH 4/4] refactor(tests): update references --- crates/turbopack-tests/tests/snapshot.rs | 48 ++++++++++++++---------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/crates/turbopack-tests/tests/snapshot.rs b/crates/turbopack-tests/tests/snapshot.rs index 50eb9d35f1350..6bac2add586e7 100644 --- a/crates/turbopack-tests/tests/snapshot.rs +++ b/crates/turbopack-tests/tests/snapshot.rs @@ -21,8 +21,11 @@ use turbo_tasks_fs::{ use turbo_tasks_memory::MemoryBackend; use turbopack::{ condition::ContextCondition, - ecmascript::EcmascriptModuleAsset, - module_options::{CustomEcmascriptTransformPlugins, JsxTransformOptions, ModuleOptionsContext}, + ecmascript::{EcmascriptInputTransform, EcmascriptModuleAsset}, + module_options::{ + JsxTransformOptions, ModuleOptionsContext, ModuleRule, ModuleRuleCondition, + ModuleRuleEffect, + }, resolve_options_context::ResolveOptionsContext, ModuleAssetContext, }; @@ -226,23 +229,28 @@ async fn run_test(resource: String) -> Result> { .free_var_references(free_var_references!(..defines.into_iter()).cell()) .cell(); - let custom_ecma_transform_plugins = Some(CustomEcmascriptTransformPlugins::cell( - CustomEcmascriptTransformPlugins { - source_transforms: vec![ - Vc::cell(Box::new( - EmotionTransformer::new(&EmotionTransformConfig { - sourcemap: Some(false), - ..Default::default() - }) - .expect("Should be able to create emotion transformer"), - ) as _), - Vc::cell(Box::new(StyledComponentsTransformer::new( - &StyledComponentsTransformConfig::default(), - )) as _), - ], - output_transforms: vec![], - }, - )); + let conditions = ModuleRuleCondition::any(vec![ + ModuleRuleCondition::ResourcePathEndsWith(".js".to_string()), + ModuleRuleCondition::ResourcePathEndsWith(".jsx".to_string()), + ModuleRuleCondition::ResourcePathEndsWith(".ts".to_string()), + ModuleRuleCondition::ResourcePathEndsWith(".tsx".to_string()), + ]); + + let custom_rules = ModuleRule::new( + conditions, + vec![ModuleRuleEffect::ExtendEcmascriptTransforms { + prepend: Vc::cell(vec![ + EcmascriptInputTransform::Plugin(Vc::cell(Box::new( + EmotionTransformer::new(&EmotionTransformConfig::default()) + .expect("Should be able to create emotion transformer"), + ) as _)), + EcmascriptInputTransform::Plugin(Vc::cell(Box::new( + StyledComponentsTransformer::new(&StyledComponentsTransformConfig::default()), + ) as _)), + ]), + append: Vc::cell(vec![]), + }], + ); let asset_context: Vc> = Vc::upcast(ModuleAssetContext::new( Vc::cell(HashMap::new()), compile_time_info, @@ -259,7 +267,7 @@ async fn run_test(resource: String) -> Result> { } .cell(), )], - custom_ecma_transform_plugins, + custom_rules: vec![custom_rules], ..Default::default() } .into(),