@@ -3,7 +3,7 @@ use std::sync::{Arc, RwLock};
33use anyhow:: { Context , Result , bail} ;
44use lightningcss:: {
55 css_modules:: { CssModuleExport , CssModuleExports , Pattern , Segment } ,
6- stylesheet:: { ParserOptions , PrinterOptions , StyleSheet , ToCssResult } ,
6+ stylesheet:: { MinifyOptions , ParserOptions , PrinterOptions , StyleSheet , ToCssResult } ,
77 targets:: { Features , Targets } ,
88 traits:: ToCss ,
99 values:: url:: Url ,
@@ -53,6 +53,29 @@ impl PartialEq for StyleSheetLike<'_, '_> {
5353
5454pub type CssOutput = ( ToCssResult , Option < Rope > ) ;
5555
56+ /// Returns the LightningCSS targets for the given browserslist query.
57+ fn get_lightningcss_browser_targets (
58+ browserslist_query : RcStr ,
59+ handle_nesting : bool ,
60+ ) -> Result < Targets > {
61+ println ! ( "browserslist_query: {:?}" , browserslist_query) ;
62+ let browserslist_browsers =
63+ lightningcss:: targets:: Browsers :: from_browserslist ( browserslist_query. split ( ',' ) ) ?;
64+
65+ Ok ( if handle_nesting {
66+ Targets {
67+ browsers : browserslist_browsers,
68+ include : Features :: Nesting ,
69+ ..Default :: default ( )
70+ }
71+ } else {
72+ Targets {
73+ browsers : browserslist_browsers,
74+ ..Default :: default ( )
75+ }
76+ } )
77+ }
78+
5679impl StyleSheetLike < ' _ , ' _ > {
5780 pub fn to_static (
5881 & self ,
@@ -77,21 +100,7 @@ impl StyleSheetLike<'_, '_> {
77100 None
78101 } ;
79102
80- let browserslist_browsers =
81- lightningcss:: targets:: Browsers :: from_browserslist ( browserslist_query. split ( ',' ) ) ?;
82-
83- let targets = if handle_nesting {
84- Targets {
85- browsers : browserslist_browsers,
86- include : Features :: Nesting ,
87- ..Default :: default ( )
88- }
89- } else {
90- Targets {
91- browsers : browserslist_browsers,
92- ..Default :: default ( )
93- }
94- } ;
103+ let targets = get_lightningcss_browser_targets ( browserslist_query, handle_nesting) ?;
95104
96105 let result = ss. to_css ( PrinterOptions {
97106 minify : matches ! ( minify_type, MinifyType :: Minify { .. } ) ,
@@ -336,6 +345,7 @@ pub async fn parse_css(
336345 origin : ResolvedVc < Box < dyn ResolveOrigin > > ,
337346 import_context : Option < ResolvedVc < ImportContext > > ,
338347 ty : CssModuleAssetType ,
348+ browserslist_query : RcStr ,
339349) -> Result < Vc < ParseCssResult > > {
340350 let span = {
341351 let name = source. ident ( ) . to_string ( ) . await ?. to_string ( ) ;
@@ -361,6 +371,7 @@ pub async fn parse_css(
361371 origin,
362372 import_context,
363373 ty,
374+ browserslist_query,
364375 )
365376 . await ?
366377 }
@@ -381,6 +392,7 @@ async fn process_content(
381392 origin : ResolvedVc < Box < dyn ResolveOrigin > > ,
382393 import_context : Option < ResolvedVc < ImportContext > > ,
383394 ty : CssModuleAssetType ,
395+ browserslist_query : RcStr ,
384396) -> Result < Vc < ParseCssResult > > {
385397 #[ allow( clippy:: needless_lifetimes) ]
386398 fn without_warnings < ' o , ' i > ( config : ParserOptions < ' o , ' i > ) -> ParserOptions < ' o , ' static > {
@@ -475,13 +487,18 @@ async fn process_content(
475487 }
476488 }
477489
490+ let targets = get_lightningcss_browser_targets ( browserslist_query, true ) ?;
491+
478492 // minify() is actually transform, and it performs operations like CSS modules
479493 // handling.
480494 //
481495 //
482496 // See: https://github.com/parcel-bundler/lightningcss/issues/935#issuecomment-2739325537
483- ss. minify ( Default :: default ( ) )
484- . context ( "failed to transform css" ) ?;
497+ ss. minify ( MinifyOptions {
498+ targets,
499+ ..Default :: default ( )
500+ } )
501+ . context ( "failed to transform css" ) ?;
485502
486503 stylesheet_into_static ( & ss, without_warnings ( config. clone ( ) ) )
487504 }
0 commit comments