stylex_transform/shared/utils/core/
dev_class_name.rs1use std::{path::Path, rc::Rc};
2
3use indexmap::IndexMap;
4use stylex_macros::stylex_panic;
5
6use crate::shared::enums::data_structures::flat_compiled_styles_value::FlatCompiledStylesValue;
7use crate::shared::structures::state_manager::StateManager;
8use crate::shared::structures::types::{FlatCompiledStyles, StylesObjectMap};
9use stylex_constants::constants::common::COMPILED_KEY;
10use stylex_regex::regex::SANITIZE_CLASS_NAME_REGEX;
11
12pub(crate) fn inject_dev_class_names(
13 obj: &StylesObjectMap,
14 var_name: &Option<String>,
15 state: &StateManager,
16) -> StylesObjectMap {
17 let mut result: StylesObjectMap = IndexMap::new();
18
19 for (key, value) in obj.iter() {
20 let dev_class_name =
21 namespace_to_dev_class_name(key, var_name, state.get_short_filename().as_str());
22
23 let mut dev_class = IndexMap::new();
24
25 dev_class.insert(
26 dev_class_name.clone(),
27 Rc::new(FlatCompiledStylesValue::String(dev_class_name)),
28 );
29
30 dev_class.extend((**value).clone());
31
32 result.insert(key.clone(), Rc::new(dev_class));
33 }
34
35 result
36}
37
38pub(crate) fn convert_to_test_styles(
39 obj: &StylesObjectMap,
40 var_name: &Option<String>,
41 state: &StateManager,
42) -> StylesObjectMap {
43 let mut result: StylesObjectMap = IndexMap::new();
44
45 for (key, _value) in obj.iter() {
46 let dev_class_name =
47 namespace_to_dev_class_name(key, var_name, state.get_short_filename().as_str());
48
49 let mut dev_class = IndexMap::new();
50
51 dev_class.insert(
52 dev_class_name.clone(),
53 Rc::new(FlatCompiledStylesValue::String(dev_class_name)),
54 );
55
56 dev_class.insert(
57 COMPILED_KEY.to_string(),
58 Rc::new(FlatCompiledStylesValue::Bool(true)),
59 );
60
61 result.insert(key.clone(), Rc::new(dev_class));
62 }
63
64 result
65}
66
67fn namespace_to_dev_class_name(
68 namespace: &str,
69 var_name: &Option<String>,
70 filename: &str,
71) -> String {
72 let basename = Path::new(filename)
74 .file_stem()
75 .and_then(|os_str| os_str.to_str())
76 .unwrap_or_default();
77
78 let class_name = format!(
80 "{}__{}{}",
81 basename,
82 var_name
83 .as_ref()
84 .map(|var_name| format!("{}.", var_name))
85 .unwrap_or_default(),
86 namespace
87 );
88
89 SANITIZE_CLASS_NAME_REGEX
90 .replace_all(&class_name, "$1 $2")
91 .to_string()
92}
93
94fn convert_theme_to_base_styles(variable_name: &str, filename: &str) -> FlatCompiledStyles {
95 let mut overrides_obj_extended = IndexMap::new();
96
97 let basename = Path::new(filename)
99 .file_stem()
100 .and_then(|os_str| os_str.to_str())
101 .unwrap_or_default()
102 .split('.')
103 .next()
104 .unwrap_or_else(|| stylex_panic!("File path has no base name."));
105
106 let dev_class_name = format!("{}__{}", basename, variable_name);
108
109 overrides_obj_extended.insert(
110 dev_class_name.clone(),
111 Rc::new(FlatCompiledStylesValue::String(dev_class_name)),
112 );
113
114 overrides_obj_extended
115}
116
117pub(crate) fn convert_theme_to_dev_styles(
118 variable_name: &Option<String>,
119 overrides_obj: &FlatCompiledStyles,
120 filename: &str,
121) -> FlatCompiledStyles {
122 let variable_name_str = match variable_name.as_ref() {
123 Some(v) => v.as_str(),
124 None => stylex_panic!("The variable name could not be determined."),
125 };
126
127 let mut overrides_obj_extended = convert_theme_to_base_styles(variable_name_str, filename);
128
129 overrides_obj_extended.extend(overrides_obj.clone());
130
131 overrides_obj_extended
132}
133
134pub(crate) fn convert_theme_to_test_styles(
135 variable_name: &Option<String>,
136 overrides_obj: &FlatCompiledStyles,
137 filename: &str,
138) -> FlatCompiledStyles {
139 let mut overrides_obj_extended =
140 convert_theme_to_dev_styles(variable_name, overrides_obj, filename);
141
142 overrides_obj_extended.insert(
143 COMPILED_KEY.to_string(),
144 Rc::new(FlatCompiledStylesValue::Bool(true)),
145 );
146
147 overrides_obj_extended
148}