swc_css_minifier/compressor/math/
mod.rs

1use swc_css_ast::*;
2
3pub fn is_calc_function_name(function_name: &FunctionName) -> bool {
4    *function_name == "calc" || *function_name == "-webkit-calc" || *function_name == "-moz-calc"
5}
6
7pub fn transform_calc_value_into_component_value(calc_value: &CalcValue) -> Option<ComponentValue> {
8    match &calc_value {
9        CalcValue::Number(n) => Some(ComponentValue::Number(Box::new(n.clone()))),
10        CalcValue::Dimension(Dimension::Length(l)) => Some(ComponentValue::Dimension(Box::new(
11            Dimension::Length(Length {
12                span: l.span,
13                value: l.value.clone(),
14                unit: l.unit.clone(),
15            }),
16        ))),
17        CalcValue::Dimension(Dimension::Angle(a)) => Some(ComponentValue::Dimension(Box::new(
18            Dimension::Angle(Angle {
19                span: a.span,
20                value: a.value.clone(),
21                unit: a.unit.clone(),
22            }),
23        ))),
24        CalcValue::Dimension(Dimension::Time(t)) => {
25            Some(ComponentValue::Dimension(Box::new(Dimension::Time(Time {
26                span: t.span,
27                value: t.value.clone(),
28                unit: t.unit.clone(),
29            }))))
30        }
31        CalcValue::Dimension(Dimension::Frequency(f)) => Some(ComponentValue::Dimension(Box::new(
32            Dimension::Frequency(Frequency {
33                span: f.span,
34                value: f.value.clone(),
35                unit: f.unit.clone(),
36            }),
37        ))),
38        CalcValue::Dimension(Dimension::Resolution(r)) => Some(ComponentValue::Dimension(
39            Box::new(Dimension::Resolution(Resolution {
40                span: r.span,
41                value: r.value.clone(),
42                unit: r.unit.clone(),
43            })),
44        )),
45        CalcValue::Dimension(Dimension::Flex(f)) => {
46            Some(ComponentValue::Dimension(Box::new(Dimension::Flex(Flex {
47                span: f.span,
48                value: f.value.clone(),
49                unit: f.unit.clone(),
50            }))))
51        }
52        CalcValue::Dimension(Dimension::UnknownDimension(u)) => Some(ComponentValue::Dimension(
53            Box::new(Dimension::UnknownDimension(UnknownDimension {
54                span: u.span,
55                value: u.value.clone(),
56                unit: u.unit.clone(),
57            })),
58        )),
59        CalcValue::Percentage(p) => Some(ComponentValue::Percentage(Box::new(Percentage {
60            span: p.span,
61            value: p.value.clone(),
62        }))),
63        CalcValue::Function(f) => Some(ComponentValue::Function(Box::new(Function {
64            span: f.span,
65            name: f.name.clone(),
66            value: f.value.to_vec(),
67        }))),
68        CalcValue::Constant(_) => {
69            // https://www.w3.org/TR/css-values-4/#calc-constants
70            // "These keywords are only usable within a calculation"
71            // "If used outside of a calculation, they’re treated like any other keyword"
72            None
73        }
74        CalcValue::Sum(_) => {
75            // Do nothing, we cannot transform a CalcSum into a ComponentValue
76            None
77        }
78    }
79}