From aba9194ebcb9b90d2b357adb404ccfdfed937677 Mon Sep 17 00:00:00 2001 From: underfin Date: Sun, 8 Sep 2024 08:42:17 +0800 Subject: [PATCH] feat(napi/transform): export react refresh options (#5533) Co-authored-by: Boshen --- napi/transform/index.d.ts | 18 ++++++++++++++++++ napi/transform/src/options.rs | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/napi/transform/index.d.ts b/napi/transform/index.d.ts index e26b814f2f55b..c7081c9d3f350 100644 --- a/napi/transform/index.d.ts +++ b/napi/transform/index.d.ts @@ -113,6 +113,24 @@ export interface ReactBindingOptions { * @default false */ useSpread?: boolean + /** Enable react fast refresh transform */ + refresh?: ReactRefreshBindingOptions +} + +export interface ReactRefreshBindingOptions { + /** + * Specify the identifier of the refresh registration variable. + * + * @default `$RefreshReg$`. + */ + refreshReg?: string + /** + * Specify the identifier of the refresh signature variable. + * + * @default `$RefreshSig$`. + */ + refreshSig?: string + emitFullSignatures?: boolean } export interface SourceMap { diff --git a/napi/transform/src/options.rs b/napi/transform/src/options.rs index dfe8cce1f620a..b07a71e916a50 100644 --- a/napi/transform/src/options.rs +++ b/napi/transform/src/options.rs @@ -3,8 +3,8 @@ use std::path::PathBuf; use napi::Either; use napi_derive::napi; use oxc_transformer::{ - ArrowFunctionsOptions, ES2015Options, ReactJsxRuntime, ReactOptions, RewriteExtensionsMode, - TypeScriptOptions, + ArrowFunctionsOptions, ES2015Options, ReactJsxRuntime, ReactOptions, ReactRefreshOptions, + RewriteExtensionsMode, TypeScriptOptions, }; #[napi(object)] @@ -140,6 +140,9 @@ pub struct ReactBindingOptions { /// /// @default false pub use_spread: Option, + + /// Enable react fast refresh transform + pub refresh: Option, } impl From for ReactOptions { @@ -158,11 +161,38 @@ impl From for ReactOptions { pragma_frag: options.pragma_frag, use_built_ins: options.use_built_ins, use_spread: options.use_spread, + refresh: ops.refresh.map(Into::into), ..Default::default() } } } +#[napi(object)] +pub struct ReactRefreshBindingOptions { + /// Specify the identifier of the refresh registration variable. + /// + /// @default `$RefreshReg$`. + pub refresh_reg: Option, + + /// Specify the identifier of the refresh signature variable. + /// + /// @default `$RefreshSig$`. + pub refresh_sig: Option, + + pub emit_full_signatures: Option, +} + +impl From for ReactRefreshOptions { + fn from(options: ReactRefreshBindingOptions) -> Self { + let ops = ReactRefreshOptions::default(); + ReactRefreshOptions { + refresh_reg: options.refresh_reg.unwrap_or(ops.refresh_reg), + refresh_sig: options.refresh_sig.unwrap_or(ops.refresh_sig), + emit_full_signatures: options.emit_full_signatures.unwrap_or(ops.emit_full_signatures), + } + } +} + #[napi(object)] pub struct ArrowFunctionsBindingOptions { /// This option enables the following: