use serde::Deserialize;
#[inline]
fn default_as_true() -> bool {
true
}
#[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum JsxRuntime {
Classic,
#[default]
Automatic,
}
impl JsxRuntime {
pub fn is_classic(self) -> bool {
self == Self::Classic
}
pub fn is_automatic(self) -> bool {
self == Self::Automatic
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(default, rename_all = "camelCase", deny_unknown_fields)]
pub struct JsxOptions {
#[serde(skip)]
pub jsx_plugin: bool,
#[serde(skip)]
pub display_name_plugin: bool,
#[serde(skip)]
pub jsx_self_plugin: bool,
#[serde(skip)]
pub jsx_source_plugin: bool,
pub runtime: JsxRuntime,
pub development: bool,
#[serde(default = "default_as_true")]
pub throw_if_namespace: bool,
#[serde(default = "default_as_true")]
pub pure: bool,
#[serde(default)]
pub import_source: Option<String>,
#[serde(default)]
pub pragma: Option<String>,
#[serde(default)]
pub pragma_frag: Option<String>,
pub use_built_ins: Option<bool>,
pub use_spread: Option<bool>,
pub refresh: Option<ReactRefreshOptions>,
}
impl Default for JsxOptions {
fn default() -> Self {
Self::enable()
}
}
impl JsxOptions {
pub fn conform(&mut self) {
if self.development {
self.jsx_plugin = true;
self.jsx_self_plugin = true;
self.jsx_source_plugin = true;
}
}
pub fn enable() -> Self {
Self {
jsx_plugin: true,
display_name_plugin: true,
jsx_self_plugin: false,
jsx_source_plugin: false,
runtime: JsxRuntime::default(),
development: false,
throw_if_namespace: default_as_true(),
pure: default_as_true(),
import_source: None,
pragma: None,
pragma_frag: None,
use_built_ins: None,
use_spread: None,
refresh: None,
}
}
pub fn disable() -> Self {
Self {
jsx_plugin: false,
display_name_plugin: false,
jsx_self_plugin: false,
jsx_source_plugin: false,
runtime: JsxRuntime::default(),
development: false,
throw_if_namespace: false,
pure: false,
import_source: None,
pragma: None,
pragma_frag: None,
use_built_ins: None,
use_spread: None,
refresh: None,
}
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(default, rename_all = "camelCase", deny_unknown_fields)]
pub struct ReactRefreshOptions {
#[serde(default = "default_refresh_reg")]
pub refresh_reg: String,
#[serde(default = "default_refresh_sig")]
pub refresh_sig: String,
#[serde(default)]
pub emit_full_signatures: bool,
}
impl Default for ReactRefreshOptions {
fn default() -> Self {
Self {
refresh_reg: default_refresh_reg(),
refresh_sig: default_refresh_sig(),
emit_full_signatures: false,
}
}
}
fn default_refresh_reg() -> String {
String::from("$RefreshReg$")
}
fn default_refresh_sig() -> String {
String::from("$RefreshSig$")
}