swc_plugin_proxy/metadata/
transform_plugin_metadata.rs1#[cfg(feature = "__plugin_mode")]
2use swc_common::Mark;
3#[cfg(feature = "__plugin_mode")]
4use swc_trace_macro::swc_trace;
5
6#[cfg(all(feature = "__rkyv", feature = "__plugin_mode", target_arch = "wasm32"))]
7use crate::memory_interop::read_returned_result_from_host;
8#[cfg(feature = "__plugin_mode")]
9#[cfg_attr(not(target_arch = "wasm32"), allow(unused))]
10use crate::{PluginCommentsProxy, PluginSourceMapProxy};
11
12#[cfg(feature = "__plugin_mode")]
16#[derive(Debug)]
17pub struct TransformPluginProgramMetadata {
18 pub comments: Option<PluginCommentsProxy>,
22 pub source_map: PluginSourceMapProxy,
26 pub unresolved_mark: Mark,
27}
28
29#[cfg(target_arch = "wasm32")] extern "C" {
31 fn __copy_context_key_to_host_env(bytes_ptr: u32, bytes_ptr_len: u32);
32 fn __get_transform_plugin_config(allocated_ret_ptr: u32) -> u32;
33 fn __get_transform_context(key: u32, allocated_ret_ptr: u32) -> i32;
34 fn __get_experimental_transform_context(allocated_ret_ptr: u32) -> u32;
35 fn __get_raw_experiemtal_transform_context(allocated_ret_ptr: u32) -> u32;
36}
37
38#[cfg(feature = "__plugin_mode")]
39#[swc_trace]
40impl TransformPluginProgramMetadata {
41 pub fn get_transform_plugin_config(&self) -> Option<String> {
44 #[cfg(target_arch = "wasm32")]
45 return read_returned_result_from_host(|serialized_ptr| unsafe {
46 __get_transform_plugin_config(serialized_ptr)
47 });
48
49 #[cfg(not(target_arch = "wasm32"))]
50 None
51 }
52
53 #[cfg_attr(not(target_arch = "wasm32"), allow(unused))]
55 pub fn get_context(
56 &self,
57 key: &swc_common::plugin::metadata::TransformPluginMetadataContextKind,
58 ) -> Option<String> {
59 #[cfg(target_arch = "wasm32")]
60 return read_returned_result_from_host(|serialized_ptr| unsafe {
61 __get_transform_context(*key as u32, serialized_ptr) as u32
62 });
63
64 #[cfg(not(target_arch = "wasm32"))]
65 None
66 }
67
68 #[cfg_attr(not(target_arch = "wasm32"), allow(unused))]
78 pub fn get_experimental_context(&self, key: &str) -> Option<String> {
79 #[cfg(target_arch = "wasm32")]
80 return read_returned_result_from_host(|serialized_ptr| unsafe {
81 let serialized = swc_common::plugin::serialized::PluginSerializedBytes::try_serialize(
82 &swc_common::plugin::serialized::VersionedSerializable::new(key.to_string()),
83 )
84 .expect("Should be serializable");
85 let (key_ptr, key_ptr_len) = serialized.as_ptr();
86 __copy_context_key_to_host_env(key_ptr as u32, key_ptr_len as u32);
87
88 __get_experimental_transform_context(serialized_ptr)
89 });
90
91 #[cfg(not(target_arch = "wasm32"))]
92 None
93 }
94
95 #[allow(unreachable_code)]
101 pub fn get_raw_experimental_context(&self) -> rustc_hash::FxHashMap<String, String> {
102 unimplemented!("Not supported yet");
104
105 #[cfg(target_arch = "wasm32")]
106 return read_returned_result_from_host(|serialized_ptr| unsafe {
107 __get_raw_experiemtal_transform_context(serialized_ptr)
108 })
109 .expect("Raw experimental metadata should exists, even if it's empty map");
110
111 #[cfg(not(target_arch = "wasm32"))]
112 rustc_hash::FxHashMap::default()
113 }
114}