Skip to content

Commit

Permalink
feat(css/compat): Support function notation (#6651)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-akait committed Dec 16, 2022
1 parent 78f08bb commit 39afc46
Show file tree
Hide file tree
Showing 10 changed files with 700 additions and 22 deletions.
47 changes: 47 additions & 0 deletions crates/swc_css_compat/src/compiler/color_alpha_parameter.rs
@@ -0,0 +1,47 @@
use swc_atoms::js_word;
use swc_css_ast::{AbsoluteColorBase, ComponentValue};

use crate::compiler::Compiler;

impl Compiler {
pub(crate) fn process_color_alpha_parameter(&mut self, n: &mut AbsoluteColorBase) {
if let AbsoluteColorBase::Function(function) = n {
let name = function.name.value.to_ascii_lowercase();

if let Some(ComponentValue::AlphaValue(_) | ComponentValue::Function(_)) =
function.value.last()
{
if !matches!(
name,
js_word!("rgb") | js_word!("rgba") | js_word!("hsl") | js_word!("hsla")
) {
return;
}

match name {
js_word!("rgb") => {
function.name.value = js_word!("rgba");
function.name.raw = None;
}
js_word!("hsl") => {
function.name.value = js_word!("hsla");
function.name.raw = None;
}
_ => {}
}
} else {
match name {
js_word!("rgba") => {
function.name.value = js_word!("rgb");
function.name.raw = None;
}
js_word!("hsla") => {
function.name.value = js_word!("hsl");
function.name.raw = None;
}
_ => {}
}
}
}
}
}
26 changes: 5 additions & 21 deletions crates/swc_css_compat/src/compiler/color_hex_alpha.rs
Expand Up @@ -5,7 +5,7 @@ use swc_css_ast::{
Ident, Number,
};

use crate::compiler::Compiler;
use crate::compiler::{utils::round_alpha, Compiler};

#[inline]
fn from_hex(c: u8) -> u8 {
Expand All @@ -19,11 +19,6 @@ fn from_hex(c: u8) -> u8 {
}
}

#[inline]
fn clamp_unit_f32(val: f64) -> u8 {
(val * 255.).round().max(0.).min(255.) as u8
}

fn shorten_hex_color(value: &str) -> Option<&str> {
let length = value.len();
let chars = value.as_bytes();
Expand Down Expand Up @@ -83,17 +78,6 @@ impl Compiler {

let rgba = hex_to_rgba(&hex_color.value);

let r = rgba.0 as f64;
let g = rgba.1 as f64;
let b = rgba.2 as f64;
let a = rgba.3;

let mut rounded_alpha = (a * 100.).round() / 100.;

if clamp_unit_f32(rounded_alpha) != clamp_unit_f32(a) {
rounded_alpha = (a * 1000.).round() / 1000.;
}

*n = ComponentValue::Color(Box::new(Color::AbsoluteColorBase(
AbsoluteColorBase::Function(Function {
span: hex_color.span,
Expand All @@ -105,7 +89,7 @@ impl Compiler {
value: vec![
ComponentValue::Number(Box::new(Number {
span: DUMMY_SP,
value: r,
value: rgba.0 as f64,
raw: None,
})),
ComponentValue::Delimiter(Box::new(Delimiter {
Expand All @@ -114,7 +98,7 @@ impl Compiler {
})),
ComponentValue::Number(Box::new(Number {
span: DUMMY_SP,
value: g,
value: rgba.1 as f64,
raw: None,
})),
ComponentValue::Delimiter(Box::new(Delimiter {
Expand All @@ -123,7 +107,7 @@ impl Compiler {
})),
ComponentValue::Number(Box::new(Number {
span: DUMMY_SP,
value: b,
value: rgba.2 as f64,
raw: None,
})),
ComponentValue::Delimiter(Box::new(Delimiter {
Expand All @@ -132,7 +116,7 @@ impl Compiler {
})),
ComponentValue::AlphaValue(Box::new(AlphaValue::Number(Number {
span: DUMMY_SP,
value: rounded_alpha,
value: round_alpha(rgba.3),
raw: None,
}))),
],
Expand Down
@@ -0,0 +1,72 @@
use std::mem::take;

use swc_atoms::js_word;
use swc_common::DUMMY_SP;
use swc_css_ast::{AbsoluteColorBase, ComponentValue, Delimiter, DelimiterValue};

use crate::compiler::Compiler;

impl Compiler {
pub(crate) fn process_color_space_separated_function_notation(
&mut self,
n: &mut AbsoluteColorBase,
) {
if let AbsoluteColorBase::Function(function) = n {
let name = function.name.value.to_ascii_lowercase();

if !matches!(
name,
js_word!("rgb") | js_word!("rgba") | js_word!("hsl") | js_word!("hsla")
) {
return;
}

if function.value.len() != 3 && function.value.len() != 5 {
return;
}

if function.value.iter().any(|n| {
matches!(
n,
ComponentValue::Delimiter(box Delimiter {
value: DelimiterValue::Comma,
..
})
)
}) {
return;
}

let new_value: Vec<ComponentValue> = take(&mut function.value)
.into_iter()
.enumerate()
.flat_map(|(idx, node)| {
if matches!(idx, 0 | 1) {
vec![
node,
ComponentValue::Delimiter(Box::new(Delimiter {
value: DelimiterValue::Comma,
span: DUMMY_SP,
})),
]
} else if matches!(
node,
ComponentValue::Delimiter(box Delimiter {
value: DelimiterValue::Solidus,
..
})
) {
vec![ComponentValue::Delimiter(Box::new(Delimiter {
value: DelimiterValue::Comma,
span: DUMMY_SP,
}))]
} else {
vec![node]
}
})
.collect::<Vec<_>>();

function.value = new_value;
}
}
}
89 changes: 89 additions & 0 deletions crates/swc_css_compat/src/compiler/legacy_rgb_and_hsl.rs
@@ -0,0 +1,89 @@
use std::f64::consts::PI;

use swc_atoms::js_word;
use swc_css_ast::{AbsoluteColorBase, AlphaValue, Angle, ComponentValue, Hue, Number, Percentage};

use crate::compiler::{
utils::{clamp_unit_f32, round_alpha},
Compiler,
};

impl Compiler {
pub(crate) fn process_rgb_and_hsl(&mut self, n: &mut AbsoluteColorBase) {
if let AbsoluteColorBase::Function(function) = n {
let name = function.name.value.to_ascii_lowercase();

let is_rgb = matches!(name, js_word!("rgb") | js_word!("rgba"));
let is_hsl = matches!(name, js_word!("hsl") | js_word!("hsla"));

if is_rgb {
function.value = function
.value
.drain(..)
.into_iter()
.map(|n| match n {
ComponentValue::Percentage(box Percentage {
span,
value: Number { value, .. },
..
}) => ComponentValue::Number(Box::new(Number {
span,
value: clamp_unit_f32(value / 100.0) as f64,
raw: None,
})),
_ => n,
})
.collect();
} else if is_hsl {
function.value = function
.value
.drain(..)
.into_iter()
.map(|n| match n {
ComponentValue::Hue(box Hue::Angle(Angle {
span,
value: Number { value, .. },
unit,
..
})) => {
let value = match unit.value.to_ascii_lowercase() {
js_word!("deg") => value,
js_word!("grad") => value * 180.0 / 200.0,
js_word!("rad") => value * 180.0 / PI,
js_word!("turn") => value * 360.0,
_ => {
unreachable!();
}
};

ComponentValue::Number(Box::new(Number {
span,
value: value.round(),
raw: None,
}))
}
_ => n,
})
.collect();
}

if is_rgb || is_hsl {
if let Some(ComponentValue::AlphaValue(box alpha_value)) = function.value.last_mut()
{
if let AlphaValue::Percentage(Percentage {
span,
value: Number { value: a, .. },
..
}) = alpha_value
{
*alpha_value = AlphaValue::Number(Number {
span: *span,
value: round_alpha(*a / 100.0),
raw: None,
});
}
}
}
}
}
}
31 changes: 30 additions & 1 deletion crates/swc_css_compat/src/compiler/mod.rs
@@ -1,16 +1,20 @@
use swc_common::{Spanned, DUMMY_SP};
use swc_css_ast::{
AtRule, ComponentValue, MediaAnd, MediaCondition, MediaConditionAllType,
AbsoluteColorBase, AtRule, ComponentValue, MediaAnd, MediaCondition, MediaConditionAllType,
MediaConditionWithoutOr, MediaInParens, MediaQuery, Rule, SupportsCondition,
};
use swc_css_visit::{VisitMut, VisitMutWith};

use self::custom_media::CustomMediaHandler;
use crate::feature::Features;

mod color_alpha_parameter;
mod color_hex_alpha;
mod color_space_separated_parameters;
mod custom_media;
mod legacy_rgb_and_hsl;
mod media_query_ranges;
mod utils;

/// Compiles a modern CSS file to a CSS file which works with old browsers.
#[derive(Debug)]
Expand Down Expand Up @@ -130,4 +134,29 @@ impl VisitMut for Compiler {
self.process_color_hex_alpha(n);
}
}

fn visit_mut_absolute_color_base(&mut self, n: &mut AbsoluteColorBase) {
n.visit_mut_children_with(self);

if self.in_supports_condition {
return;
}

// TODO handle color functions in custom variables under the option
// TODO implement the `preserve` option to preserve the original color

let process = self.c.process;

if process.contains(Features::COLOR_SPACE_SEPARATED_PARAMETERS) {
self.process_color_space_separated_function_notation(n);
}

if process.contains(Features::COLOR_ALPHA_PARAMETER) {
self.process_color_alpha_parameter(n);
}

if process.contains(Features::COLOR_LEGACY_RGB_AND_HSL) {
self.process_rgb_and_hsl(n);
}
}
}
15 changes: 15 additions & 0 deletions crates/swc_css_compat/src/compiler/utils.rs
@@ -0,0 +1,15 @@
#[inline]
pub(crate) fn clamp_unit_f32(val: f64) -> u8 {
(val * 255.).round().max(0.).min(255.) as u8
}

#[inline]
pub(crate) fn round_alpha(alpha: f64) -> f64 {
let mut rounded_alpha = (alpha * 100.).round() / 100.;

if clamp_unit_f32(rounded_alpha) != clamp_unit_f32(alpha) {
rounded_alpha = (alpha * 1000.).round() / 1000.;
}

rounded_alpha
}
3 changes: 3 additions & 0 deletions crates/swc_css_compat/src/feature.rs
Expand Up @@ -6,5 +6,8 @@ bitflags! {
const CUSTOM_MEDIA = 1 << 1;
const MEDIA_QUERY_RANGES = 1 << 2;
const COLOR_HEX_ALPHA = 1 << 3;
const COLOR_ALPHA_PARAMETER = 1 << 4;
const COLOR_SPACE_SEPARATED_PARAMETERS = 1 << 5;
const COLOR_LEGACY_RGB_AND_HSL = 1 << 6;
}
}

1 comment on commit 39afc46

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 39afc46 Previous: 3d3863d Ratio
es/full/bugs-1 287090 ns/iter (± 9682) 309165 ns/iter (± 11188) 0.93
es/full/minify/libraries/antd 1602951540 ns/iter (± 21369537) 1803644781 ns/iter (± 19644694) 0.89
es/full/minify/libraries/d3 303926543 ns/iter (± 6526843) 324440941 ns/iter (± 4801873) 0.94
es/full/minify/libraries/echarts 1231470036 ns/iter (± 20755151) 1381203816 ns/iter (± 11657545) 0.89
es/full/minify/libraries/jquery 90329077 ns/iter (± 716334) 94004610 ns/iter (± 863382) 0.96
es/full/minify/libraries/lodash 106311320 ns/iter (± 987753) 109962930 ns/iter (± 1125769) 0.97
es/full/minify/libraries/moment 52585701 ns/iter (± 237039) 54466010 ns/iter (± 1960930) 0.97
es/full/minify/libraries/react 19024325 ns/iter (± 171229) 19367399 ns/iter (± 101522) 0.98
es/full/minify/libraries/terser 251244081 ns/iter (± 5712143) 272368492 ns/iter (± 3390504) 0.92
es/full/minify/libraries/three 448035052 ns/iter (± 13705223) 490547481 ns/iter (± 7223233) 0.91
es/full/minify/libraries/typescript 3020194902 ns/iter (± 12710047) 3328139453 ns/iter (± 36946273) 0.91
es/full/minify/libraries/victory 683308538 ns/iter (± 11944678) 762426651 ns/iter (± 12359824) 0.90
es/full/minify/libraries/vue 131423465 ns/iter (± 6770161) 137859285 ns/iter (± 2058655) 0.95
es/full/codegen/es3 27613 ns/iter (± 69) 27693 ns/iter (± 52) 1.00
es/full/codegen/es5 27593 ns/iter (± 39) 27809 ns/iter (± 67) 0.99
es/full/codegen/es2015 27635 ns/iter (± 49) 27708 ns/iter (± 80) 1.00
es/full/codegen/es2016 27602 ns/iter (± 35) 27799 ns/iter (± 78) 0.99
es/full/codegen/es2017 27623 ns/iter (± 68) 27691 ns/iter (± 67) 1.00
es/full/codegen/es2018 27606 ns/iter (± 50) 27763 ns/iter (± 56) 0.99
es/full/codegen/es2019 27604 ns/iter (± 89) 27671 ns/iter (± 44) 1.00
es/full/codegen/es2020 27616 ns/iter (± 49) 27699 ns/iter (± 64) 1.00
es/full/all/es3 166589487 ns/iter (± 3225089) 173557368 ns/iter (± 2978172) 0.96
es/full/all/es5 158179604 ns/iter (± 3133857) 163609562 ns/iter (± 2443079) 0.97
es/full/all/es2015 119739019 ns/iter (± 737101) 126421647 ns/iter (± 2950440) 0.95
es/full/all/es2016 117821852 ns/iter (± 1096791) 123450121 ns/iter (± 2752297) 0.95
es/full/all/es2017 117946357 ns/iter (± 631043) 123074278 ns/iter (± 1778446) 0.96
es/full/all/es2018 116122037 ns/iter (± 649452) 120466390 ns/iter (± 719618) 0.96
es/full/all/es2019 115368371 ns/iter (± 984541) 120189822 ns/iter (± 1560724) 0.96
es/full/all/es2020 110793508 ns/iter (± 747220) 115392515 ns/iter (± 1220610) 0.96
es/full/parser 511797 ns/iter (± 7370) 517343 ns/iter (± 9347) 0.99
es/full/base/fixer 22062 ns/iter (± 35) 22225 ns/iter (± 35) 0.99
es/full/base/resolver_and_hygiene 78328 ns/iter (± 101) 78025 ns/iter (± 128) 1.00
serialization of ast node 138 ns/iter (± 0) 139 ns/iter (± 0) 0.99
serialization of serde 123 ns/iter (± 0) 124 ns/iter (± 0) 0.99
css/minify/libraries/bootstrap 26749206 ns/iter (± 85704) 27252934 ns/iter (± 634341) 0.98
css/visitor/compare/clone 2046369 ns/iter (± 24023) 2085399 ns/iter (± 20750) 0.98
css/visitor/compare/visit_mut_span 2262312 ns/iter (± 2836) 2305466 ns/iter (± 15850) 0.98
css/visitor/compare/visit_mut_span_panic 2332902 ns/iter (± 12583) 2349001 ns/iter (± 6294) 0.99
css/visitor/compare/fold_span 3036685 ns/iter (± 31425) 3034571 ns/iter (± 30576) 1.00
css/visitor/compare/fold_span_panic 3124398 ns/iter (± 22287) 3176955 ns/iter (± 47988) 0.98
css/lexer/bootstrap_5_1_3 5204588 ns/iter (± 1970) 5349618 ns/iter (± 1865) 0.97
css/lexer/foundation_6_7_4 4422476 ns/iter (± 664) 4420599 ns/iter (± 1727) 1.00
css/lexer/tailwind_3_1_1 831378 ns/iter (± 163) 829417 ns/iter (± 185) 1.00
css/parser/bootstrap_5_1_3 20816347 ns/iter (± 237560) 21475844 ns/iter (± 72229) 0.97
css/parser/foundation_6_7_4 16668787 ns/iter (± 32224) 17047445 ns/iter (± 37674) 0.98
css/parser/tailwind_3_1_1 3204606 ns/iter (± 2034) 3250005 ns/iter (± 6288) 0.99
es/codegen/colors 332353 ns/iter (± 187006) 322873 ns/iter (± 181339) 1.03
es/codegen/large 1219032 ns/iter (± 641085) 1219555 ns/iter (± 644558) 1.00
es/codegen/with-parser/colors 46715 ns/iter (± 325) 46815 ns/iter (± 310) 1.00
es/codegen/with-parser/large 506480 ns/iter (± 411) 509704 ns/iter (± 3092) 0.99
es/minify/libraries/antd 1385381917 ns/iter (± 10520553) 1573128362 ns/iter (± 31570166) 0.88
es/minify/libraries/d3 253367360 ns/iter (± 3354890) 276767153 ns/iter (± 5788516) 0.92
es/minify/libraries/echarts 1080117681 ns/iter (± 6375569) 1189808687 ns/iter (± 9640247) 0.91
es/minify/libraries/jquery 78409572 ns/iter (± 1416555) 80646398 ns/iter (± 778064) 0.97
es/minify/libraries/lodash 95028746 ns/iter (± 836837) 98496085 ns/iter (± 1822368) 0.96
es/minify/libraries/moment 45777114 ns/iter (± 316658) 46820351 ns/iter (± 392800) 0.98
es/minify/libraries/react 16837223 ns/iter (± 127537) 17247853 ns/iter (± 183502) 0.98
es/minify/libraries/terser 210695529 ns/iter (± 3528083) 231527671 ns/iter (± 6211630) 0.91
es/minify/libraries/three 367481763 ns/iter (± 13703054) 428359845 ns/iter (± 12313762) 0.86
es/minify/libraries/typescript 2607184630 ns/iter (± 13527567) 2882676129 ns/iter (± 26121672) 0.90
es/minify/libraries/victory 578948185 ns/iter (± 10237271) 671625714 ns/iter (± 10636538) 0.86
es/minify/libraries/vue 116733196 ns/iter (± 2789559) 124003669 ns/iter (± 2038454) 0.94
es/visitor/compare/clone 2366215 ns/iter (± 5004) 2461793 ns/iter (± 61327) 0.96
es/visitor/compare/visit_mut_span 2766216 ns/iter (± 10355) 2817648 ns/iter (± 8659) 0.98
es/visitor/compare/visit_mut_span_panic 2823263 ns/iter (± 3382) 2890846 ns/iter (± 21041) 0.98
es/visitor/compare/fold_span 3941578 ns/iter (± 11259) 4006048 ns/iter (± 53376) 0.98
es/visitor/compare/fold_span_panic 4097220 ns/iter (± 14976) 4154615 ns/iter (± 15564) 0.99
es/lexer/colors 17170 ns/iter (± 8) 17260 ns/iter (± 7) 0.99
es/lexer/angular 8195061 ns/iter (± 2182) 8262840 ns/iter (± 6258) 0.99
es/lexer/backbone 1066388 ns/iter (± 167) 1077903 ns/iter (± 278) 0.99
es/lexer/jquery 5929621 ns/iter (± 3102) 5983810 ns/iter (± 2497) 0.99
es/lexer/jquery mobile 9125641 ns/iter (± 2120) 9204069 ns/iter (± 10281) 0.99
es/lexer/mootools 4647670 ns/iter (± 1289) 4697022 ns/iter (± 4566) 0.99
es/lexer/underscore 891573 ns/iter (± 397) 901198 ns/iter (± 770) 0.99
es/lexer/three 27787887 ns/iter (± 15303) 28067382 ns/iter (± 14834) 0.99
es/lexer/yui 5030765 ns/iter (± 1447) 5066626 ns/iter (± 2037) 0.99
es/parser/colors 31009 ns/iter (± 118) 30970 ns/iter (± 157) 1.00
es/parser/angular 15858942 ns/iter (± 174885) 16825116 ns/iter (± 272679) 0.94
es/parser/backbone 2309672 ns/iter (± 18014) 2330480 ns/iter (± 16349) 0.99
es/parser/jquery 12455559 ns/iter (± 51287) 12960183 ns/iter (± 562416) 0.96
es/parser/jquery mobile 19820014 ns/iter (± 216435) 21402855 ns/iter (± 378515) 0.93
es/parser/mootools 9549809 ns/iter (± 30820) 9701416 ns/iter (± 45064) 0.98
es/parser/underscore 1953362 ns/iter (± 11069) 1973631 ns/iter (± 11113) 0.99
es/parser/three 58428359 ns/iter (± 615282) 62428764 ns/iter (± 300999) 0.94
es/parser/yui 9642140 ns/iter (± 268352) 9794072 ns/iter (± 62401) 0.98
es/preset-env/usage/builtin_type 140135 ns/iter (± 31477) 139921 ns/iter (± 35307) 1.00
es/preset-env/usage/property 21224 ns/iter (± 77) 21110 ns/iter (± 65) 1.01
es/resolver/typescript 109811832 ns/iter (± 2489055) 122120337 ns/iter (± 2737111) 0.90
es/fixer/typescript 83878150 ns/iter (± 727500) 99989353 ns/iter (± 6070042) 0.84
es/hygiene/typescript 168969600 ns/iter (± 1159775) 200874717 ns/iter (± 1227148) 0.84
es/resolver_with_hygiene/typescript 304512736 ns/iter (± 1018250) 349035856 ns/iter (± 2804510) 0.87
es/visitor/base-perf/module_clone 75764 ns/iter (± 1746) 75723 ns/iter (± 1813) 1.00
es/visitor/base-perf/fold_empty 85924 ns/iter (± 721) 85215 ns/iter (± 1897) 1.01
es/visitor/base-perf/fold_noop_impl_all 85790 ns/iter (± 2078) 84901 ns/iter (± 713) 1.01
es/visitor/base-perf/fold_noop_impl_vec 85525 ns/iter (± 761) 85571 ns/iter (± 1218) 1.00
es/visitor/base-perf/boxing_boxed_clone 55 ns/iter (± 0) 59 ns/iter (± 0) 0.93
es/visitor/base-perf/boxing_unboxed_clone 59 ns/iter (± 0) 59 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 102 ns/iter (± 0) 103 ns/iter (± 0) 0.99
es/visitor/base-perf/boxing_unboxed 102 ns/iter (± 0) 106 ns/iter (± 0) 0.96
es/visitor/base-perf/visit_contains_this 3482 ns/iter (± 46) 3399 ns/iter (± 67) 1.02
es/base/parallel/resolver/typescript 5360428418 ns/iter (± 457821744) 5064855948 ns/iter (± 423579931) 1.06
es/base/parallel/hygiene/typescript 2007298291 ns/iter (± 39971285) 2249873077 ns/iter (± 40928411) 0.89
misc/visitors/time-complexity/time 5 93 ns/iter (± 0) 93 ns/iter (± 1) 1
misc/visitors/time-complexity/time 10 327 ns/iter (± 1) 327 ns/iter (± 3) 1
misc/visitors/time-complexity/time 15 633 ns/iter (± 1) 635 ns/iter (± 2) 1.00
misc/visitors/time-complexity/time 20 1190 ns/iter (± 1) 1191 ns/iter (± 1) 1.00
misc/visitors/time-complexity/time 40 6150 ns/iter (± 3) 6150 ns/iter (± 1) 1
misc/visitors/time-complexity/time 60 15492 ns/iter (± 6) 15496 ns/iter (± 7) 1.00
es/full-target/es2016 187977 ns/iter (± 899) 188367 ns/iter (± 1145) 1.00
es/full-target/es2017 182934 ns/iter (± 577) 183716 ns/iter (± 538) 1.00
es/full-target/es2018 172136 ns/iter (± 618) 172448 ns/iter (± 820) 1.00
es2020_nullish_coalescing 66947 ns/iter (± 151) 66931 ns/iter (± 106) 1.00
es2020_optional_chaining 95247 ns/iter (± 418) 96014 ns/iter (± 5564) 0.99
es2022_class_properties 93308 ns/iter (± 239) 93345 ns/iter (± 162) 1.00
es2018_object_rest_spread 71581 ns/iter (± 160) 70302 ns/iter (± 101) 1.02
es2019_optional_catch_binding 61058 ns/iter (± 145) 60148 ns/iter (± 89) 1.02
es2017_async_to_generator 61580 ns/iter (± 131) 60462 ns/iter (± 87) 1.02
es2016_exponentiation 64922 ns/iter (± 56) 63780 ns/iter (± 150) 1.02
es2015_arrow 70306 ns/iter (± 165) 68378 ns/iter (± 116) 1.03
es2015_block_scoped_fn 65930 ns/iter (± 200) 64400 ns/iter (± 63) 1.02
es2015_block_scoping 154924 ns/iter (± 7364) 147650 ns/iter (± 9295) 1.05
es2015_classes 116924 ns/iter (± 293) 113822 ns/iter (± 468) 1.03
es2015_computed_props 60845 ns/iter (± 88) 59686 ns/iter (± 106) 1.02
es2015_destructuring 115306 ns/iter (± 313) 112944 ns/iter (± 104) 1.02
es2015_duplicate_keys 63732 ns/iter (± 84) 62614 ns/iter (± 70) 1.02
es2015_parameters 79783 ns/iter (± 165) 78187 ns/iter (± 164) 1.02
es2015_fn_name 66357 ns/iter (± 427) 65771 ns/iter (± 652) 1.01
es2015_for_of 64116 ns/iter (± 110) 62769 ns/iter (± 84) 1.02
es2015_instanceof 63531 ns/iter (± 144) 62252 ns/iter (± 77) 1.02
es2015_shorthand_property 61125 ns/iter (± 123) 59982 ns/iter (± 67) 1.02
es2015_spread 61004 ns/iter (± 80) 59960 ns/iter (± 59) 1.02
es2015_sticky_regex 62549 ns/iter (± 132) 61262 ns/iter (± 41) 1.02
es2015_typeof_symbol 62350 ns/iter (± 153) 61241 ns/iter (± 73) 1.02
es/transform/baseline/base 52092 ns/iter (± 206) 51044 ns/iter (± 88) 1.02
es/transform/baseline/common_reserved_word 62616 ns/iter (± 163) 61319 ns/iter (± 82) 1.02
es/transform/baseline/common_typescript 168709 ns/iter (± 331) 166559 ns/iter (± 376) 1.01
es/target/es3 169646 ns/iter (± 431) 165804 ns/iter (± 122) 1.02
es/target/es2015 627921 ns/iter (± 1857) 602001 ns/iter (± 1149) 1.04
es/target/es2016 64934 ns/iter (± 161) 63778 ns/iter (± 76) 1.02
es/target/es2017 61697 ns/iter (± 62) 60452 ns/iter (± 45) 1.02
es/target/es2018 81795 ns/iter (± 116) 80204 ns/iter (± 73) 1.02
es/target/es2020 132380 ns/iter (± 205) 128441 ns/iter (± 115) 1.03
babelify-only 672299 ns/iter (± 791) 671031 ns/iter (± 1482) 1.00
parse_and_babelify_angular 41482742 ns/iter (± 849963) 45899029 ns/iter (± 721333) 0.90
parse_and_babelify_backbone 5313844 ns/iter (± 45877) 5649894 ns/iter (± 161103) 0.94
parse_and_babelify_jquery 30992425 ns/iter (± 428708) 34577922 ns/iter (± 503362) 0.90
parse_and_babelify_jquery_mobile 53646758 ns/iter (± 1799129) 59465545 ns/iter (± 1000709) 0.90
parse_and_babelify_mootools 31926663 ns/iter (± 280134) 35631671 ns/iter (± 383767) 0.90
parse_and_babelify_underscore 4317496 ns/iter (± 21820) 4392093 ns/iter (± 37491) 0.98
parse_and_babelify_yui 31540989 ns/iter (± 461646) 35439449 ns/iter (± 678210) 0.89
html/minify/document/css_spec 41431301 ns/iter (± 259692) 43375156 ns/iter (± 263807) 0.96
html/minify/document/github 17356511 ns/iter (± 21430) 17735859 ns/iter (± 345661) 0.98
html/minify/document/stackoverflow 15543975 ns/iter (± 32420) 15690098 ns/iter (± 42669) 0.99
html/minify/document_fragment/css_spec 39620135 ns/iter (± 178896) 41736730 ns/iter (± 358376) 0.95
html/minify/document_fragment/github 16745228 ns/iter (± 21360) 17083201 ns/iter (± 28754) 0.98
html/minify/document_fragment/stackoverflow 15054899 ns/iter (± 21017) 15338205 ns/iter (± 83196) 0.98
html/document/visitor/compare/clone 332699 ns/iter (± 2525) 338078 ns/iter (± 2292) 0.98
html/document/visitor/compare/visit_mut_span 360141 ns/iter (± 2031) 365099 ns/iter (± 2153) 0.99
html/document/visitor/compare/visit_mut_span_panic 370809 ns/iter (± 2034) 370852 ns/iter (± 1539) 1.00
html/document/visitor/compare/fold_span 404478 ns/iter (± 2299) 401923 ns/iter (± 1878) 1.01
html/document/visitor/compare/fold_span_panic 456420 ns/iter (± 2083) 457738 ns/iter (± 1426) 1.00
html/document_fragment/visitor/compare/clone 333923 ns/iter (± 1380) 334144 ns/iter (± 1773) 1.00
html/document_fragment/visitor/compare/visit_mut_span 366854 ns/iter (± 1896) 367013 ns/iter (± 1406) 1.00
html/document_fragment/visitor/compare/visit_mut_span_panic 373233 ns/iter (± 2000) 370023 ns/iter (± 3071) 1.01
html/document_fragment/visitor/compare/fold_span 402661 ns/iter (± 1661) 399286 ns/iter (± 4586) 1.01
html/document_fragment/visitor/compare/fold_span_panic 454591 ns/iter (± 1233) 459892 ns/iter (± 1649) 0.99
html/lexer/css_2021_spec 15556328 ns/iter (± 6220) 15550368 ns/iter (± 14915) 1.00
html/lexer/github_com_17_05_2022 6023585 ns/iter (± 1879) 6021430 ns/iter (± 4519) 1.00
html/lexer/stackoverflow_com_17_05_2022 5646068 ns/iter (± 7517) 5633894 ns/iter (± 12029) 1.00
html/parser/parser_document/css_2021_spec 25574138 ns/iter (± 297482) 26293747 ns/iter (± 192765) 0.97
html/parser/parser_document/github_com_17_05_2022 8745845 ns/iter (± 6790) 8770019 ns/iter (± 11304) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7695139 ns/iter (± 9099) 7714139 ns/iter (± 4384) 1.00
html/parser/parser_document_fragment/css_2021_spec 25617785 ns/iter (± 124990) 26797122 ns/iter (± 455780) 0.96
html/parser/parser_document_fragment/github_com_17_05_2022 8745094 ns/iter (± 25883) 8787531 ns/iter (± 16249) 1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7790547 ns/iter (± 5417) 7742881 ns/iter (± 54971) 1.01

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.