stylex_compiler_rs/utils/
metadata.rs1#![allow(deprecated)]
2
3use napi::{Env, Error, JsObject};
4use stylex_transform::StyleXTransform;
5use stylex_types::enums::data_structures::injectable_style::InjectableStyleBaseKind;
6use swc_core::plugin::proxies::PluginCommentsProxy;
7
8pub(crate) fn extract_stylex_metadata(
10 env: Env,
11 stylex: &StyleXTransform<PluginCommentsProxy>,
12) -> Result<Vec<JsObject>, Error> {
13 let mut stylex_metadata = Vec::with_capacity(stylex.state.metadata.len());
14
15 for value in stylex.state.metadata.values() {
16 for meta in value {
17 let mut metadata_value = env.create_array_with_length(3)?;
18
19 metadata_value.set_element(0, env.create_string(meta.get_class_name())?)?;
20
21 let mut style_value = env.create_object()?;
22 let styles = meta.get_style();
23
24 match styles {
25 InjectableStyleBaseKind::Regular(styles) => {
26 set_metadata_ltr_and_rtl(env, &mut style_value, &styles.ltr, &styles.rtl, None, None)?;
27 },
28 InjectableStyleBaseKind::Const(styles) => {
29 set_metadata_ltr_and_rtl(
30 env,
31 &mut style_value,
32 &styles.ltr,
33 &styles.rtl,
34 Some(&styles.const_key),
35 Some(&styles.const_value),
36 )?;
37 },
38 }
39
40 metadata_value.set_element(1, style_value)?;
41 metadata_value.set_element(2, env.create_double(*meta.get_priority())?)?;
42
43 stylex_metadata.push(metadata_value);
44 }
45 }
46
47 Ok(stylex_metadata)
48}
49
50fn set_metadata_ltr_and_rtl(
52 env: Env,
53 style_value: &mut JsObject,
54 ltr: &str,
55 rtl: &Option<String>,
56 consts_key: Option<&str>,
57 consts_value: Option<&str>,
58) -> Result<(), Error> {
59 if let Some(consts_key) = consts_key {
60 style_value.set_named_property("constKey", consts_key)?;
61 }
62
63 if let Some(consts_value) = consts_value {
64 style_value.set_named_property("constVal", consts_value)?;
65 }
66
67 style_value.set_named_property("ltr", ltr)?;
68
69 let rtl_value = rtl.as_ref().map(|v| env.create_string(v)).transpose()?;
70 style_value.set_named_property("rtl", rtl_value)?;
71
72 Ok(())
73}