@@ -24,8 +24,12 @@ mod swc_utils;
2424
2525use  crate :: { 
2626    hast_util_to_swc:: hast_util_to_swc as  to_swc, 
27-     mdx_plugin_recma_document:: { mdx_plugin_recma_document,  Options  as  DocumentOptions } , 
28-     mdx_plugin_recma_jsx_rewrite:: { mdx_plugin_recma_jsx_rewrite,  Options  as  RewriteOptions } , 
27+     mdx_plugin_recma_document:: { 
28+         mdx_plugin_recma_document as  wrap_document,  Options  as  DocumentOptions , 
29+     } , 
30+     mdx_plugin_recma_jsx_rewrite:: { 
31+         mdx_plugin_recma_jsx_rewrite as  jsx_rewrite,  Options  as  RewriteOptions , 
32+     } , 
2933    swc:: { parse_esm,  parse_expression,  serialize} , 
3034    swc_util_build_jsx:: { swc_util_build_jsx,  Options  as  BuildOptions } , 
3135} ; 
@@ -34,7 +38,7 @@ use markdown::{
3438    message:: { self ,  Message } , 
3539    to_mdast,  Constructs ,  Location ,  ParseOptions , 
3640} ; 
37- use  swc_core:: alloc:: collections:: FxHashSet ; 
41+ use  swc_core:: { alloc:: collections:: FxHashSet ,  common :: Span } ; 
3842
3943pub  use  crate :: configuration:: { MdxConstructs ,  MdxParseOptions ,  Options } ; 
4044pub  use  crate :: mdast_util_to_hast:: mdast_util_to_hast; 
@@ -60,7 +64,11 @@ pub use crate::mdx_plugin_recma_document::JsxRuntime;
6064pub  fn  compile ( value :  & str ,  options :  & Options )  -> Result < String ,  message:: Message >  { 
6165    let  mdast = mdast_util_from_mdx ( value,  options) ?; 
6266    let  hast = mdast_util_to_hast ( & mdast) ; 
63-     let  mut  program = hast_util_to_swc ( & hast,  value,  options) ?; 
67+     let  location = Location :: new ( value. as_bytes ( ) ) ; 
68+     let  mut  explicit_jsxs = FxHashSet :: default ( ) ; 
69+     let  mut  program = hast_util_to_swc ( & hast,  options,  Some ( & location) ,  & mut  explicit_jsxs) ?; 
70+     mdx_plugin_recma_document ( & mut  program,  & options,  Some ( & location) ) ?; 
71+     mdx_plugin_recma_jsx_rewrite ( & mut  program,  & options,  Some ( & location) ,  & explicit_jsxs) ?; 
6472    Ok ( serialize ( & mut  program. module ,  Some ( & program. comments ) ) ) 
6573} 
6674
@@ -137,43 +145,51 @@ pub fn mdast_util_from_mdx(
137145/// Compile hast into SWC’s ES AST. 
138146pub  fn  hast_util_to_swc ( 
139147    hast :  & hast:: Node , 
140-     value :  & str , 
141148    options :  & Options , 
149+     location :  Option < & Location > , 
150+     explicit_jsxs :  & mut  FxHashSet < Span > , 
142151)  -> Result < Program ,  markdown:: message:: Message >  { 
152+     to_swc ( & hast,  options. filepath . clone ( ) ,  location,  explicit_jsxs) 
153+ } 
154+ 
155+ /// Wrap the SWC ES AST nodes coming from hast into a whole document. 
156+ pub  fn  mdx_plugin_recma_document ( 
157+     program :  & mut  Program , 
158+     options :  & Options , 
159+     location :  Option < & Location > , 
160+ )  -> Result < ( ) ,  markdown:: message:: Message >  { 
143161    let  document_options = DocumentOptions  { 
144162        pragma :  options. pragma . clone ( ) , 
145163        pragma_frag :  options. pragma_frag . clone ( ) , 
146164        pragma_import_source :  options. pragma_import_source . clone ( ) , 
147165        jsx_import_source :  options. jsx_import_source . clone ( ) , 
148166        jsx_runtime :  options. jsx_runtime , 
149167    } ; 
168+     wrap_document ( program,  & document_options,  location) 
169+ } 
170+ 
171+ /// Rewrite JSX in an MDX file so that components can be passed in and provided. 
172+ /// Also compiles JSX to function calls unless `options.jsx` is true. 
173+ pub  fn  mdx_plugin_recma_jsx_rewrite ( 
174+     program :  & mut  Program , 
175+     options :  & Options , 
176+     location :  Option < & Location > , 
177+     explicit_jsxs :  & FxHashSet < Span > , 
178+ )  -> Result < ( ) ,  markdown:: message:: Message >  { 
150179    let  rewrite_options = RewriteOptions  { 
151180        development :  options. development , 
152181        provider_import_source :  options. provider_import_source . clone ( ) , 
153182    } ; 
154-     let  build_options = BuildOptions  { 
155-         development :  options. development , 
156-     } ; 
157183
158-     let  mut  explicit_jsxs = FxHashSet :: default ( ) ; 
159-     let  location = Location :: new ( value. as_bytes ( ) ) ; 
160-     let  mut  program = to_swc ( 
161-         & hast, 
162-         options. filepath . clone ( ) , 
163-         Some ( & location) , 
164-         & mut  explicit_jsxs, 
165-     ) ?; 
166-     mdx_plugin_recma_document ( & mut  program,  & document_options,  Some ( & location) ) ?; 
167-     mdx_plugin_recma_jsx_rewrite ( 
168-         & mut  program, 
169-         & rewrite_options, 
170-         Some ( & location) , 
171-         explicit_jsxs, 
172-     ) ; 
184+     jsx_rewrite ( program,  & rewrite_options,  location,  explicit_jsxs) ; 
173185
174186    if  !options. jsx  { 
175-         swc_util_build_jsx ( & mut  program,  & build_options,  Some ( & location) ) ?; 
187+         let  build_options = BuildOptions  { 
188+             development :  options. development , 
189+         } ; 
190+ 
191+         swc_util_build_jsx ( program,  & build_options,  location) ?; 
176192    } 
177193
178-     Ok ( program ) 
194+     Ok ( ( ) ) 
179195} 
0 commit comments