Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ crate-type = ["rlib"]
default = ["bundler", "nodejs", "sourcemap"]
browserslist = ["browserslist-rs"]
bundler = ["dashmap", "custom_sourcemap", "rayon"]
cli = ["clap", "serde_json", "browserslist", "jemallocator"]
cli = ["clap", "serde_json", "browserslist", "jemallocator", "sourcemap"]
jsonschema = ["schemars", "serde", "rspack-lightningcss-selectors/jsonschema"]
nodejs = ["dep:serde", "dep:serde-content"]
serde = [
Expand All @@ -62,9 +62,8 @@ serde = [
"rspack-lightningcss-selectors/serde",
"into_owned",
]
# Keep the existing feature name as a compatibility alias.
sourcemap = ["custom_sourcemap"]
custom_sourcemap = ["parcel_sourcemap"]
sourcemap = ["custom_sourcemap", "dep:parcel_sourcemap"]
custom_sourcemap = ["dep:rustc-hash"]
visitor = []
into_owned = [
"rspack-lightningcss-static-self",
Expand All @@ -89,6 +88,7 @@ lazy_static = "1.4.0"
const-str = "1.1.0"
pathdiff = "0.2.1"
ahash = "0.8.7"
rustc-hash = { version = "2", optional = true }
pastey = "0.1.0"
indexmap = { version = "2.2.6", features = ["serde"] }
# CLI deps
Expand Down
38 changes: 34 additions & 4 deletions benches/common/mod.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use codspeed_criterion_compat::black_box;
use parcel_sourcemap::SourceMap;
use rspack_lightningcss::stylesheet::{MinifyOptions, ParserOptions, PrinterOptions, StyleSheet};
use std::fmt::Write;

Expand Down Expand Up @@ -37,14 +38,43 @@ pub fn transform_stylesheet(css: &str) {
let mut stylesheet = StyleSheet::parse(css, ParserOptions::default()).unwrap();
stylesheet.minify(MinifyOptions::default()).unwrap();
let result = stylesheet
.to_css(PrinterOptions {
minify: true,
..PrinterOptions::default()
})
.to_css(
PrinterOptions {
minify: true,
..PrinterOptions::default()
},
None::<&mut ()>,
)
.unwrap();
black_box(result);
}

pub fn transform_stylesheet_with_source_map(css: &str) {
let mut source_map = SourceMap::new("/");
let source_index = source_map.add_source("bench.css");
source_map.set_source_content(source_index as usize, css).unwrap();

let mut stylesheet = StyleSheet::parse(
css,
ParserOptions {
source_index,
..ParserOptions::default()
},
)
.unwrap();
stylesheet.minify(MinifyOptions::default()).unwrap();
let result = stylesheet
.to_css(
PrinterOptions {
minify: true,
..PrinterOptions::default()
},
Some(&mut source_map),
)
.unwrap();
black_box((result, source_map));
}

fn small_fixture() -> String {
r#"
:root {
Expand Down
9 changes: 8 additions & 1 deletion benches/transform.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,19 @@ fn bench_stylesheet_transform(c: &mut Criterion) {
for fixture in &fixtures {
group.throughput(Throughput::Bytes(fixture.css.len() as u64));
group.bench_with_input(
BenchmarkId::from_parameter(fixture.name),
BenchmarkId::new("no-source-map", fixture.name),
fixture.css.as_str(),
|b, css| {
b.iter(|| common::transform_stylesheet(black_box(css)));
},
);
group.bench_with_input(
BenchmarkId::new("source-map", fixture.name),
fixture.css.as_str(),
|b, css| {
b.iter(|| common::transform_stylesheet_with_source_map(black_box(css)));
},
);
}

group.finish();
Expand Down
7 changes: 5 additions & 2 deletions c/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,6 @@ pub extern "C" fn lightningcss_stylesheet_to_css(
} else {
Some(unsafe { std::str::from_utf8_unchecked(CStr::from_ptr(options.project_root).to_bytes()) })
},
source_map: source_map.as_mut(),
targets: if options.targets != Targets::default() {
Some(options.targets.into()).into()
} else {
Expand All @@ -356,7 +355,11 @@ pub extern "C" fn lightningcss_stylesheet_to_css(
},
};

let res = unwrap!(wrapper.stylesheet.to_css(opts), error, ToCssResult::default());
let res = unwrap!(
wrapper.stylesheet.to_css(opts, source_map.as_mut()),
error,
ToCssResult::default()
);

let map = if let Some(mut source_map) = source_map {
if !options.input_source_map.is_null() {
Expand Down
20 changes: 12 additions & 8 deletions examples/custom_at_rule.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,18 @@ fn main() {
stylesheet.visit(&mut ApplyVisitor { rules: &style_rules }).unwrap();

let result = stylesheet
.to_css(PrinterOptions {
targets: Browsers {
chrome: Some(100 << 16),
..Browsers::default()
}
.into(),
..PrinterOptions::default()
})
.to_css(
PrinterOptions {
targets: Browsers {
chrome: Some(100 << 16),
..Browsers::default()
}
.into(),
..PrinterOptions::default()
},
#[cfg(feature = "custom_sourcemap")]
None::<&mut ()>,
)
.unwrap();
println!("{}", result.code);
}
Expand Down
73 changes: 38 additions & 35 deletions napi/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -763,24 +763,26 @@ fn compile<'i>(
unused_symbols: config.unused_symbols.clone().unwrap_or_default(),
})?;

stylesheet.to_css(PrinterOptions {
minify: config.minify.unwrap_or_default(),
source_map: source_map.as_mut(),
project_root,
targets,
analyze_dependencies: if let Some(d) = &config.analyze_dependencies {
match d {
AnalyzeDependenciesOption::Bool(b) if *b => Some(DependencyOptions { remove_imports: true }),
AnalyzeDependenciesOption::Config(c) => Some(DependencyOptions {
remove_imports: !c.preserve_imports,
}),
_ => None,
}
} else {
None
stylesheet.to_css(
PrinterOptions {
minify: config.minify.unwrap_or_default(),
project_root,
targets,
analyze_dependencies: if let Some(d) = &config.analyze_dependencies {
match d {
AnalyzeDependenciesOption::Bool(b) if *b => Some(DependencyOptions { remove_imports: true }),
AnalyzeDependenciesOption::Config(c) => Some(DependencyOptions {
remove_imports: !c.preserve_imports,
}),
_ => None,
}
} else {
None
},
pseudo_classes: config.pseudo_classes.as_ref().map(|p| p.into()),
},
pseudo_classes: config.pseudo_classes.as_ref().map(|p| p.into()),
})?
source_map.as_mut(),
)?
};

let map = if let Some(mut source_map) = source_map {
Expand Down Expand Up @@ -898,24 +900,26 @@ fn compile_bundle<'i, 'o, P: SourceProvider, F: FnOnce(&mut StyleSheet<'i, AtRul
unused_symbols: config.unused_symbols.clone().unwrap_or_default(),
})?;

stylesheet.to_css(PrinterOptions {
minify: config.minify.unwrap_or_default(),
source_map: source_map.as_mut(),
project_root,
targets,
analyze_dependencies: if let Some(d) = &config.analyze_dependencies {
match d {
AnalyzeDependenciesOption::Bool(b) if *b => Some(DependencyOptions { remove_imports: true }),
AnalyzeDependenciesOption::Config(c) => Some(DependencyOptions {
remove_imports: !c.preserve_imports,
}),
_ => None,
}
} else {
None
stylesheet.to_css(
PrinterOptions {
minify: config.minify.unwrap_or_default(),
project_root,
targets,
analyze_dependencies: if let Some(d) = &config.analyze_dependencies {
match d {
AnalyzeDependenciesOption::Bool(b) if *b => Some(DependencyOptions { remove_imports: true }),
AnalyzeDependenciesOption::Config(c) => Some(DependencyOptions {
remove_imports: !c.preserve_imports,
}),
_ => None,
}
} else {
None
},
pseudo_classes: config.pseudo_classes.as_ref().map(|p| p.into()),
},
pseudo_classes: config.pseudo_classes.as_ref().map(|p| p.into()),
})?
source_map.as_mut(),
)?
};

let map = if let Some(source_map) = &mut source_map {
Expand Down Expand Up @@ -1022,7 +1026,6 @@ fn compile_attr<'i>(
});
attr.to_css(PrinterOptions {
minify: config.minify,
source_map: None,
project_root: None,
targets,
analyze_dependencies: if config.analyze_dependencies {
Expand Down
Loading
Loading