swc_core/
lib.rs

1#![cfg_attr(docsrs, feature(doc_cfg))]
2
3pub extern crate swc_allocator as alloc;
4
5#[cfg(feature = "swc_atoms")]
6#[cfg_attr(docsrs, doc(cfg(feature = "swc_atoms")))]
7pub use swc_atoms as atoms;
8
9// Quote
10#[cfg(feature = "ecma_quote")]
11#[cfg_attr(docsrs, doc(cfg(feature = "ecma_quote")))]
12pub mod quote;
13
14/// Not a public interface.
15#[cfg(feature = "ecma_quote")]
16#[cfg_attr(docsrs, doc(cfg(feature = "ecma_quote")))]
17#[doc(hidden)]
18pub extern crate swc_ecma_quote_macros;
19
20// Plugins
21#[cfg(any(
22    all(
23        docsrs,
24        any(
25            feature = "__common_plugin_transform",
26            feature = "__plugin_transform_host"
27        )
28    ),
29    feature = "__common_plugin_transform",
30    feature = "__plugin_transform_host"
31))]
32#[cfg_attr(
33    docsrs,
34    doc(cfg(any(
35        feature = "__common_plugin_transform",
36        feature = "__plugin_transform_host"
37    )))
38)]
39pub mod plugin;
40
41#[cfg(feature = "__ecma")]
42#[cfg_attr(docsrs, doc(cfg(feature = "__ecma")))]
43pub mod ecma {
44    #[cfg(feature = "ecma_ast")]
45    #[cfg_attr(docsrs, doc(cfg(feature = "ecma_ast")))]
46    pub mod ast {
47        pub use swc_ecma_ast::*;
48    }
49    #[cfg(feature = "ecma_ast")]
50    #[cfg_attr(docsrs, doc(cfg(feature = "ecma_ast")))]
51    pub mod atoms {
52        pub use swc_atoms::*;
53    }
54    // swc_ecma_transforms
55    #[cfg(any(feature = "__ecma_transforms", feature = "__testing_transform"))]
56    #[cfg_attr(
57        docsrs,
58        doc(cfg(any(feature = "__ecma_transforms", feature = "__testing_transform")))
59    )]
60    pub mod transforms {
61        pub mod base {
62            pub use swc_ecma_transforms_base::*;
63        }
64        #[cfg(feature = "ecma_transforms_optimization")]
65        #[cfg_attr(docsrs, doc(cfg(feature = "transforms_optimization")))]
66        pub mod optimization {
67            pub use swc_ecma_transforms_optimization::*;
68        }
69        #[cfg(feature = "ecma_transforms_react")]
70        #[cfg_attr(docsrs, doc(cfg(feature = "transforms_react")))]
71        pub mod react {
72            pub use swc_ecma_transforms_react::*;
73        }
74        #[cfg(feature = "ecma_transforms_typescript")]
75        #[cfg_attr(docsrs, doc(cfg(feature = "transforms_typescript")))]
76        pub mod typescript {
77            pub use swc_ecma_transforms_typescript::*;
78        }
79        #[cfg(feature = "ecma_transforms_module")]
80        #[cfg_attr(docsrs, doc(cfg(feature = "transforms_module")))]
81        pub mod module {
82            pub use swc_ecma_transforms_module::*;
83        }
84        #[cfg(feature = "ecma_transforms_proposal")]
85        #[cfg_attr(docsrs, doc(cfg(feature = "transforms_proposal")))]
86        pub mod proposal {
87            pub use swc_ecma_transforms_proposal::*;
88        }
89        #[cfg(feature = "ecma_transforms_compat")]
90        #[cfg_attr(docsrs, doc(cfg(feature = "transforms_compat")))]
91        pub mod compat {
92            pub use swc_ecma_transforms_compat::*;
93        }
94        #[cfg(feature = "__testing_transform")]
95        #[cfg_attr(docsrs, doc(cfg(feature = "__testing_transform")))]
96        pub mod testing {
97            pub use swc_ecma_transforms_testing::*;
98        }
99    }
100
101    // swc_ecma_loader
102    #[cfg(feature = "__ecma_loader")]
103    #[cfg_attr(docsrs, doc(cfg(feature = "__ecma_loader")))]
104    pub mod loader {
105        pub use swc_ecma_loader::*;
106    }
107
108    #[cfg(feature = "__parser")]
109    #[cfg_attr(docsrs, doc(cfg(feature = "__parser")))]
110    pub mod parser {
111        pub use swc_ecma_parser::*;
112    }
113
114    #[cfg(feature = "ecma_codegen")]
115    #[cfg_attr(docsrs, doc(cfg(feature = "ecma_codegen")))]
116    pub mod codegen {
117        pub use swc_ecma_codegen::*;
118    }
119
120    #[cfg(feature = "ecma_minifier")]
121    #[cfg_attr(docsrs, doc(cfg(feature = "ecma_minifier")))]
122    pub mod minifier {
123        pub use swc_ecma_minifier::*;
124    }
125
126    #[cfg(feature = "ecma_preset_env")]
127    #[cfg_attr(docsrs, doc(cfg(feature = "ecma_preset_env")))]
128    pub mod preset_env {
129        pub use swc_ecma_preset_env::*;
130    }
131
132    #[cfg(feature = "ecma_usage_analyzer")]
133    #[cfg_attr(docsrs, doc(cfg(feature = "ecma_usage_analyzer")))]
134    pub mod usage_analyzer {
135        pub use swc_ecma_usage_analyzer::*;
136    }
137
138    // visit* interfaces
139    #[cfg(feature = "ecma_lints")]
140    #[cfg_attr(docsrs, doc(cfg(feature = "ecma_lints")))]
141    pub mod lints {
142        pub use swc_ecma_lints::*;
143    }
144
145    // visit* interfaces
146    #[cfg(feature = "__visit")]
147    #[cfg_attr(docsrs, doc(cfg(feature = "__visit")))]
148    pub mod visit {
149        pub use swc_ecma_visit::*;
150    }
151
152    #[cfg(feature = "__utils")]
153    #[cfg_attr(docsrs, doc(cfg(feature = "__utils")))]
154    pub mod utils {
155        pub use swc_ecma_utils::*;
156    }
157
158    #[cfg(feature = "swc_ecma_react_compiler")]
159    #[cfg_attr(docsrs, doc(cfg(feature = "swc_ecma_react_compiler")))]
160    pub extern crate swc_ecma_react_compiler as react_compiler;
161}
162
163// swc features
164#[cfg(feature = "__base")]
165#[cfg_attr(docsrs, doc(cfg(feature = "__base")))]
166pub mod base {
167    pub use swc::*;
168}
169
170// swc_common features
171#[cfg(feature = "__common")]
172#[cfg_attr(docsrs, doc(cfg(feature = "__common")))]
173pub mod common {
174    pub use swc_common::*;
175}
176
177// swc_plugin_runner
178#[cfg(feature = "__plugin_transform_host")]
179#[cfg_attr(docsrs, doc(cfg(feature = "__plugin_transform_host")))]
180pub mod plugin_runner {
181    pub use swc_plugin_runner::*;
182}
183
184// swc_trace_macro
185#[cfg(feature = "trace_macro")]
186#[cfg_attr(docsrs, doc(cfg(feature = "trace_macro")))]
187pub mod trace_macro {
188    pub use swc_trace_macro::*;
189}
190
191#[cfg(feature = "transform_common")]
192#[cfg_attr(docsrs, doc(cfg(feature = "transform_common")))]
193pub extern crate swc_transform_common as transform_common;
194
195#[cfg(feature = "typescript")]
196#[cfg_attr(docsrs, doc(cfg(feature = "typescript")))]
197pub mod typescript {
198    pub use swc_typescript::*;
199}
200
201// swc_bundler
202#[cfg(feature = "__bundler")]
203#[cfg_attr(docsrs, doc(cfg(feature = "__bundler")))]
204pub mod bundler {
205    pub use swc_bundler::*;
206
207    #[cfg(any(feature = "bundler_node_v1", feature = "bundler_node_v2"))]
208    #[cfg_attr(
209        docsrs,
210        doc(cfg(any(feature = "bundler_node_v1", feature = "bundler_node_v2")))
211    )]
212    pub mod node {
213        pub use swc_node_bundler::*;
214    }
215}
216
217#[cfg(feature = "__binding_macros")]
218#[cfg_attr(docsrs, doc(cfg(feature = "__binding_macros")))]
219pub mod binding_macros {
220    pub use binding_macros::*;
221}
222
223#[cfg(feature = "base_node")]
224#[cfg_attr(docsrs, doc(cfg(feature = "base_node")))]
225pub mod node {
226    pub use swc_nodejs_common::*;
227}
228
229#[cfg(feature = "__css")]
230#[cfg_attr(docsrs, doc(cfg(feature = "__css")))]
231pub mod css {
232    #[cfg(feature = "css_ast")]
233    #[cfg_attr(docsrs, doc(cfg(feature = "css_ast")))]
234    pub mod ast {
235        pub use swc_css_ast::*;
236    }
237
238    #[cfg(feature = "css_modules")]
239    #[cfg_attr(docsrs, doc(cfg(feature = "css_modules")))]
240    pub mod modules {
241        pub use swc_css_modules::*;
242    }
243
244    #[cfg(feature = "css_codegen")]
245    #[cfg_attr(docsrs, doc(cfg(feature = "css_codegen")))]
246    pub mod codegen {
247        pub use swc_css_codegen::*;
248    }
249
250    #[cfg(feature = "css_compat")]
251    #[cfg_attr(docsrs, doc(cfg(feature = "css_compat")))]
252    pub mod compat {
253        pub use swc_css_compat::*;
254    }
255
256    #[cfg(feature = "css_minifier")]
257    #[cfg_attr(docsrs, doc(cfg(feature = "css_minifier")))]
258    pub mod minifier {
259        pub use swc_css_minifier::*;
260    }
261
262    #[cfg(feature = "css_parser")]
263    #[cfg_attr(docsrs, doc(cfg(feature = "css_parser")))]
264    pub mod parser {
265        pub use swc_css_parser::*;
266    }
267
268    #[cfg(feature = "css_utils")]
269    #[cfg_attr(docsrs, doc(cfg(feature = "css_utils")))]
270    pub mod utils {
271        pub use swc_css_utils::*;
272    }
273
274    #[cfg(feature = "css_visit")]
275    #[cfg_attr(docsrs, doc(cfg(feature = "css_visit")))]
276    pub mod visit {
277        pub use swc_css_visit::*;
278    }
279
280    #[cfg(feature = "css_prefixer")]
281    #[cfg_attr(docsrs, doc(cfg(feature = "css_prefixer")))]
282    pub mod prefixer {
283        pub use swc_css_prefixer::*;
284    }
285}
286
287#[cfg_attr(docsrs, doc(cfg(feature = "swc_config")))]
288#[cfg(feature = "swc_config")]
289pub extern crate swc_config as config;
290
291// This reexports generic testing utilities only.
292// For the feature-specific (i.e ecma_transform_testing), need to enable
293// Corresponding features instead.
294#[cfg(feature = "testing")]
295#[cfg_attr(docsrs, doc(cfg(feature = "testing")))]
296pub mod testing {
297    pub use testing::*;
298}
299
300#[cfg(feature = "allocator_node")]
301#[cfg_attr(docsrs, doc(cfg(feature = "allocator_node")))]
302extern crate swc_malloc;
303
304pub static SWC_CORE_VERSION: &str = include_str!(concat!(env!("OUT_DIR"), "/core_pkg_version.txt"));
305
306mod __diagnostics;
307pub mod diagnostics {
308    use crate::__diagnostics::{GIT_SHA, PKG_SEMVER_FALLBACK};
309
310    #[derive(Debug)]
311    pub struct CoreEngineDiagnostics {
312        /// Semver package version of swc_core.
313        pub package_semver: String,
314        /// Commit sha of swc_core built against.
315        pub git_sha: String,
316        /// List of features enabled
317        pub cargo_features: String,
318    }
319
320    /// Returns metadata about the swc_core engine that was built against.
321    pub fn get_core_engine_diagnostics() -> CoreEngineDiagnostics {
322        CoreEngineDiagnostics {
323            package_semver: option_env!("VERGEN_BUILD_SEMVER")
324                .unwrap_or_else(|| PKG_SEMVER_FALLBACK)
325                .to_string(),
326            git_sha: GIT_SHA.to_string(),
327            cargo_features: option_env!("VERGEN_CARGO_FEATURES")
328                .unwrap_or_else(|| "Unavailable to query")
329                .to_string(),
330        }
331    }
332}