From fca2410f09f221fe1f5ccc8b3214070146765765 Mon Sep 17 00:00:00 2001 From: Yiffy Dev Date: Sat, 2 Nov 2024 09:15:11 +0500 Subject: [PATCH] fix: apply lightningcss to bundle once again. Seems the right thing to do --- sabry_build/src/buildmagic.rs | 8 ++- sabry_intrnl/src/compiler/mod.rs | 90 ++++++++++++++++++-------------- 2 files changed, 57 insertions(+), 41 deletions(-) diff --git a/sabry_build/src/buildmagic.rs b/sabry_build/src/buildmagic.rs index 8d7bcff..be71ab7 100644 --- a/sabry_build/src/buildmagic.rs +++ b/sabry_build/src/buildmagic.rs @@ -145,10 +145,14 @@ impl SabryBuilder { .append(true) .open(path)?; + // merged bundle CSS does require another lightningcss pass + let mut buffer = String::new(); for (_, code) in &self.state.loaded_css_modules { - write!(file, " {}", self.state.css_prelude)?; - write!(file, " {code}")?; + buffer.push_str(code); } + buffer = self.css_compiler.lightningcss(&buffer)?; + + write!(file, "{buffer}")?; } Ok(()) diff --git a/sabry_intrnl/src/compiler/mod.rs b/sabry_intrnl/src/compiler/mod.rs index 4fcd129..a789585 100644 --- a/sabry_intrnl/src/compiler/mod.rs +++ b/sabry_intrnl/src/compiler/mod.rs @@ -19,6 +19,8 @@ impl CompilerAdapter { Self { config } } + /// Compile given SASS/SCSS into CSS + /// with respect to self.config pub fn compile_module( &self, syntax: OneSyntaxToRuleThemAll, @@ -28,48 +30,58 @@ impl CompilerAdapter { let mut css = grass::from_string(code, &options)?; + css = match self.lightningcss(&css) { + Ok(c) => c, + Err(e) => return Err(e), + }; + + Ok(css) + } + + /// Perform lightningcss transformations on given css + /// with respect to self.config.css.minify on minification + pub fn lightningcss(&self, css: &str) -> Result { + let mut lightsheet = match lightningcss::stylesheet::StyleSheet::parse( + css, + lightningcss::stylesheet::ParserOptions::default(), + ) { + Ok(s) => s, + Err(e) => { + return Err(SabryCompilerError::LightParse { + kind: e.kind.to_string(), + loc: e.loc, + }) + } + }; + + let targets = Targets { + browsers: Some(self.config.lightningcss.targets.clone().into()), + ..Default::default() + }; + + let printer_options = PrinterOptions { + minify: self.config.css.minify, + targets, + ..Default::default() + }; + + let minify_options = MinifyOptions { + targets, + ..Default::default() + }; + if self.config.css.minify { - //its lightningcss time! - let mut lightsheet = match lightningcss::stylesheet::StyleSheet::parse( - &css, - lightningcss::stylesheet::ParserOptions::default(), - ) { - Ok(s) => s, - Err(e) => { - return Err(SabryCompilerError::LightParse { - kind: e.kind.to_string(), - loc: e.loc, - }) - } - }; - - let targets = Targets { - browsers: Some(self.config.lightningcss.targets.clone().into()), - ..Default::default() - }; - - let printer_options = PrinterOptions { - minify: self.config.css.minify, - targets, - ..Default::default() - }; - - let minify_options = MinifyOptions { - targets, - ..Default::default() - }; - - lightsheet.minify(minify_options)?; - - css = match lightsheet.to_css(printer_options) { - Ok(c) => { - drop(lightsheet); - c.code - } - Err(e) => return Err(SabryCompilerError::LightPrint(e)), - }; + lightsheet.minify(minify_options)? } + let css = match lightsheet.to_css(printer_options) { + Ok(c) => { + drop(lightsheet); + c.code + } + Err(e) => return Err(SabryCompilerError::LightPrint(e)), + }; + Ok(css) } }