diff --git a/rewatch/src/build/packages.rs b/rewatch/src/build/packages.rs index f3a5871b1f..66171c30ad 100644 --- a/rewatch/src/build/packages.rs +++ b/rewatch/src/build/packages.rs @@ -839,6 +839,10 @@ impl Package { self.config.get_jsx_module_args() } + pub fn get_jsx_preserve_args(&self) -> Vec { + self.config.get_jsx_preserve_args() + } + pub fn get_uncurried_args(&self, version: &str, root_package: &packages::Package) -> Vec { root_package.config.get_uncurried_args(version) } diff --git a/rewatch/src/build/parse.rs b/rewatch/src/build/parse.rs index f4f49a28c3..e48892f791 100644 --- a/rewatch/src/build/parse.rs +++ b/rewatch/src/build/parse.rs @@ -272,6 +272,7 @@ pub fn parser_args( let jsx_args = root_config.get_jsx_args(); let jsx_module_args = root_config.get_jsx_module_args(); let jsx_mode_args = root_config.get_jsx_mode_args(); + let jsx_preserve_args = root_config.get_jsx_preserve_args(); let uncurried_args = root_config.get_uncurried_args(version); let bsc_flags = config::flatten_flags(&config.bsc_flags); @@ -285,6 +286,7 @@ pub fn parser_args( jsx_args, jsx_module_args, jsx_mode_args, + jsx_preserve_args, uncurried_args, bsc_flags, vec![ diff --git a/rewatch/src/config.rs b/rewatch/src/config.rs index d9706086ad..74ada7f70e 100644 --- a/rewatch/src/config.rs +++ b/rewatch/src/config.rs @@ -184,6 +184,7 @@ pub struct JsxSpecs { pub mode: Option, #[serde(rename = "v3-dependencies")] pub v3_dependencies: Option>, + pub preserve: Option, } /// We do not care about the internal structure because the gentype config is loaded by bsc. @@ -434,6 +435,16 @@ impl Config { } } + pub fn get_jsx_preserve_args(&self) -> Vec { + match self.jsx.to_owned() { + Some(jsx) => match jsx.preserve { + Some(true) => vec!["-bs-jsx-preserve".to_string()], + _ => vec![], + }, + _ => vec![], + } + } + pub fn get_uncurried_args(&self, version: &str) -> Vec { match check_if_rescript11_or_higher(version) { Ok(true) => match self.uncurried.to_owned() { @@ -614,6 +625,35 @@ mod tests { module: Some(JsxModule::Other(String::from("Voby.JSX"))), mode: None, v3_dependencies: None, + preserve: None, + }, + ); + } + + #[test] + fn test_jsx_preserve() { + let json = r#" + { + "name": "my-monorepo", + "sources": [ { "dir": "src/", "subdirs": true } ], + "package-specs": [ { "module": "es6", "in-source": true } ], + "suffix": ".mjs", + "pinned-dependencies": [ "@teamwalnut/app" ], + "bs-dependencies": [ "@teamwalnut/app" ], + "jsx": { "version": 4, "preserve": true } + } + "#; + + let config = serde_json::from_str::(json).unwrap(); + assert!(config.jsx.is_some()); + assert_eq!( + config.jsx.unwrap(), + JsxSpecs { + version: Some(4), + module: None, + mode: None, + v3_dependencies: None, + preserve: Some(true), }, ); }