diff --git a/Cargo.lock b/Cargo.lock index aba77d1703d22..4a8237958024c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6487,12 +6487,6 @@ dependencies = [ "swc_bundler", "swc_cached", "swc_common", - "swc_css_ast", - "swc_css_codegen", - "swc_css_compat", - "swc_css_modules", - "swc_css_parser", - "swc_css_visit", "swc_ecma_ast", "swc_ecma_codegen", "swc_ecma_lints", @@ -6589,22 +6583,6 @@ dependencies = [ "swc_css_visit", ] -[[package]] -name = "swc_css_modules" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "924f169c80ac00d9e710c222e1d7e01bb20ad63fcc1213c095ce539bba59cf12" -dependencies = [ - "rustc-hash 1.1.0", - "serde", - "swc_atoms", - "swc_common", - "swc_css_ast", - "swc_css_codegen", - "swc_css_parser", - "swc_css_visit", -] - [[package]] name = "swc_css_parser" version = "4.0.0" diff --git a/crates/next-core/src/next_client/context.rs b/crates/next-core/src/next_client/context.rs index 188001840a134..f81837fcbf49b 100644 --- a/crates/next-core/src/next_client/context.rs +++ b/crates/next-core/src/next_client/context.rs @@ -265,7 +265,6 @@ pub async fn get_client_module_options_context( let tree_shaking_mode_for_foreign_code = *next_config .tree_shaking_mode_for_foreign_code(next_mode.is_development()) .await?; - let use_swc_css = *next_config.use_swc_css().await?; let target_browsers = env.runtime_versions(); let mut next_client_rules = @@ -355,7 +354,6 @@ pub async fn get_client_module_options_context( enable_webpack_loaders, enable_mdx_rs, css: CssOptionsContext { - use_swc_css, minify_type: if *next_config.turbo_minify(mode).await? { MinifyType::Minify } else { diff --git a/crates/next-core/src/next_config.rs b/crates/next-core/src/next_config.rs index 2c338c77b9b0f..b7a41570a3958 100644 --- a/crates/next-core/src/next_config.rs +++ b/crates/next-core/src/next_config.rs @@ -401,7 +401,6 @@ pub struct ExperimentalTurboConfig { pub rules: Option>, pub resolve_alias: Option>, pub resolve_extensions: Option>, - pub use_swc_css: Option, pub tree_shaking: Option, pub module_id_strategy: Option, pub minify: Option, @@ -1156,17 +1155,6 @@ impl NextConfig { )) } - #[turbo_tasks::function] - pub fn use_swc_css(&self) -> Vc { - Vc::cell( - self.experimental - .turbo - .as_ref() - .and_then(|turbo| turbo.use_swc_css) - .unwrap_or(false), - ) - } - #[turbo_tasks::function] pub fn optimize_package_imports(&self) -> Vc> { Vc::cell( diff --git a/crates/next-core/src/next_server/context.rs b/crates/next-core/src/next_server/context.rs index e4b8099581ec4..546bf5ccadfcc 100644 --- a/crates/next-core/src/next_server/context.rs +++ b/crates/next-core/src/next_server/context.rs @@ -472,7 +472,6 @@ pub async fn get_server_module_options_context( let tree_shaking_mode_for_foreign_code = *next_config .tree_shaking_mode_for_foreign_code(next_mode.is_development()) .await?; - let use_swc_css = *next_config.use_swc_css().await?; let versions = RuntimeVersions(Default::default()).cell(); // ModuleOptionsContext related options @@ -519,7 +518,6 @@ pub async fn get_server_module_options_context( }, execution_context: Some(execution_context), css: CssOptionsContext { - use_swc_css, ..Default::default() }, tree_shaking_mode: tree_shaking_mode_for_user_code, diff --git a/crates/next-core/src/next_shared/transforms/styled_jsx.rs b/crates/next-core/src/next_shared/transforms/styled_jsx.rs index 78e5c60f43349..04c4163bd59f1 100644 --- a/crates/next-core/src/next_shared/transforms/styled_jsx.rs +++ b/crates/next-core/src/next_shared/transforms/styled_jsx.rs @@ -13,10 +13,9 @@ pub async fn get_styled_jsx_transform_rule( target_browsers: Vc, ) -> Result> { let enable_mdx_rs = next_config.mdx_rs().await?.is_some(); - let use_swc_css = *next_config.use_swc_css().await?; let versions = *target_browsers.await?; - let transformer = StyledJsxTransformer::new(!use_swc_css, versions); + let transformer = StyledJsxTransformer::new(versions); Ok(Some(get_ecma_transform_rule( Box::new(transformer), enable_mdx_rs, diff --git a/docs/01-app/03-api-reference/05-config/01-next-config-js/turbo.mdx b/docs/01-app/03-api-reference/05-config/01-next-config-js/turbo.mdx index 67e17af8cc668..0e846a46aee2b 100644 --- a/docs/01-app/03-api-reference/05-config/01-next-config-js/turbo.mdx +++ b/docs/01-app/03-api-reference/05-config/01-next-config-js/turbo.mdx @@ -51,7 +51,6 @@ The following options are available for the `turbo` configuration: | `resolveAlias` | Map aliased imports to modules to load in their place. | | `resolveExtensions` | List of extensions to resolve when importing files. | | `moduleIdStrategy` | Assign module IDs | -| `useSwcCss` | Use `swc_css` instead of `lightningcss` for Turbopack | | `treeShaking` | Enable tree shaking for the turbopack dev server and build. | | `memoryLimit` | A target memory limit for turbo, in bytes. | diff --git a/packages/next/src/server/config-schema.ts b/packages/next/src/server/config-schema.ts index 710553b474bb7..cd65de10d5afd 100644 --- a/packages/next/src/server/config-schema.ts +++ b/packages/next/src/server/config-schema.ts @@ -404,7 +404,6 @@ export const configSchema: zod.ZodType = z.lazy(() => ) .optional(), resolveExtensions: z.array(z.string()).optional(), - useSwcCss: z.boolean().optional(), treeShaking: z.boolean().optional(), persistentCaching: z .union([z.number(), z.literal(false)]) diff --git a/packages/next/src/server/config-shared.ts b/packages/next/src/server/config-shared.ts index 3a236b4c63316..a1bd9a74eadf1 100644 --- a/packages/next/src/server/config-shared.ts +++ b/packages/next/src/server/config-shared.ts @@ -145,11 +145,6 @@ export interface ExperimentalTurboOptions { */ rules?: Record - /** - * Use swc_css instead of lightningcss for Turbopack - */ - useSwcCss?: boolean - /** * A target memory limit for turbo, in bytes. */ diff --git a/test/development/app-dir/experimental-lightningcss/next.config.js b/test/development/app-dir/experimental-lightningcss/next.config.js index 7d92acfafea12..89e3729811429 100644 --- a/test/development/app-dir/experimental-lightningcss/next.config.js +++ b/test/development/app-dir/experimental-lightningcss/next.config.js @@ -4,9 +4,6 @@ const nextConfig = { experimental: { useLightningcss: true, - turbo: { - useSwcCss: false, - }, }, } diff --git a/turbopack/crates/turbopack-cli/src/contexts.rs b/turbopack/crates/turbopack-cli/src/contexts.rs index 603594cd1d994..76b3b6f4f3254 100644 --- a/turbopack/crates/turbopack-cli/src/contexts.rs +++ b/turbopack/crates/turbopack-cli/src/contexts.rs @@ -152,7 +152,6 @@ async fn get_client_module_options_context( StyledComponentsTransformer::new(&StyledComponentsTransformConfig::default()), ) as _)), EcmascriptInputTransform::Plugin(Vc::cell(Box::new(StyledJsxTransformer::new( - !module_options_context.css.use_swc_css, versions, )) as _)), ]), diff --git a/turbopack/crates/turbopack-css/Cargo.toml b/turbopack/crates/turbopack-css/Cargo.toml index c9d329168b392..b2105b8446026 100644 --- a/turbopack/crates/turbopack-css/Cargo.toml +++ b/turbopack/crates/turbopack-css/Cargo.toml @@ -34,12 +34,6 @@ turbopack-swc-utils = { workspace = true } parcel_sourcemap = "2.1.1" smallvec = { workspace = true } swc_core = { workspace = true, features = [ - "css_ast", - "css_codegen", - "css_compat", - "css_modules", - "css_parser", - "css_visit", "ecma_ast", "common", "common_concurrent", diff --git a/turbopack/crates/turbopack-css/src/asset.rs b/turbopack/crates/turbopack-css/src/asset.rs index cf25b1cf194c3..08f504f2d4708 100644 --- a/turbopack/crates/turbopack-css/src/asset.rs +++ b/turbopack/crates/turbopack-css/src/asset.rs @@ -25,12 +25,8 @@ use crate::{ }; #[turbo_tasks::function] -fn modifier(use_swc_css: bool) -> Vc { - if use_swc_css { - Vc::cell("swc css".into()) - } else { - Vc::cell("css".into()) - } +fn modifier() -> Vc { + Vc::cell("css".into()) } #[turbo_tasks::value] @@ -41,7 +37,6 @@ pub struct CssModuleAsset { import_context: Option>, ty: CssModuleAssetType, minify_type: MinifyType, - use_swc_css: bool, } #[turbo_tasks::value_impl] @@ -53,7 +48,6 @@ impl CssModuleAsset { asset_context: Vc>, ty: CssModuleAssetType, minify_type: MinifyType, - use_swc_css: bool, import_context: Option>, ) -> Vc { Self::cell(CssModuleAsset { @@ -62,7 +56,6 @@ impl CssModuleAsset { import_context, ty, minify_type, - use_swc_css, }) } @@ -85,7 +78,6 @@ impl ParseCss for CssModuleAsset { this.import_context .unwrap_or_else(|| ImportContext::new(vec![], vec![], vec![])), this.ty, - this.use_swc_css, )) } } @@ -118,7 +110,7 @@ impl Module for CssModuleAsset { let mut ident = self .source .ident() - .with_modifier(modifier(self.use_swc_css)) + .with_modifier(modifier()) .with_layer(self.asset_context.layer()); if let Some(import_context) = self.import_context { ident = ident.with_modifier(import_context.modifier()) diff --git a/turbopack/crates/turbopack-css/src/process.rs b/turbopack/crates/turbopack-css/src/process.rs index 7c431b3da5a2a..1442bd77ea8ad 100644 --- a/turbopack/crates/turbopack-css/src/process.rs +++ b/turbopack/crates/turbopack-css/src/process.rs @@ -3,36 +3,19 @@ use std::{ sync::{Arc, RwLock}, }; -use anyhow::{bail, Context, Result}; +use anyhow::{bail, Result}; use lightningcss::{ - css_modules::{CssModuleExport, CssModuleExports, CssModuleReference, Pattern, Segment}, - dependencies::{Dependency, ImportDependency, Location, SourceRange}, + css_modules::{CssModuleExport, CssModuleExports, Pattern, Segment}, stylesheet::{ParserOptions, PrinterOptions, StyleSheet, ToCssResult}, targets::{Features, Targets}, values::url::Url, visit_types, visitor::Visit, }; -use once_cell::sync::Lazy; -use regex::Regex; use smallvec::smallvec; use swc_core::{ - atoms::Atom, base::sourcemap::SourceMapBuilder, - common::{BytePos, FileName, LineCol, Span}, - css::{ - ast::{ - ComplexSelector, ComplexSelectorChildren, CompoundSelector, ForgivingComplexSelector, - ForgivingRelativeSelector, PseudoClassSelectorChildren, PseudoElementSelectorChildren, - RelativeSelector, SubclassSelector, TypeSelector, UrlValue, - }, - codegen::{ - writer::basic::{BasicCssWriter, BasicCssWriterConfig}, - CodeGenerator, - }, - modules::{CssClassName, TransformConfig}, - visit::{VisitMut, VisitMutWith, VisitWith}, - }, + common::{BytePos, LineCol}, }; use tracing::Instrument; use turbo_tasks::{FxIndexMap, RcStr, ValueToString, Vc}; @@ -52,7 +35,6 @@ use turbopack_core::{ source_pos::SourcePos, SOURCE_MAP_PREFIX, }; -use turbopack_swc_utils::emitter::IssueEmitter; use crate::{ lifetime_util::stylesheet_into_static, @@ -64,23 +46,8 @@ use crate::{ CssModuleAssetType, }; -// Capture up until the first "." -static BASENAME_RE: Lazy = Lazy::new(|| Regex::new(r"^[^.]*").unwrap()); - #[derive(Debug)] -pub enum StyleSheetLike<'i, 'o> { - LightningCss(StyleSheet<'i, 'o>), - Swc { - stylesheet: swc_core::css::ast::Stylesheet, - css_modules: Option, - }, -} - -#[derive(Debug, Clone)] -pub struct SwcCssModuleMode { - basename: String, - path_hash: u32, -} +pub struct StyleSheetLike<'i, 'o>(pub(crate) StyleSheet<'i, 'o>); impl PartialEq for StyleSheetLike<'_, '_> { fn eq(&self, _: &Self) -> bool { @@ -95,196 +62,51 @@ impl StyleSheetLike<'_, '_> { &self, options: ParserOptions<'static, 'static>, ) -> StyleSheetLike<'static, 'static> { - match self { - StyleSheetLike::LightningCss(ss) => { - StyleSheetLike::LightningCss(stylesheet_into_static(ss, options)) - } - StyleSheetLike::Swc { - stylesheet, - css_modules, - } => StyleSheetLike::Swc { - stylesheet: stylesheet.clone(), - css_modules: css_modules.clone(), - }, - } + StyleSheetLike(stylesheet_into_static(&self.0, options)) } pub fn to_css( &self, - cm: Arc, code: &str, minify_type: MinifyType, enable_srcmap: bool, - remove_imports: bool, handle_nesting: bool, ) -> Result { - match self { - StyleSheetLike::LightningCss(ss) => { - let mut srcmap = if enable_srcmap { - Some(parcel_sourcemap::SourceMap::new("")) - } else { - None - }; - - let targets = if handle_nesting { - Targets { - include: Features::Nesting, - ..Default::default() - } - } else { - Default::default() - }; - - let result = ss.to_css(PrinterOptions { - minify: matches!(minify_type, MinifyType::Minify), - source_map: srcmap.as_mut(), - targets, - analyze_dependencies: None, - ..Default::default() - })?; - - if let Some(srcmap) = &mut srcmap { - debug_assert_eq!(ss.sources.len(), 1); - - srcmap.add_sources(ss.sources.clone()); - srcmap.set_source_content(0, code)?; - } + let ss = &self.0; + let mut srcmap = if enable_srcmap { + Some(parcel_sourcemap::SourceMap::new("")) + } else { + None + }; - Ok(( - result, - srcmap.map(ParseCssResultSourceMap::new_lightningcss), - )) + let targets = if handle_nesting { + Targets { + include: Features::Nesting, + ..Default::default() } - StyleSheetLike::Swc { - stylesheet, - css_modules, - } => { - let mut stylesheet = stylesheet.clone(); - // We always analyze dependencies, but remove them only if remove_imports is - // true - let mut deps = vec![]; - stylesheet.visit_mut_with(&mut SwcDepCollector { - deps: &mut deps, - remove_imports, - }); - - // lightningcss specifies css module mode in the parser options. - let mut css_module_exports = None; - if let Some(SwcCssModuleMode { - basename, - path_hash, - }) = css_modules - { - let output = swc_core::css::modules::compile( - &mut stylesheet, - ModuleTransformConfig { - suffix: format!("__{}__{:x}", basename, path_hash), - }, - ); - - let mut map = CssModuleExports::default(); - - for (class_name, export_class_names) in output.renamed { - for export_class_name in export_class_names { - // If the class name is already in the map, the first - // one is the reference to itself and the current one is - // the reference to the other class. - match export_class_name { - CssClassName::Local { name } => { - map.entry(class_name.to_string()) - .and_modify(|e| { - e.composes.push(CssModuleReference::Local { - name: name.value.to_string(), - }) - }) - .or_insert_with(|| CssModuleExport { - name: name.value.to_string(), - composes: Vec::new(), - is_referenced: true, - }); - } - CssClassName::Global { name } => { - map.entry(class_name.to_string()) - .and_modify(|e| { - e.composes.push(CssModuleReference::Global { - name: name.value.to_string(), - }) - }) - .or_insert_with(|| CssModuleExport { - name: name.value.to_string(), - composes: Vec::new(), - is_referenced: true, - }); - } - CssClassName::Import { name, from } => { - let e = - map.entry(class_name.to_string()).or_insert_with(|| { - CssModuleExport { - name: name.value.to_string(), - composes: Vec::new(), - is_referenced: true, - } - }); - - e.composes.push(CssModuleReference::Dependency { - name: name.value.to_string(), - specifier: from.to_string(), - }); - } - } - } - } - - css_module_exports = Some(map); - } - - if handle_nesting { - stylesheet.visit_mut_with(&mut swc_core::css::compat::compiler::Compiler::new( - swc_core::css::compat::compiler::Config { - process: swc_core::css::compat::feature::Features::NESTING, - }, - )); - } - - use swc_core::css::codegen::Emit; - - let mut code_string = String::new(); - let mut srcmap = if enable_srcmap { Some(vec![]) } else { None }; - - let mut code_gen = CodeGenerator::new( - BasicCssWriter::new( - &mut code_string, - srcmap.as_mut(), - if matches!(minify_type, MinifyType::Minify) { - BasicCssWriterConfig { - indent_width: 0, - ..Default::default() - } - } else { - Default::default() - }, - ), - swc_core::css::codegen::CodegenConfig { - minify: matches!(minify_type, MinifyType::Minify), - }, - ); + } else { + Default::default() + }; - code_gen.emit(&stylesheet)?; + let result = ss.to_css(PrinterOptions { + minify: matches!(minify_type, MinifyType::Minify), + source_map: srcmap.as_mut(), + targets, + analyze_dependencies: None, + ..Default::default() + })?; - let srcmap = - srcmap.map(|srcmap| ParseCssResultSourceMap::new_swc(cm.clone(), srcmap)); + if let Some(srcmap) = &mut srcmap { + debug_assert_eq!(ss.sources.len(), 1); - Ok(( - ToCssResult { - code: code_string, - dependencies: Some(deps), - exports: css_module_exports, - references: None, - }, - srcmap, - )) - } + srcmap.add_sources(ss.sources.clone()); + srcmap.set_source_content(0, code)?; } + + Ok(( + result, + srcmap.map(ParseCssResultSourceMap::new_lightningcss), + )) } } @@ -295,9 +117,6 @@ pub struct UnresolvedUrlReferences(pub Vec<(String, Vc)>); #[turbo_tasks::value(shared, serialization = "none", eq = "manual", cell = "new")] pub enum ParseCssResult { Ok { - #[turbo_tasks(debug_ignore, trace_ignore)] - cm: Arc, - code: Vc, #[turbo_tasks(trace_ignore)] @@ -319,9 +138,6 @@ pub enum CssWithPlaceholderResult { Ok { parse_result: Vc, - #[turbo_tasks(debug_ignore, trace_ignore)] - cm: Arc, - references: Vc, url_references: Vc, @@ -365,7 +181,6 @@ pub async fn process_css_with_placeholder( match &*result { ParseCssResult::Ok { - cm, stylesheet, references, url_references, @@ -378,8 +193,7 @@ pub async fn process_css_with_placeholder( _ => bail!("this case should be filtered out while parsing"), }; - let (result, _) = - stylesheet.to_css(cm.clone(), &code, MinifyType::NoMinify, false, false, false)?; + let (result, _) = stylesheet.to_css(&code, MinifyType::NoMinify, false, false)?; let exports = result.exports.map(|exports| { let mut exports = exports.into_iter().collect::>(); @@ -391,7 +205,6 @@ pub async fn process_css_with_placeholder( Ok(CssWithPlaceholderResult::Ok { parse_result, - cm: cm.clone(), exports, references: *references, url_references: *url_references, @@ -413,7 +226,6 @@ pub async fn finalize_css( let result = result.await?; match &*result { CssWithPlaceholderResult::Ok { - cm, parse_result, url_references, .. @@ -447,8 +259,7 @@ pub async fn finalize_css( FileContent::Content(v) => v.content().to_str()?, _ => bail!("this case should be filtered out while parsing"), }; - let (result, srcmap) = - stylesheet.to_css(cm.clone(), &code, minify_type, true, true, true)?; + let (result, srcmap) = stylesheet.to_css(&code, minify_type, true, true)?; Ok(FinalCssResult::Ok { output_code: result.code, @@ -484,7 +295,6 @@ pub async fn parse_css( origin: Vc>, import_context: Vc, ty: CssModuleAssetType, - use_swc_css: bool, ) -> Result> { let span = { let name = source.ident().to_string().await?.to_string(); @@ -510,7 +320,6 @@ pub async fn parse_css( origin, import_context, ty, - use_swc_css, ) .await? } @@ -531,7 +340,6 @@ async fn process_content( origin: Vc>, import_context: Vc, ty: CssModuleAssetType, - use_swc_css: bool, ) -> Result> { #[allow(clippy::needless_lifetimes)] fn without_warnings<'o, 'i>(config: ParserOptions<'o, 'i>) -> ParserOptions<'o, 'static> { @@ -569,154 +377,77 @@ async fn process_content( ..Default::default() }; - let cm: Arc = Default::default(); - - let stylesheet = if !use_swc_css { - StyleSheetLike::LightningCss({ - let warnings: Arc> = Default::default(); + let stylesheet = StyleSheetLike({ + let warnings: Arc> = Default::default(); - match StyleSheet::parse( - &code, - ParserOptions { - warnings: Some(warnings.clone()), - ..config.clone() - }, - ) { - Ok(mut ss) => { - if matches!(ty, CssModuleAssetType::Module) { - let mut validator = CssValidator { errors: Vec::new() }; - ss.visit(&mut validator).unwrap(); - - for err in validator.errors { - err.report(source, fs_path_vc); - } + match StyleSheet::parse( + &code, + ParserOptions { + warnings: Some(warnings.clone()), + ..config.clone() + }, + ) { + Ok(mut ss) => { + if matches!(ty, CssModuleAssetType::Module) { + let mut validator = CssValidator { errors: Vec::new() }; + ss.visit(&mut validator).unwrap(); + + for err in validator.errors { + err.report(fs_path_vc); } + } - for err in warnings.read().unwrap().iter() { - match err.kind { - lightningcss::error::ParserError::UnexpectedToken(_) - | lightningcss::error::ParserError::UnexpectedImportRule - | lightningcss::error::ParserError::SelectorError(..) - | lightningcss::error::ParserError::EndOfInput => { - let source = err.loc.as_ref().map(|loc| { - let pos = SourcePos { - line: loc.line as _, - column: loc.column as _, - }; - IssueSource::from_line_col(source, pos, pos) - }); - - ParsingIssue { - file: fs_path_vc, - msg: Vc::cell(err.to_string().into()), - source, - } - .cell() - .emit(); - return Ok(ParseCssResult::Unparseable.cell()); - } - - _ => { - // Ignore + for err in warnings.read().unwrap().iter() { + match err.kind { + lightningcss::error::ParserError::UnexpectedToken(_) + | lightningcss::error::ParserError::UnexpectedImportRule + | lightningcss::error::ParserError::SelectorError(..) + | lightningcss::error::ParserError::EndOfInput => { + let source = err.loc.as_ref().map(|loc| { + let pos = SourcePos { + line: loc.line as _, + column: loc.column as _, + }; + IssueSource::from_line_col(source, pos, pos) + }); + + ParsingIssue { + file: fs_path_vc, + msg: Vc::cell(err.to_string().into()), + source, } + .cell() + .emit(); + return Ok(ParseCssResult::Unparseable.cell()); } - } - stylesheet_into_static(&ss, without_warnings(config.clone())) - } - Err(e) => { - let source = e.loc.as_ref().map(|loc| { - let pos = SourcePos { - line: loc.line as _, - column: loc.column as _, - }; - IssueSource::from_line_col(source, pos, pos) - }); - ParsingIssue { - file: fs_path_vc, - msg: Vc::cell(e.to_string().into()), - source, + _ => { + // Ignore + } } - .cell() - .emit(); - return Ok(ParseCssResult::Unparseable.cell()); } - } - }) - } else { - let fs_path = &*fs_path_vc.await?; - - let handler = swc_core::common::errors::Handler::with_emitter( - true, - false, - Box::new(IssueEmitter::new( - source, - cm.clone(), - Some("Parsing css source code failed".into()), - )), - ); - - let fm = cm.new_source_file(FileName::Custom(filename.to_string()).into(), code.clone()); - let mut errors = vec![]; - let ss = swc_core::css::parser::parse_file( - &fm, - Default::default(), - swc_core::css::parser::parser::ParserConfig { - css_modules: true, - legacy_ie: true, - legacy_nesting: true, - ..Default::default() - }, - &mut errors, - ); - - for err in errors { - err.to_diagnostics(&handler).emit(); - } - - let ss: swc_core::css::ast::Stylesheet = match ss { - Ok(v) => v, - Err(err) => { - err.to_diagnostics(&handler).emit(); - return Ok(ParseCssResult::Unparseable.cell()); + stylesheet_into_static(&ss, without_warnings(config.clone())) } - }; - - if handler.has_errors() { - return Ok(ParseCssResult::Unparseable.cell()); - } - - if matches!(ty, CssModuleAssetType::Module) { - let mut validator = CssValidator { errors: vec![] }; - ss.visit_with(&mut validator); - - for err in validator.errors { - err.report(source, fs_path_vc); + Err(e) => { + let source = e.loc.as_ref().map(|loc| { + let pos = SourcePos { + line: loc.line as _, + column: loc.column as _, + }; + IssueSource::from_line_col(source, pos, pos) + }); + ParsingIssue { + file: fs_path_vc, + msg: Vc::cell(e.to_string().into()), + source, + } + .cell() + .emit(); + return Ok(ParseCssResult::Unparseable.cell()); } } - - StyleSheetLike::Swc { - stylesheet: ss, - css_modules: if matches!(ty, CssModuleAssetType::Module) { - let basename = BASENAME_RE - .captures(fs_path.file_name()) - .context("Must include basename preceding .")? - .get(0) - .context("Must include basename preceding .")? - .as_str(); - // Truncate this as u32 so it's formatted as 8-character hex in the suffix below - let path_hash = turbo_tasks_hash::hash_xxh3_hash64(filename) as u32; - - Some(SwcCssModuleMode { - basename: basename.to_string(), - path_hash, - }) - } else { - None - }, - } - }; + }); let config = without_warnings(config); let mut stylesheet = stylesheet.to_static(config.clone()); @@ -725,7 +456,6 @@ async fn process_content( analyze_references(&mut stylesheet, source, origin, import_context)?; Ok(ParseCssResult::Ok { - cm, code: content_vc, stylesheet, references: Vc::cell(references), @@ -749,26 +479,12 @@ struct CssValidator { #[derive(Debug, PartialEq, Eq)] enum CssError { - SwcSelectorInModuleNotPure { span: Span }, LightningCssSelectorInModuleNotPure { selector: String }, } impl CssError { - fn report(self, source: Vc>, file: Vc) { + fn report(self, file: Vc) { match self { - CssError::SwcSelectorInModuleNotPure { span } => { - ParsingIssue { - file, - msg: Vc::cell(CSS_MODULE_ERROR.into()), - source: Some(IssueSource::from_swc_offsets( - source, - span.lo.0 as _, - span.hi.0 as _, - )), - } - .cell() - .emit(); - } CssError::LightningCssSelectorInModuleNotPure { selector } => { ParsingIssue { file, @@ -785,110 +501,6 @@ impl CssError { const CSS_MODULE_ERROR: &str = "Selector is not pure (pure selectors must contain at least one local class or id)"; -/// We only visit top-level selectors. -impl swc_core::css::visit::Visit for CssValidator { - fn visit_complex_selector(&mut self, n: &ComplexSelector) { - fn is_complex_not_pure(sel: &ComplexSelector) -> bool { - sel.children.iter().all(|sel| match sel { - ComplexSelectorChildren::CompoundSelector(sel) => is_compound_not_pure(sel), - ComplexSelectorChildren::Combinator(_) => true, - }) - } - - fn is_forgiving_selector_not_pure(sel: &ForgivingComplexSelector) -> bool { - match sel { - ForgivingComplexSelector::ComplexSelector(sel) => is_complex_not_pure(sel), - ForgivingComplexSelector::ListOfComponentValues(_) => false, - } - } - - fn is_forgiving_relative_selector_not_pure(sel: &ForgivingRelativeSelector) -> bool { - match sel { - ForgivingRelativeSelector::RelativeSelector(sel) => { - is_relative_selector_not_pure(sel) - } - ForgivingRelativeSelector::ListOfComponentValues(_) => false, - } - } - - fn is_relative_selector_not_pure(sel: &RelativeSelector) -> bool { - is_complex_not_pure(&sel.selector) - } - - fn is_compound_not_pure(sel: &CompoundSelector) -> bool { - sel.subclass_selectors.iter().all(|sel| match sel { - SubclassSelector::Attribute { .. } => true, - SubclassSelector::PseudoClass(cls) => { - cls.name.value == "not" - || cls.name.value == "has" - || if let Some(c) = &cls.children { - c.iter().all(|c| match c { - PseudoClassSelectorChildren::ComplexSelector(sel) => { - is_complex_not_pure(sel) - } - - PseudoClassSelectorChildren::CompoundSelector(sel) => { - is_compound_not_pure(sel) - } - - PseudoClassSelectorChildren::SelectorList(sels) => { - sels.children.iter().all(is_complex_not_pure) - } - PseudoClassSelectorChildren::ForgivingSelectorList(sels) => { - sels.children.iter().all(is_forgiving_selector_not_pure) - } - PseudoClassSelectorChildren::CompoundSelectorList(sels) => { - sels.children.iter().all(is_compound_not_pure) - } - PseudoClassSelectorChildren::RelativeSelectorList(sels) => { - sels.children.iter().all(is_relative_selector_not_pure) - } - PseudoClassSelectorChildren::ForgivingRelativeSelectorList( - sels, - ) => sels - .children - .iter() - .all(is_forgiving_relative_selector_not_pure), - - PseudoClassSelectorChildren::Ident(_) - | PseudoClassSelectorChildren::Str(_) - | PseudoClassSelectorChildren::Delimiter(_) - | PseudoClassSelectorChildren::PreservedToken(_) - | PseudoClassSelectorChildren::AnPlusB(_) => false, - }) - } else { - true - } - } - SubclassSelector::PseudoElement(el) => match &el.children { - Some(c) => c.iter().all(|c| match c { - PseudoElementSelectorChildren::CompoundSelector(sel) => { - is_compound_not_pure(sel) - } - - _ => false, - }), - None => true, - }, - _ => false, - }) && match &sel.type_selector.as_deref() { - Some(TypeSelector::TagName(tag)) => { - !matches!(&*tag.name.value.value, "html" | "body") - } - Some(TypeSelector::Universal(..)) => true, - None => true, - } - } - - if is_complex_not_pure(n) { - self.errors - .push(CssError::SwcSelectorInModuleNotPure { span: n.span }); - } - } - - fn visit_simple_block(&mut self, _: &swc_core::css::ast::SimpleBlock) {} -} - /// We only visit top-level selectors. impl lightningcss::visitor::Visitor<'_> for CssValidator { type Error = (); @@ -1030,67 +642,6 @@ impl GenerateSourceMap for ParseCssResultSourceMap { } } -struct SwcDepCollector<'a> { - deps: &'a mut Vec, - remove_imports: bool, -} - -impl VisitMut for SwcDepCollector<'_> { - fn visit_mut_rules(&mut self, n: &mut Vec) { - n.visit_mut_children_with(self); - - if self.remove_imports { - n.retain(|v| match v { - swc_core::css::ast::Rule::AtRule(v) => match &v.name { - swc_core::css::ast::AtRuleName::DashedIdent(_) => true, - swc_core::css::ast::AtRuleName::Ident(name) => name.value != "import", - }, - _ => true, - }); - } - } - - fn visit_mut_at_rule_prelude(&mut self, node: &mut swc_core::css::ast::AtRulePrelude) { - match node { - swc_core::css::ast::AtRulePrelude::ImportPrelude(i) => { - let src = match &*i.href { - swc_core::css::ast::ImportHref::Url(v) => match v.value.as_deref().unwrap() { - UrlValue::Str(v) => v.value.clone(), - UrlValue::Raw(v) => v.value.clone(), - }, - swc_core::css::ast::ImportHref::Str(v) => v.value.clone(), - }; - - self.deps.push(Dependency::Import(ImportDependency { - url: src.to_string(), - placeholder: Default::default(), - supports: None, - media: None, - loc: SourceRange { - file_path: String::new(), - start: Location { line: 0, column: 0 }, - end: Location { line: 0, column: 0 }, - }, - })); - } - - _ => { - node.visit_mut_children_with(self); - } - } - } -} - -struct ModuleTransformConfig { - suffix: String, -} - -impl TransformConfig for ModuleTransformConfig { - fn new_name_for(&self, local: &Atom) -> Atom { - format!("{}{}", *local, self.suffix).into() - } -} - #[turbo_tasks::value] struct ParsingIssue { msg: Vc, @@ -1135,10 +686,6 @@ mod tests { stylesheet::{ParserOptions, StyleSheet}, visitor::Visit, }; - use swc_core::{ - common::{FileName, FilePathMapping}, - css::{ast::Stylesheet, parser::parser::ParserConfig, visit::VisitWith}, - }; use super::{CssError, CssValidator}; @@ -1163,41 +710,14 @@ mod tests { validator.errors } - fn lint_swc(code: &str) -> Vec { - let cm = swc_core::common::SourceMap::new(FilePathMapping::empty()); - - let fm = cm.new_source_file( - FileName::Custom("test.css".to_string()).into(), - code.to_string(), - ); - - let ss: Stylesheet = swc_core::css::parser::parse_file( - &fm, - None, - ParserConfig { - css_modules: true, - ..Default::default() - }, - &mut vec![], - ) - .unwrap(); - - let mut validator = CssValidator { errors: Vec::new() }; - ss.visit_with(&mut validator); - - validator.errors - } - #[track_caller] fn assert_lint_success(code: &str) { assert_eq!(lint_lightningcss(code), vec![], "lightningcss: {code}"); - assert_eq!(lint_swc(code), vec![], "swc: {code}"); } #[track_caller] fn assert_lint_failure(code: &str) { assert_ne!(lint_lightningcss(code), vec![], "lightningcss: {code}"); - assert_ne!(lint_swc(code), vec![], "swc: {code}"); } #[test] diff --git a/turbopack/crates/turbopack-css/src/references/import.rs b/turbopack/crates/turbopack-css/src/references/import.rs index 8154a145af8a8..d247f6968a891 100644 --- a/turbopack/crates/turbopack-css/src/references/import.rs +++ b/turbopack/crates/turbopack-css/src/references/import.rs @@ -4,13 +4,6 @@ use lightningcss::{ rules::{import::ImportRule, layer::LayerName, supports::SupportsCondition}, traits::ToCss, }; -use swc_core::{ - common::{Spanned, DUMMY_SP}, - css::codegen::{ - writer::basic::{BasicCssWriter, BasicCssWriterConfig}, - CodeGenerator, CodegenConfig, Emit, - }, -}; use turbo_tasks::{RcStr, Value, ValueToString, Vc}; use turbopack_core::{ chunk::{ChunkableModuleReference, ChunkingContext}, @@ -36,14 +29,6 @@ pub enum ImportAttributes { #[turbo_tasks(trace_ignore)] media: MediaList<'static>, }, - Swc { - #[turbo_tasks(trace_ignore)] - layer_name: Option, - #[turbo_tasks(trace_ignore)] - supports: Option, - #[turbo_tasks(trace_ignore)] - media: Option>, - }, } impl PartialEq for ImportAttributes { @@ -67,80 +52,6 @@ impl ImportAttributes { } } - pub fn new_from_swc(prelude: &swc_core::css::ast::ImportPrelude) -> Self { - let layer_name = prelude.layer_name.as_ref().map(|l| match l { - box swc_core::css::ast::ImportLayerName::Ident(_) => swc_core::css::ast::LayerName { - span: DUMMY_SP, - name: vec![], - }, - box swc_core::css::ast::ImportLayerName::Function(f) => { - assert_eq!(f.value.len(), 1); - assert!(matches!( - &f.value[0], - swc_core::css::ast::ComponentValue::LayerName(_) - )); - if let swc_core::css::ast::ComponentValue::LayerName(layer_name) = &f.value[0] { - *layer_name.clone() - } else { - unreachable!() - } - } - }); - - let (supports, media) = prelude - .import_conditions - .as_ref() - .map(|c| { - let supports = if let Some(supports) = &c.supports { - let v = supports.value.iter().find(|v| { - matches!( - v, - swc_core::css::ast::ComponentValue::SupportsCondition(..) - | swc_core::css::ast::ComponentValue::Declaration(..) - ) - }); - - if let Some(supports) = v { - match &supports { - swc_core::css::ast::ComponentValue::SupportsCondition(s) => { - Some(*s.clone()) - } - swc_core::css::ast::ComponentValue::Declaration(d) => { - Some(swc_core::css::ast::SupportsCondition { - span: DUMMY_SP, - conditions: vec![ - swc_core::css::ast::SupportsConditionType::SupportsInParens( - swc_core::css::ast::SupportsInParens::Feature( - swc_core::css::ast::SupportsFeature::Declaration( - d.clone(), - ), - ), - ), - ], - }) - } - _ => None, - } - } else { - None - } - } else { - None - }; - - let media = c.media.as_ref().map(|m| m.queries.clone()); - - (supports, media) - }) - .unwrap_or_else(|| (None, None)); - - Self::Swc { - layer_name, - supports, - media, - } - } - fn as_reference_import_attributes(&self) -> turbopack_core::reference_type::ImportAttributes { match self { ImportAttributes::LightningCss { @@ -164,36 +75,10 @@ impl ImportAttributes { } }, }, - ImportAttributes::Swc { - layer_name, - supports, - media, - } => turbopack_core::reference_type::ImportAttributes { - layer: layer_name.as_ref().map(gen_swc_node).map(From::from), - supports: supports.as_ref().map(gen_swc_node).map(From::from), - media: media - .as_ref() - .map(|queries| queries.iter().map(gen_swc_node).collect::().into()), - }, } } } -fn gen_swc_node(node: N) -> String -where - N: Spanned, - for<'a> CodeGenerator>: Emit, -{ - let mut code = String::new(); - { - let wr = BasicCssWriter::new(&mut code, None, BasicCssWriterConfig::default()); - let mut gen = CodeGenerator::new(wr, CodegenConfig { minify: true }); - - gen.emit(&node).unwrap(); - } - code -} - #[turbo_tasks::value] #[derive(Hash, Debug)] pub struct ImportAssetReference { diff --git a/turbopack/crates/turbopack-css/src/references/mod.rs b/turbopack/crates/turbopack-css/src/references/mod.rs index 680b0d7bc23ab..645675e902489 100644 --- a/turbopack/crates/turbopack-css/src/references/mod.rs +++ b/turbopack/crates/turbopack-css/src/references/mod.rs @@ -7,10 +7,6 @@ use lightningcss::{ values::url::Url, visitor::{Visit, Visitor}, }; -use swc_core::css::{ - ast::UrlValue, - visit::{VisitMut, VisitMutWith}, -}; use turbo_tasks::{RcStr, Value, Vc}; use turbopack_core::{ issue::IssueSource, @@ -51,14 +47,7 @@ pub fn analyze_references( let mut visitor = ModuleReferencesVisitor::new(source, origin, import_context, &mut references, &mut urls); - match stylesheet { - StyleSheetLike::LightningCss(ss) => { - ss.visit(&mut visitor).unwrap(); - } - StyleSheetLike::Swc { stylesheet, .. } => { - stylesheet.visit_mut_with(&mut visitor); - } - } + stylesheet.0.visit(&mut visitor).unwrap(); Ok((references, urls)) } @@ -89,68 +78,6 @@ impl<'a> ModuleReferencesVisitor<'a> { } } -impl VisitMut for ModuleReferencesVisitor<'_> { - fn visit_mut_import_prelude(&mut self, i: &mut swc_core::css::ast::ImportPrelude) { - let src = match &*i.href { - swc_core::css::ast::ImportHref::Url(v) => match v.value.as_deref().unwrap() { - UrlValue::Str(v) => v.value.clone(), - UrlValue::Raw(v) => v.value.clone(), - }, - swc_core::css::ast::ImportHref::Str(v) => v.value.clone(), - }; - - let issue_span = i.span; - - self.references.push(Vc::upcast(ImportAssetReference::new( - self.origin, - Request::parse(Value::new(RcStr::from(src.as_str()).into())), - ImportAttributes::new_from_swc(&i.clone()).into(), - self.import_context, - IssueSource::from_swc_offsets( - Vc::upcast(self.source), - issue_span.lo.0 as _, - issue_span.hi.0 as _, - ), - ))); - - // let res = i.visit_children(self); - // res - } - - /// Noop. Urls in `@supports` are not used. - /// - /// See https://github.com/vercel/next.js/issues/63102 - fn visit_mut_supports_condition(&mut self, _: &mut swc_core::css::ast::SupportsCondition) {} - - fn visit_mut_url(&mut self, u: &mut swc_core::css::ast::Url) { - u.visit_mut_children_with(self); - - let src = match u.value.as_deref().unwrap() { - UrlValue::Str(v) => v.value.clone(), - UrlValue::Raw(v) => v.value.clone(), - }; - - // ignore internal urls like `url(#noiseFilter)` - // ignore server-relative urls like `url(/foo)` - if !matches!(src.bytes().next(), Some(b'#') | Some(b'/')) { - let issue_span = u.span; - - let vc = UrlAssetReference::new( - self.origin, - Request::parse(Value::new(RcStr::from(src.as_str()).into())), - IssueSource::from_swc_offsets( - Vc::upcast(self.source), - issue_span.lo.0 as _, - issue_span.hi.0 as _, - ), - ); - - self.references.push(Vc::upcast(vc)); - self.urls.push((src.to_string(), vc)); - } - } -} - impl Visitor<'_> for ModuleReferencesVisitor<'_> { type Error = Infallible; diff --git a/turbopack/crates/turbopack-css/src/references/url.rs b/turbopack/crates/turbopack-css/src/references/url.rs index 207a87a5f8d7a..e2a3a2fb6e57a 100644 --- a/turbopack/crates/turbopack-css/src/references/url.rs +++ b/turbopack/crates/turbopack-css/src/references/url.rs @@ -6,10 +6,6 @@ use lightningcss::{ visit_types, visitor::{Visit, Visitor}, }; -use swc_core::css::{ - ast::UrlValue, - visit::{VisitMut, VisitMutWith}, -}; use turbo_tasks::{debug::ValueDebug, RcStr, ResolvedVc, Value, ValueToString, Vc}; use turbopack_core::{ chunk::{ @@ -150,41 +146,13 @@ pub fn replace_url_references( urls: &HashMap, ) { let mut replacer = AssetReferenceReplacer { urls }; - match ss { - StyleSheetLike::LightningCss(ss) => { - ss.visit(&mut replacer).unwrap(); - } - StyleSheetLike::Swc { stylesheet, .. } => { - stylesheet.visit_mut_with(&mut replacer); - } - } + ss.0.visit(&mut replacer).unwrap(); } struct AssetReferenceReplacer<'a> { urls: &'a HashMap, } -impl VisitMut for AssetReferenceReplacer<'_> { - fn visit_mut_url_value(&mut self, u: &mut UrlValue) { - u.visit_mut_children_with(self); - - match u { - UrlValue::Str(v) => { - if let Some(new) = self.urls.get(&*v.value) { - v.value = (&**new).into(); - v.raw = None; - } - } - UrlValue::Raw(v) => { - if let Some(new) = self.urls.get(&*v.value) { - v.value = (&**new).into(); - v.raw = None; - } - } - } - } -} - impl Visitor<'_> for AssetReferenceReplacer<'_> { type Error = Infallible; diff --git a/turbopack/crates/turbopack-ecmascript-plugins/src/transform/styled_jsx.rs b/turbopack/crates/turbopack-ecmascript-plugins/src/transform/styled_jsx.rs index 254b841ba4567..218d2dd9ed0ab 100644 --- a/turbopack/crates/turbopack-ecmascript-plugins/src/transform/styled_jsx.rs +++ b/turbopack/crates/turbopack-ecmascript-plugins/src/transform/styled_jsx.rs @@ -1,14 +1,10 @@ -use anyhow::{bail, Result}; +use anyhow::Result; use async_trait::async_trait; -use lightningcss::{ - stylesheet::{PrinterOptions, StyleSheet}, - targets::{Browsers, Targets}, -}; use swc_core::{ common::{util::take::Take, FileName}, ecma::{ ast::{Module, Program}, - preset_env::{Version, Versions}, + preset_env::Versions, visit::FoldWith, }, }; @@ -16,16 +12,12 @@ use turbopack_ecmascript::{CustomTransformer, TransformContext}; #[derive(Debug)] pub struct StyledJsxTransformer { - use_lightningcss: bool, target_browsers: Versions, } impl StyledJsxTransformer { - pub fn new(use_lightningcss: bool, target_browsers: Versions) -> Self { - Self { - use_lightningcss, - target_browsers, - } + pub fn new(target_browsers: Versions) -> Self { + Self { target_browsers } } } @@ -39,60 +31,12 @@ impl CustomTransformer for StyledJsxTransformer { // styled_jsx don't really use that in a relevant way FileName::Anon, styled_jsx::visitor::Config { - use_lightningcss: self.use_lightningcss, + use_lightningcss: true, browsers: self.target_browsers, }, - styled_jsx::visitor::NativeConfig { - process_css: if self.use_lightningcss || self.target_browsers.is_any_target() { - None - } else { - let targets = Targets { - browsers: Some(convert_browsers(&self.target_browsers)), - ..Default::default() - }; - - Some(Box::new(move |css| { - let ss = StyleSheet::parse(css, Default::default()); - - let ss = match ss { - Ok(v) => v, - Err(err) => { - bail!("failed to parse css using lightningcss: {}", err) - } - }; - - let output = ss.to_css(PrinterOptions { - minify: true, - source_map: None, - project_root: None, - targets, - analyze_dependencies: None, - pseudo_classes: None, - })?; - Ok(output.code) - })) - }, - }, + styled_jsx::visitor::NativeConfig { process_css: None }, )); Ok(()) } } - -fn convert_browsers(browsers: &Versions) -> Browsers { - fn convert(v: Option) -> Option { - v.map(|v| v.major << 16 | v.minor << 8 | v.patch) - } - - Browsers { - android: convert(browsers.android), - chrome: convert(browsers.chrome), - edge: convert(browsers.edge), - firefox: convert(browsers.firefox), - ie: convert(browsers.ie), - ios_saf: convert(browsers.ios), - opera: convert(browsers.opera), - safari: convert(browsers.safari), - samsung: convert(browsers.samsung), - } -} diff --git a/turbopack/crates/turbopack-tests/tests/snapshot.rs b/turbopack/crates/turbopack-tests/tests/snapshot.rs index 893072a17871d..c3070a976f6fa 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot.rs +++ b/turbopack/crates/turbopack-tests/tests/snapshot.rs @@ -93,8 +93,6 @@ struct SnapshotOptions { #[serde(default)] environment: SnapshotEnvironment, #[serde(default)] - use_swc_css: bool, - #[serde(default)] tree_shaking_mode: Option, } @@ -121,7 +119,6 @@ impl Default for SnapshotOptions { runtime: Default::default(), runtime_type: default_runtime_type(), environment: Default::default(), - use_swc_css: Default::default(), tree_shaking_mode: Default::default(), } } @@ -276,7 +273,6 @@ async fn run_test(resource: RcStr) -> Result> { ..Default::default() }, css: CssOptionsContext { - use_swc_css: options.use_swc_css, ..Default::default() }, preset_env_versions: Some(env.to_resolved().await?), @@ -284,7 +280,6 @@ async fn run_test(resource: RcStr) -> Result> { ContextCondition::InDirectory("node_modules".into()), ModuleOptionsContext { css: CssOptionsContext { - use_swc_css: options.use_swc_css, ..Default::default() }, ..Default::default() diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/options.json b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/options.json deleted file mode 100644 index ef4bb46ab0e56..0000000000000 --- a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "useSwcCss": true -} diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_6e69b0.js b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_6e69b0.js deleted file mode 100644 index ed1b44cb7b3bd..0000000000000 --- a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_6e69b0.js +++ /dev/null @@ -1,6 +0,0 @@ -(globalThis.TURBOPACK = globalThis.TURBOPACK || []).push([ - "output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_6e69b0.js", - {}, - {"otherChunks":[{"path":"output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_0d54ef.css","included":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/input/style.css [test] (swc css)"],"moduleChunks":["output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_4b6496.css"]},"output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_160b9e.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/input/index.js [test] (ecmascript)"]} -]); -// Dummy runtime \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_81ab1c.js b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_81ab1c.js new file mode 100644 index 0000000000000..41e2a91d68d0e --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_81ab1c.js @@ -0,0 +1,6 @@ +(globalThis.TURBOPACK = globalThis.TURBOPACK || []).push([ + "output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_81ab1c.js", + {}, + {"otherChunks":[{"path":"output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_ce5c14.css","included":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/input/style.css [test] (css)"],"moduleChunks":["output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_7d7e1c.css"]},"output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_160b9e.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/input/index.js [test] (ecmascript)"]} +]); +// Dummy runtime \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_6e69b0.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_81ab1c.js.map similarity index 100% rename from turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_6e69b0.js.map rename to turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_index_81ab1c.js.map diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_0d54ef.css b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_0d54ef.css deleted file mode 100644 index 2cf8dadc6d982..0000000000000 --- a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_0d54ef.css +++ /dev/null @@ -1,4 +0,0 @@ -/* [project]/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/input/style.css [test] (swc css) */ -@supports((-webkit-mask:url(""))or (mask:url(""))){.supports-url-in-query{color:red}} - -/*# sourceMappingURL=b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_0d54ef.css.map*/ \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_4b6496.css b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_4b6496.css deleted file mode 100644 index 1d8c8d0466ad3..0000000000000 --- a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_4b6496.css +++ /dev/null @@ -1,3 +0,0 @@ -/* [project]/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/input/style.css [test] (swc css) */ -@supports((-webkit-mask:url(""))or (mask:url(""))){.supports-url-in-query{color:red}} -/*# sourceMappingURL=b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_4b6496.css.map*/ \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_7d7e1c.css b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_7d7e1c.css new file mode 100644 index 0000000000000..59317d36fea02 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_7d7e1c.css @@ -0,0 +1,3 @@ +/* [project]/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/input/style.css [test] (css) */ +@supports ((-webkit-mask:url("")) or (mask:url(""))){.supports-url-in-query{color:red}} +/*# sourceMappingURL=b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_7d7e1c.css.map*/ \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_4b6496.css.map b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_7d7e1c.css.map similarity index 57% rename from turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_4b6496.css.map rename to turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_7d7e1c.css.map index bb3f95045b9f5..cc608f659b480 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_4b6496.css.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_7d7e1c.css.map @@ -2,6 +2,6 @@ "version": 3, "sources": [], "sections": [ - {"offset": {"line": 1, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/input/style.css"],"sourcesContent":["@supports ((-webkit-mask: url(\"\")) or (mask: url(\"\"))) {\n .supports-url-in-query {\n color: red;\n }\n}\n"],"names":[],"mappings":"AAAA,CAAC,QAAQ,AAAE,CAAC,CAAC,AAAD,YAAY,CAAE,GAAG,CAAC,EAAE,CAAA,CAAC,GAAM,CAAC,AAAD,IAAI,CAAE,GAAG,CAAC,EAAE,CAAA,CAAC,CAAC,AAAE,CAAC,AACtD,CAAC,qBAAqB,AAAC,CAAC,AACtB,KAAK,CAAE,GAAG,AACZ,CAAC,AACH,CAAC"}}, - {"offset": {"line": 1, "column": 85}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 1, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/input/style.css"],"sourcesContent":["@supports ((-webkit-mask: url(\"\")) or (mask: url(\"\"))) {\n .supports-url-in-query {\n color: red;\n }\n}\n"],"names":[],"mappings":"AAAA,qDACE"}}, + {"offset": {"line": 1, "column": 87}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_ce5c14.css b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_ce5c14.css new file mode 100644 index 0000000000000..9cb56eaa96cae --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_ce5c14.css @@ -0,0 +1,4 @@ +/* [project]/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/input/style.css [test] (css) */ +@supports ((-webkit-mask:url("")) or (mask:url(""))){.supports-url-in-query{color:red}} + +/*# sourceMappingURL=b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_ce5c14.css.map*/ \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_0d54ef.css.map b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_ce5c14.css.map similarity index 57% rename from turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_0d54ef.css.map rename to turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_ce5c14.css.map index bb3f95045b9f5..cc608f659b480 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_0d54ef.css.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/output/b1abf_turbopack-tests_tests_snapshot_css_url-in-supports-query_input_style_ce5c14.css.map @@ -2,6 +2,6 @@ "version": 3, "sources": [], "sections": [ - {"offset": {"line": 1, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/input/style.css"],"sourcesContent":["@supports ((-webkit-mask: url(\"\")) or (mask: url(\"\"))) {\n .supports-url-in-query {\n color: red;\n }\n}\n"],"names":[],"mappings":"AAAA,CAAC,QAAQ,AAAE,CAAC,CAAC,AAAD,YAAY,CAAE,GAAG,CAAC,EAAE,CAAA,CAAC,GAAM,CAAC,AAAD,IAAI,CAAE,GAAG,CAAC,EAAE,CAAA,CAAC,CAAC,AAAE,CAAC,AACtD,CAAC,qBAAqB,AAAC,CAAC,AACtB,KAAK,CAAE,GAAG,AACZ,CAAC,AACH,CAAC"}}, - {"offset": {"line": 1, "column": 85}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 1, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/css/url-in-supports-query/input/style.css"],"sourcesContent":["@supports ((-webkit-mask: url(\"\")) or (mask: url(\"\"))) {\n .supports-url-in-query {\n color: red;\n }\n}\n"],"names":[],"mappings":"AAAA,qDACE"}}, + {"offset": {"line": 1, "column": 87}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack/src/lib.rs b/turbopack/crates/turbopack/src/lib.rs index e9a5d97830fba..c5c0d44330e53 100644 --- a/turbopack/crates/turbopack/src/lib.rs +++ b/turbopack/crates/turbopack/src/lib.rs @@ -232,7 +232,7 @@ async fn apply_module_type( .to_resolved() .await?, ), - ModuleType::Css { ty, use_swc_css } => ResolvedVc::upcast( + ModuleType::Css { ty } => ResolvedVc::upcast( CssModuleAsset::new( source, Vc::upcast(module_asset_context), @@ -242,7 +242,6 @@ async fn apply_module_type( .await? .css .minify_type, - *use_swc_css, if let ReferenceType::Css(CssReferenceSubType::AtImport(import)) = reference_type.into_value() { diff --git a/turbopack/crates/turbopack/src/module_options/mod.rs b/turbopack/crates/turbopack/src/module_options/mod.rs index 3c96e8510b89a..ab29f0fc2f4c0 100644 --- a/turbopack/crates/turbopack/src/module_options/mod.rs +++ b/turbopack/crates/turbopack/src/module_options/mod.rs @@ -80,12 +80,7 @@ impl ModuleOptions { }, enable_mdx, enable_mdx_rs, - css: - CssOptionsContext { - enable_raw_css, - use_swc_css, - .. - }, + css: CssOptionsContext { enable_raw_css, .. }, ref enable_postcss_transform, ref enable_webpack_loaders, preset_env_versions, @@ -390,7 +385,6 @@ impl ModuleOptions { )]), vec![ModuleRuleEffect::ModuleType(ModuleType::Css { ty: CssModuleAssetType::Default, - use_swc_css, })], ), ModuleRule::new( @@ -399,7 +393,6 @@ impl ModuleOptions { )]), vec![ModuleRuleEffect::ModuleType(ModuleType::Css { ty: CssModuleAssetType::Module, - use_swc_css, })], ), ]); @@ -466,7 +459,6 @@ impl ModuleOptions { ]), vec![ModuleRuleEffect::ModuleType(ModuleType::Css { ty: CssModuleAssetType::Default, - use_swc_css, })], ), ModuleRule::new( @@ -479,21 +471,18 @@ impl ModuleOptions { ]), vec![ModuleRuleEffect::ModuleType(ModuleType::Css { ty: CssModuleAssetType::Module, - use_swc_css, })], ), ModuleRule::new_internal( RuleCondition::ResourcePathEndsWith(".css".to_string()), vec![ModuleRuleEffect::ModuleType(ModuleType::Css { ty: CssModuleAssetType::Default, - use_swc_css, })], ), ModuleRule::new_internal( RuleCondition::ResourcePathEndsWith(".module.css".to_string()), vec![ModuleRuleEffect::ModuleType(ModuleType::Css { ty: CssModuleAssetType::Module, - use_swc_css, })], ), ]); diff --git a/turbopack/crates/turbopack/src/module_options/module_options_context.rs b/turbopack/crates/turbopack/src/module_options/module_options_context.rs index 9e65577f54b5c..b185780eb5032 100644 --- a/turbopack/crates/turbopack/src/module_options/module_options_context.rs +++ b/turbopack/crates/turbopack/src/module_options/module_options_context.rs @@ -173,7 +173,6 @@ pub struct CssOptionsContext { /// This is useful for node-file-trace, which tries to emit all assets in /// the module graph, but neither asset types can be emitted directly. pub enable_raw_css: bool, - pub use_swc_css: bool, pub minify_type: MinifyType, diff --git a/turbopack/crates/turbopack/src/module_options/module_rule.rs b/turbopack/crates/turbopack/src/module_options/module_rule.rs index 23b93f26a5c5f..6a9e41046949a 100644 --- a/turbopack/crates/turbopack/src/module_options/module_rule.rs +++ b/turbopack/crates/turbopack/src/module_options/module_rule.rs @@ -103,7 +103,6 @@ pub enum ModuleType { CssModule, Css { ty: CssModuleAssetType, - use_swc_css: bool, }, Static, WebAssembly {