swc_plugin_inferno/
lib.rs1#![deny(clippy::all)]
2#![allow(clippy::arc_with_non_send_sync)]
3
4pub use self::{
5 jsx::*,
6 pure_annotations::pure_annotations,
7 refresh::{options::RefreshOptions, refresh},
8};
9use swc_core::ecma::ast::Pass;
10use swc_core::{
11 common::{comments::Comments, sync::Lrc, Mark, SourceMap},
12 ecma::ast::Program,
13 plugin::{plugin_transform, proxies::TransformPluginProgramMetadata},
14};
15
16mod inferno_flags;
17mod jsx;
18mod pure_annotations;
19mod refresh;
20mod transformations;
21
22pub fn inferno<C>(
32 cm: Lrc<SourceMap>,
33 comments: Option<C>,
34 mut options: Options,
35 top_level_mark: Mark,
36 unresolved_mark: Mark,
37) -> impl Pass
38where
39 C: Comments + Clone,
40{
41 let Options { development, .. } = options;
42 let development = development.unwrap_or(false);
43
44 let refresh_options = options.refresh.take();
45
46 (
47 refresh(
48 development,
49 refresh_options,
50 cm.clone(),
51 comments.clone(),
52 top_level_mark,
53 ),
54 jsx(comments.clone(), options, unresolved_mark),
55 pure_annotations(comments),
56 )
57}
58
59#[plugin_transform]
60fn inferno_jsx_plugin(program: Program, metadata: TransformPluginProgramMetadata) -> Program {
61 let top_level_mark = Mark::new();
62
63 let cm = Lrc::new(SourceMap::default());
65
66 program.apply(&mut inferno(
67 cm,
68 Some(&metadata.comments),
69 Default::default(),
70 top_level_mark,
71 metadata.unresolved_mark,
72 ))
73}