Skip to main content

stylex_transform/shared/structures/
member_transform.rs

1use swc_core::ecma::ast::{Expr, MemberExpr};
2use swc_core::ecma::visit::{Fold, FoldWith, noop_fold_type};
3
4use crate::shared::utils::core::member_expression::member_expression;
5use stylex_enums::style_vars_to_keep::NonNullProps;
6
7use super::{functions::FunctionMap, state_manager::StateManager};
8
9#[derive(Clone, Debug)]
10pub(crate) struct MemberTransform {
11  pub(crate) index: i32,
12  pub(crate) bail_out_index: Option<i32>,
13  pub(crate) non_null_props: NonNullProps,
14  pub(crate) state: StateManager,
15  pub(crate) parents: Vec<Expr>,
16  pub(crate) functions: FunctionMap,
17}
18
19impl Fold for MemberTransform {
20  noop_fold_type!();
21
22  fn fold_expr(&mut self, expr: Expr) -> Expr {
23    self.parents.push(expr.to_owned());
24    expr.fold_children_with(self)
25  }
26
27  fn fold_member_expr(&mut self, member: MemberExpr) -> MemberExpr {
28    member_expression(
29      &member,
30      &mut self.index,
31      &mut self.bail_out_index,
32      &mut self.non_null_props,
33      &mut self.state,
34      &self.functions,
35    );
36
37    member
38  }
39}