fix: apply lightningcss to bundle once again. Seems the right thing to do

This commit is contained in:
Yiffy Dev 2024-11-02 09:15:11 +05:00 • committed by spushk
commit fca2410f09
Signed by: spushk
GPG key ID: 7797B761E105E8AA
2 changed files with 57 additions and 41 deletions

View file

@ -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(())

View file

@ -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<String, SabryCompilerError> {
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)
}
}