stylex_transform/shared/structures/
member_transform.rs1use 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}