From 0f93a8c8bc46dce445c50e72ca365498050ba202 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Jun 2025 09:02:55 +0000 Subject: [PATCH 1/7] Initial plan for issue From 786c1037ddb0efb013f7576139eae782eaac0243 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Jun 2025 09:13:36 +0000 Subject: [PATCH 2/7] Add Fast Refresh style update test for View component Co-authored-by: anupriya13 <54227869+anupriya13@users.noreply.github.com> --- .../js/examples/View/ViewExample.windows.js | 46 +++++++++++++++++++ .../test/ViewComponentTest.test.ts | 28 +++++++++++ 2 files changed, 74 insertions(+) diff --git a/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js b/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js index d9117c9f404..4ce3ee4b304 100644 --- a/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js @@ -671,6 +671,45 @@ function BoxSizingExample(): React.Node { ); } +class FastRefreshStyleExample extends React.Component< + $ReadOnly<{||}>, + {|currentStyle: number|}, +> { + state: {currentStyle: number} = { + currentStyle: 0, + }; + + styles = [ + {backgroundColor: '#ff6b6b', padding: 20, borderRadius: 5}, + {backgroundColor: '#4ecdc4', padding: 15, borderRadius: 10}, + {backgroundColor: '#45b7d1', padding: 25, borderRadius: 15}, + {backgroundColor: '#96ceb4', padding: 10, borderRadius: 20}, + ]; + + render(): React.Node { + return ( + + + + + Tap to change style (simulates fast refresh) + + + Style: {this.state.currentStyle + 1} of {this.styles.length} + + + + + ); + } + + _handlePress = () => { + this.setState({ + currentStyle: (this.state.currentStyle + 1) % this.styles.length, + }); + }; +} + export default ({ title: 'View', documentationURL: 'https://reactnative.dev/docs/view', @@ -1404,6 +1443,13 @@ export default ({ return ; }, }, + { + title: 'Fast Refresh Style Updates', + name: 'fast-refresh', + render(): React.Node { + return ; + }, + }, { title: 'ToolTip', render(): React.Node { diff --git a/packages/e2e-test-app-fabric/test/ViewComponentTest.test.ts b/packages/e2e-test-app-fabric/test/ViewComponentTest.test.ts index 4b6e7574fe6..16cf30b1b51 100644 --- a/packages/e2e-test-app-fabric/test/ViewComponentTest.test.ts +++ b/packages/e2e-test-app-fabric/test/ViewComponentTest.test.ts @@ -199,4 +199,32 @@ describe('View Tests', () => { const dump = await dumpVisualTree('nativeid'); expect(dump).toMatchSnapshot(); }); + test('Views should update style upon fast refresh', async () => { + await searchBox('fas'); + const componentsTab = await app.findElementByTestID('view-test-fast-refresh'); + await componentsTab.waitForDisplayed({timeout: 5000}); + + // Take initial snapshot + const initialDump = await dumpVisualTree('view-test-fast-refresh'); + expect(initialDump).toMatchSnapshot('initial-state'); + + // Click to change style (simulating fast refresh behavior) + await componentsTab.click(); + + // Wait a moment for the style change to apply + await app.waitUntil( + async () => { + const currentDump = await dumpVisualTree('view-test-fast-refresh'); + return currentDump !== initialDump; + }, + { + timeout: 3000, + timeoutMsg: 'View style did not update after interaction', + } + ); + + // Take snapshot after style change + const updatedDump = await dumpVisualTree('view-test-fast-refresh'); + expect(updatedDump).toMatchSnapshot('updated-state'); + }); }); From e0f1425680537b3179071e8f4a227e89fecf20c5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Jun 2025 09:17:55 +0000 Subject: [PATCH 3/7] Fix Flow type annotations for FastRefreshStyleExample Co-authored-by: anupriya13 <54227869+anupriya13@users.noreply.github.com> --- .../tester/src/js/examples/View/ViewExample.windows.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js b/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js index 4ce3ee4b304..ef2cbd4203f 100644 --- a/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js @@ -672,8 +672,8 @@ function BoxSizingExample(): React.Node { } class FastRefreshStyleExample extends React.Component< - $ReadOnly<{||}>, - {|currentStyle: number|}, + $ReadOnly<{}>, + {currentStyle: number}, > { state: {currentStyle: number} = { currentStyle: 0, From 22afefe79d9bdd674973ef5ec2518ae3880280ab Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Jun 2025 09:32:37 +0000 Subject: [PATCH 4/7] Update generated codegen files after yarn install Co-authored-by: anupriya13 <54227869+anupriya13@users.noreply.github.com> --- vnext/codegen/rnwcoreJSI-generated.cpp | 112 +-- vnext/codegen/rnwcoreJSI.h | 1034 ++++++++++++------------ 2 files changed, 573 insertions(+), 573 deletions(-) diff --git a/vnext/codegen/rnwcoreJSI-generated.cpp b/vnext/codegen/rnwcoreJSI-generated.cpp index 75de3b43ef4..9c12f2f7882 100644 --- a/vnext/codegen/rnwcoreJSI-generated.cpp +++ b/vnext/codegen/rnwcoreJSI-generated.cpp @@ -952,41 +952,6 @@ NativeAnimatedTurboModuleCxxSpecJSI::NativeAnimatedTurboModuleCxxSpecJSI(std::sh methodMap_["removeListeners"] = MethodMetadata {1, __hostFunction_NativeAnimatedTurboModuleCxxSpecJSI_removeListeners}; methodMap_["queueAndExecuteBatchedOperations"] = MethodMetadata {1, __hostFunction_NativeAnimatedTurboModuleCxxSpecJSI_queueAndExecuteBatchedOperations}; } -static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_getColorScheme(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { - auto result = static_cast(&turboModule)->getColorScheme( - rt - ); - return result ? jsi::Value(std::move(*result)) : jsi::Value::null(); -} -static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_setColorScheme(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { - static_cast(&turboModule)->setColorScheme( - rt, - count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt) - ); - return jsi::Value::undefined(); -} -static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_addListener(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { - static_cast(&turboModule)->addListener( - rt, - count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt) - ); - return jsi::Value::undefined(); -} -static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_removeListeners(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { - static_cast(&turboModule)->removeListeners( - rt, - count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asNumber() - ); - return jsi::Value::undefined(); -} - -NativeAppearanceCxxSpecJSI::NativeAppearanceCxxSpecJSI(std::shared_ptr jsInvoker) - : TurboModule("Appearance", jsInvoker) { - methodMap_["getColorScheme"] = MethodMetadata {0, __hostFunction_NativeAppearanceCxxSpecJSI_getColorScheme}; - methodMap_["setColorScheme"] = MethodMetadata {1, __hostFunction_NativeAppearanceCxxSpecJSI_setColorScheme}; - methodMap_["addListener"] = MethodMetadata {1, __hostFunction_NativeAppearanceCxxSpecJSI_addListener}; - methodMap_["removeListeners"] = MethodMetadata {1, __hostFunction_NativeAppearanceCxxSpecJSI_removeListeners}; -} static jsi::Value __hostFunction_NativeAppStateCxxSpecJSI_getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { return static_cast(&turboModule)->getConstants( rt @@ -1032,6 +997,41 @@ NativeAppThemeCxxSpecJSI::NativeAppThemeCxxSpecJSI(std::shared_ptr : TurboModule("AppTheme", jsInvoker) { methodMap_["getConstants"] = MethodMetadata {0, __hostFunction_NativeAppThemeCxxSpecJSI_getConstants}; } +static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_getColorScheme(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + auto result = static_cast(&turboModule)->getColorScheme( + rt + ); + return result ? jsi::Value(std::move(*result)) : jsi::Value::null(); +} +static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_setColorScheme(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + static_cast(&turboModule)->setColorScheme( + rt, + count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt) + ); + return jsi::Value::undefined(); +} +static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_addListener(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + static_cast(&turboModule)->addListener( + rt, + count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt) + ); + return jsi::Value::undefined(); +} +static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_removeListeners(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + static_cast(&turboModule)->removeListeners( + rt, + count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asNumber() + ); + return jsi::Value::undefined(); +} + +NativeAppearanceCxxSpecJSI::NativeAppearanceCxxSpecJSI(std::shared_ptr jsInvoker) + : TurboModule("Appearance", jsInvoker) { + methodMap_["getColorScheme"] = MethodMetadata {0, __hostFunction_NativeAppearanceCxxSpecJSI_getColorScheme}; + methodMap_["setColorScheme"] = MethodMetadata {1, __hostFunction_NativeAppearanceCxxSpecJSI_setColorScheme}; + methodMap_["addListener"] = MethodMetadata {1, __hostFunction_NativeAppearanceCxxSpecJSI_addListener}; + methodMap_["removeListeners"] = MethodMetadata {1, __hostFunction_NativeAppearanceCxxSpecJSI_removeListeners}; +} static jsi::Value __hostFunction_NativeBlobModuleCxxSpecJSI_getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { return static_cast(&turboModule)->getConstants( rt @@ -1135,27 +1135,6 @@ NativeClipboardCxxSpecJSI::NativeClipboardCxxSpecJSI(std::shared_ptr(&turboModule)->invokeDefaultBackPressHandler( - rt - ); - return jsi::Value::undefined(); -} - -NativeDeviceEventManagerCxxSpecJSI::NativeDeviceEventManagerCxxSpecJSI(std::shared_ptr jsInvoker) - : TurboModule("DeviceEventManager", jsInvoker) { - methodMap_["invokeDefaultBackPressHandler"] = MethodMetadata {0, __hostFunction_NativeDeviceEventManagerCxxSpecJSI_invokeDefaultBackPressHandler}; -} -static jsi::Value __hostFunction_NativeDeviceInfoCxxSpecJSI_getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { - return static_cast(&turboModule)->getConstants( - rt - ); -} - -NativeDeviceInfoCxxSpecJSI::NativeDeviceInfoCxxSpecJSI(std::shared_ptr jsInvoker) - : TurboModule("DeviceInfo", jsInvoker) { - methodMap_["getConstants"] = MethodMetadata {0, __hostFunction_NativeDeviceInfoCxxSpecJSI_getConstants}; -} static jsi::Value __hostFunction_NativeDevLoadingViewCxxSpecJSI_showMessage(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { static_cast(&turboModule)->showMessage( rt, @@ -1299,6 +1278,27 @@ NativeDevSettingsCxxSpecJSI::NativeDevSettingsCxxSpecJSI(std::shared_ptr(&turboModule)->invokeDefaultBackPressHandler( + rt + ); + return jsi::Value::undefined(); +} + +NativeDeviceEventManagerCxxSpecJSI::NativeDeviceEventManagerCxxSpecJSI(std::shared_ptr jsInvoker) + : TurboModule("DeviceEventManager", jsInvoker) { + methodMap_["invokeDefaultBackPressHandler"] = MethodMetadata {0, __hostFunction_NativeDeviceEventManagerCxxSpecJSI_invokeDefaultBackPressHandler}; +} +static jsi::Value __hostFunction_NativeDeviceInfoCxxSpecJSI_getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + return static_cast(&turboModule)->getConstants( + rt + ); +} + +NativeDeviceInfoCxxSpecJSI::NativeDeviceInfoCxxSpecJSI(std::shared_ptr jsInvoker) + : TurboModule("DeviceInfo", jsInvoker) { + methodMap_["getConstants"] = MethodMetadata {0, __hostFunction_NativeDeviceInfoCxxSpecJSI_getConstants}; +} static jsi::Value __hostFunction_NativeDialogManagerAndroidCxxSpecJSI_getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { return static_cast(&turboModule)->getConstants( rt diff --git a/vnext/codegen/rnwcoreJSI.h b/vnext/codegen/rnwcoreJSI.h index d03a6000dbd..c19042048d1 100644 --- a/vnext/codegen/rnwcoreJSI.h +++ b/vnext/codegen/rnwcoreJSI.h @@ -1871,87 +1871,6 @@ class JSI_EXPORT NativeAnimatedTurboModuleCxxSpec : public TurboModule { }; - class JSI_EXPORT NativeAppearanceCxxSpecJSI : public TurboModule { -protected: - NativeAppearanceCxxSpecJSI(std::shared_ptr jsInvoker); - -public: - virtual std::optional getColorScheme(jsi::Runtime &rt) = 0; - virtual void setColorScheme(jsi::Runtime &rt, jsi::String colorScheme) = 0; - virtual void addListener(jsi::Runtime &rt, jsi::String eventName) = 0; - virtual void removeListeners(jsi::Runtime &rt, double count) = 0; - -}; - -template -class JSI_EXPORT NativeAppearanceCxxSpec : public TurboModule { -public: - jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { - return delegate_.create(rt, propName); - } - - std::vector getPropertyNames(jsi::Runtime& runtime) override { - return delegate_.getPropertyNames(runtime); - } - - static constexpr std::string_view kModuleName = "Appearance"; - -protected: - NativeAppearanceCxxSpec(std::shared_ptr jsInvoker) - : TurboModule(std::string{NativeAppearanceCxxSpec::kModuleName}, jsInvoker), - delegate_(reinterpret_cast(this), jsInvoker) {} - - -private: - class Delegate : public NativeAppearanceCxxSpecJSI { - public: - Delegate(T *instance, std::shared_ptr jsInvoker) : - NativeAppearanceCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { - - } - - std::optional getColorScheme(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::getColorScheme) == 1, - "Expected getColorScheme(...) to have 1 parameters"); - - return bridging::callFromJs>( - rt, &T::getColorScheme, jsInvoker_, instance_); - } - void setColorScheme(jsi::Runtime &rt, jsi::String colorScheme) override { - static_assert( - bridging::getParameterCount(&T::setColorScheme) == 2, - "Expected setColorScheme(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::setColorScheme, jsInvoker_, instance_, std::move(colorScheme)); - } - void addListener(jsi::Runtime &rt, jsi::String eventName) override { - static_assert( - bridging::getParameterCount(&T::addListener) == 2, - "Expected addListener(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::addListener, jsInvoker_, instance_, std::move(eventName)); - } - void removeListeners(jsi::Runtime &rt, double count) override { - static_assert( - bridging::getParameterCount(&T::removeListeners) == 2, - "Expected removeListeners(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::removeListeners, jsInvoker_, instance_, std::move(count)); - } - - private: - friend class NativeAppearanceCxxSpec; - T *instance_; - }; - - Delegate delegate_; -}; - - #pragma mark - NativeAppStateAppState @@ -2305,6 +2224,87 @@ class JSI_EXPORT NativeAppThemeCxxSpec : public TurboModule { }; + class JSI_EXPORT NativeAppearanceCxxSpecJSI : public TurboModule { +protected: + NativeAppearanceCxxSpecJSI(std::shared_ptr jsInvoker); + +public: + virtual std::optional getColorScheme(jsi::Runtime &rt) = 0; + virtual void setColorScheme(jsi::Runtime &rt, jsi::String colorScheme) = 0; + virtual void addListener(jsi::Runtime &rt, jsi::String eventName) = 0; + virtual void removeListeners(jsi::Runtime &rt, double count) = 0; + +}; + +template +class JSI_EXPORT NativeAppearanceCxxSpec : public TurboModule { +public: + jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { + return delegate_.create(rt, propName); + } + + std::vector getPropertyNames(jsi::Runtime& runtime) override { + return delegate_.getPropertyNames(runtime); + } + + static constexpr std::string_view kModuleName = "Appearance"; + +protected: + NativeAppearanceCxxSpec(std::shared_ptr jsInvoker) + : TurboModule(std::string{NativeAppearanceCxxSpec::kModuleName}, jsInvoker), + delegate_(reinterpret_cast(this), jsInvoker) {} + + +private: + class Delegate : public NativeAppearanceCxxSpecJSI { + public: + Delegate(T *instance, std::shared_ptr jsInvoker) : + NativeAppearanceCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { + + } + + std::optional getColorScheme(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::getColorScheme) == 1, + "Expected getColorScheme(...) to have 1 parameters"); + + return bridging::callFromJs>( + rt, &T::getColorScheme, jsInvoker_, instance_); + } + void setColorScheme(jsi::Runtime &rt, jsi::String colorScheme) override { + static_assert( + bridging::getParameterCount(&T::setColorScheme) == 2, + "Expected setColorScheme(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::setColorScheme, jsInvoker_, instance_, std::move(colorScheme)); + } + void addListener(jsi::Runtime &rt, jsi::String eventName) override { + static_assert( + bridging::getParameterCount(&T::addListener) == 2, + "Expected addListener(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::addListener, jsInvoker_, instance_, std::move(eventName)); + } + void removeListeners(jsi::Runtime &rt, double count) override { + static_assert( + bridging::getParameterCount(&T::removeListeners) == 2, + "Expected removeListeners(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::removeListeners, jsInvoker_, instance_, std::move(count)); + } + + private: + friend class NativeAppearanceCxxSpec; + T *instance_; + }; + + Delegate delegate_; +}; + + #pragma mark - NativeBlobModuleConstants @@ -2595,17 +2595,18 @@ class JSI_EXPORT NativeClipboardCxxSpec : public TurboModule { }; - class JSI_EXPORT NativeDeviceEventManagerCxxSpecJSI : public TurboModule { + class JSI_EXPORT NativeDevLoadingViewCxxSpecJSI : public TurboModule { protected: - NativeDeviceEventManagerCxxSpecJSI(std::shared_ptr jsInvoker); + NativeDevLoadingViewCxxSpecJSI(std::shared_ptr jsInvoker); public: - virtual void invokeDefaultBackPressHandler(jsi::Runtime &rt) = 0; + virtual void showMessage(jsi::Runtime &rt, jsi::String message, std::optional withColor, std::optional withBackgroundColor) = 0; + virtual void hide(jsi::Runtime &rt) = 0; }; template -class JSI_EXPORT NativeDeviceEventManagerCxxSpec : public TurboModule { +class JSI_EXPORT NativeDevLoadingViewCxxSpec : public TurboModule { public: jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { return delegate_.create(rt, propName); @@ -2615,33 +2616,41 @@ class JSI_EXPORT NativeDeviceEventManagerCxxSpec : public TurboModule { return delegate_.getPropertyNames(runtime); } - static constexpr std::string_view kModuleName = "DeviceEventManager"; + static constexpr std::string_view kModuleName = "DevLoadingView"; protected: - NativeDeviceEventManagerCxxSpec(std::shared_ptr jsInvoker) - : TurboModule(std::string{NativeDeviceEventManagerCxxSpec::kModuleName}, jsInvoker), + NativeDevLoadingViewCxxSpec(std::shared_ptr jsInvoker) + : TurboModule(std::string{NativeDevLoadingViewCxxSpec::kModuleName}, jsInvoker), delegate_(reinterpret_cast(this), jsInvoker) {} private: - class Delegate : public NativeDeviceEventManagerCxxSpecJSI { + class Delegate : public NativeDevLoadingViewCxxSpecJSI { public: Delegate(T *instance, std::shared_ptr jsInvoker) : - NativeDeviceEventManagerCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { + NativeDevLoadingViewCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { } - void invokeDefaultBackPressHandler(jsi::Runtime &rt) override { + void showMessage(jsi::Runtime &rt, jsi::String message, std::optional withColor, std::optional withBackgroundColor) override { static_assert( - bridging::getParameterCount(&T::invokeDefaultBackPressHandler) == 1, - "Expected invokeDefaultBackPressHandler(...) to have 1 parameters"); + bridging::getParameterCount(&T::showMessage) == 4, + "Expected showMessage(...) to have 4 parameters"); return bridging::callFromJs( - rt, &T::invokeDefaultBackPressHandler, jsInvoker_, instance_); + rt, &T::showMessage, jsInvoker_, instance_, std::move(message), std::move(withColor), std::move(withBackgroundColor)); + } + void hide(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::hide) == 1, + "Expected hide(...) to have 1 parameters"); + + return bridging::callFromJs( + rt, &T::hide, jsInvoker_, instance_); } private: - friend class NativeDeviceEventManagerCxxSpec; + friend class NativeDevLoadingViewCxxSpec; T *instance_; }; @@ -2649,54 +2658,333 @@ class JSI_EXPORT NativeDeviceEventManagerCxxSpec : public TurboModule { }; - -#pragma mark - NativeDeviceInfoDeviceInfoConstants + class JSI_EXPORT NativeDevMenuCxxSpecJSI : public TurboModule { +protected: + NativeDevMenuCxxSpecJSI(std::shared_ptr jsInvoker); + +public: + virtual void show(jsi::Runtime &rt) = 0; + virtual void reload(jsi::Runtime &rt) = 0; + virtual void setProfilingEnabled(jsi::Runtime &rt, bool enabled) = 0; + virtual void setHotLoadingEnabled(jsi::Runtime &rt, bool enabled) = 0; -template -struct NativeDeviceInfoDeviceInfoConstants { - P0 Dimensions; - P1 isIPhoneX_deprecated; - bool operator==(const NativeDeviceInfoDeviceInfoConstants &other) const { - return Dimensions == other.Dimensions && isIPhoneX_deprecated == other.isIPhoneX_deprecated; - } }; template -struct NativeDeviceInfoDeviceInfoConstantsBridging { - static T types; - - static T fromJs( - jsi::Runtime &rt, - const jsi::Object &value, - const std::shared_ptr &jsInvoker) { - T result{ - bridging::fromJs(rt, value.getProperty(rt, "Dimensions"), jsInvoker), - bridging::fromJs(rt, value.getProperty(rt, "isIPhoneX_deprecated"), jsInvoker)}; - return result; - } - -#ifdef DEBUG - static jsi::Object DimensionsToJs(jsi::Runtime &rt, decltype(types.Dimensions) value) { - return bridging::toJs(rt, value); - } - - static bool isIPhoneX_deprecatedToJs(jsi::Runtime &rt, decltype(types.isIPhoneX_deprecated) value) { - return bridging::toJs(rt, value); +class JSI_EXPORT NativeDevMenuCxxSpec : public TurboModule { +public: + jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { + return delegate_.create(rt, propName); } -#endif - static jsi::Object toJs( - jsi::Runtime &rt, - const T &value, - const std::shared_ptr &jsInvoker) { - auto result = facebook::jsi::Object(rt); - result.setProperty(rt, "Dimensions", bridging::toJs(rt, value.Dimensions, jsInvoker)); - if (value.isIPhoneX_deprecated) { - result.setProperty(rt, "isIPhoneX_deprecated", bridging::toJs(rt, value.isIPhoneX_deprecated.value(), jsInvoker)); - } - return result; + std::vector getPropertyNames(jsi::Runtime& runtime) override { + return delegate_.getPropertyNames(runtime); } -}; + + static constexpr std::string_view kModuleName = "DevMenu"; + +protected: + NativeDevMenuCxxSpec(std::shared_ptr jsInvoker) + : TurboModule(std::string{NativeDevMenuCxxSpec::kModuleName}, jsInvoker), + delegate_(reinterpret_cast(this), jsInvoker) {} + + +private: + class Delegate : public NativeDevMenuCxxSpecJSI { + public: + Delegate(T *instance, std::shared_ptr jsInvoker) : + NativeDevMenuCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { + + } + + void show(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::show) == 1, + "Expected show(...) to have 1 parameters"); + + return bridging::callFromJs( + rt, &T::show, jsInvoker_, instance_); + } + void reload(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::reload) == 1, + "Expected reload(...) to have 1 parameters"); + + return bridging::callFromJs( + rt, &T::reload, jsInvoker_, instance_); + } + void setProfilingEnabled(jsi::Runtime &rt, bool enabled) override { + static_assert( + bridging::getParameterCount(&T::setProfilingEnabled) == 2, + "Expected setProfilingEnabled(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::setProfilingEnabled, jsInvoker_, instance_, std::move(enabled)); + } + void setHotLoadingEnabled(jsi::Runtime &rt, bool enabled) override { + static_assert( + bridging::getParameterCount(&T::setHotLoadingEnabled) == 2, + "Expected setHotLoadingEnabled(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::setHotLoadingEnabled, jsInvoker_, instance_, std::move(enabled)); + } + + private: + friend class NativeDevMenuCxxSpec; + T *instance_; + }; + + Delegate delegate_; +}; + + + class JSI_EXPORT NativeDevSettingsCxxSpecJSI : public TurboModule { +protected: + NativeDevSettingsCxxSpecJSI(std::shared_ptr jsInvoker); + +public: + virtual void reload(jsi::Runtime &rt) = 0; + virtual void reloadWithReason(jsi::Runtime &rt, jsi::String reason) = 0; + virtual void onFastRefresh(jsi::Runtime &rt) = 0; + virtual void setHotLoadingEnabled(jsi::Runtime &rt, bool isHotLoadingEnabled) = 0; + virtual void setProfilingEnabled(jsi::Runtime &rt, bool isProfilingEnabled) = 0; + virtual void toggleElementInspector(jsi::Runtime &rt) = 0; + virtual void addMenuItem(jsi::Runtime &rt, jsi::String title) = 0; + virtual void openDebugger(jsi::Runtime &rt) = 0; + virtual void addListener(jsi::Runtime &rt, jsi::String eventName) = 0; + virtual void removeListeners(jsi::Runtime &rt, double count) = 0; + virtual void setIsShakeToShowDevMenuEnabled(jsi::Runtime &rt, bool enabled) = 0; + +}; + +template +class JSI_EXPORT NativeDevSettingsCxxSpec : public TurboModule { +public: + jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { + return delegate_.create(rt, propName); + } + + std::vector getPropertyNames(jsi::Runtime& runtime) override { + return delegate_.getPropertyNames(runtime); + } + + static constexpr std::string_view kModuleName = "DevSettings"; + +protected: + NativeDevSettingsCxxSpec(std::shared_ptr jsInvoker) + : TurboModule(std::string{NativeDevSettingsCxxSpec::kModuleName}, jsInvoker), + delegate_(reinterpret_cast(this), jsInvoker) {} + + +private: + class Delegate : public NativeDevSettingsCxxSpecJSI { + public: + Delegate(T *instance, std::shared_ptr jsInvoker) : + NativeDevSettingsCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { + + } + + void reload(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::reload) == 1, + "Expected reload(...) to have 1 parameters"); + + return bridging::callFromJs( + rt, &T::reload, jsInvoker_, instance_); + } + void reloadWithReason(jsi::Runtime &rt, jsi::String reason) override { + static_assert( + bridging::getParameterCount(&T::reloadWithReason) == 2, + "Expected reloadWithReason(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::reloadWithReason, jsInvoker_, instance_, std::move(reason)); + } + void onFastRefresh(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::onFastRefresh) == 1, + "Expected onFastRefresh(...) to have 1 parameters"); + + return bridging::callFromJs( + rt, &T::onFastRefresh, jsInvoker_, instance_); + } + void setHotLoadingEnabled(jsi::Runtime &rt, bool isHotLoadingEnabled) override { + static_assert( + bridging::getParameterCount(&T::setHotLoadingEnabled) == 2, + "Expected setHotLoadingEnabled(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::setHotLoadingEnabled, jsInvoker_, instance_, std::move(isHotLoadingEnabled)); + } + void setProfilingEnabled(jsi::Runtime &rt, bool isProfilingEnabled) override { + static_assert( + bridging::getParameterCount(&T::setProfilingEnabled) == 2, + "Expected setProfilingEnabled(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::setProfilingEnabled, jsInvoker_, instance_, std::move(isProfilingEnabled)); + } + void toggleElementInspector(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::toggleElementInspector) == 1, + "Expected toggleElementInspector(...) to have 1 parameters"); + + return bridging::callFromJs( + rt, &T::toggleElementInspector, jsInvoker_, instance_); + } + void addMenuItem(jsi::Runtime &rt, jsi::String title) override { + static_assert( + bridging::getParameterCount(&T::addMenuItem) == 2, + "Expected addMenuItem(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::addMenuItem, jsInvoker_, instance_, std::move(title)); + } + void openDebugger(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::openDebugger) == 1, + "Expected openDebugger(...) to have 1 parameters"); + + return bridging::callFromJs( + rt, &T::openDebugger, jsInvoker_, instance_); + } + void addListener(jsi::Runtime &rt, jsi::String eventName) override { + static_assert( + bridging::getParameterCount(&T::addListener) == 2, + "Expected addListener(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::addListener, jsInvoker_, instance_, std::move(eventName)); + } + void removeListeners(jsi::Runtime &rt, double count) override { + static_assert( + bridging::getParameterCount(&T::removeListeners) == 2, + "Expected removeListeners(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::removeListeners, jsInvoker_, instance_, std::move(count)); + } + void setIsShakeToShowDevMenuEnabled(jsi::Runtime &rt, bool enabled) override { + static_assert( + bridging::getParameterCount(&T::setIsShakeToShowDevMenuEnabled) == 2, + "Expected setIsShakeToShowDevMenuEnabled(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::setIsShakeToShowDevMenuEnabled, jsInvoker_, instance_, std::move(enabled)); + } + + private: + friend class NativeDevSettingsCxxSpec; + T *instance_; + }; + + Delegate delegate_; +}; + + + class JSI_EXPORT NativeDeviceEventManagerCxxSpecJSI : public TurboModule { +protected: + NativeDeviceEventManagerCxxSpecJSI(std::shared_ptr jsInvoker); + +public: + virtual void invokeDefaultBackPressHandler(jsi::Runtime &rt) = 0; + +}; + +template +class JSI_EXPORT NativeDeviceEventManagerCxxSpec : public TurboModule { +public: + jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { + return delegate_.create(rt, propName); + } + + std::vector getPropertyNames(jsi::Runtime& runtime) override { + return delegate_.getPropertyNames(runtime); + } + + static constexpr std::string_view kModuleName = "DeviceEventManager"; + +protected: + NativeDeviceEventManagerCxxSpec(std::shared_ptr jsInvoker) + : TurboModule(std::string{NativeDeviceEventManagerCxxSpec::kModuleName}, jsInvoker), + delegate_(reinterpret_cast(this), jsInvoker) {} + + +private: + class Delegate : public NativeDeviceEventManagerCxxSpecJSI { + public: + Delegate(T *instance, std::shared_ptr jsInvoker) : + NativeDeviceEventManagerCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { + + } + + void invokeDefaultBackPressHandler(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::invokeDefaultBackPressHandler) == 1, + "Expected invokeDefaultBackPressHandler(...) to have 1 parameters"); + + return bridging::callFromJs( + rt, &T::invokeDefaultBackPressHandler, jsInvoker_, instance_); + } + + private: + friend class NativeDeviceEventManagerCxxSpec; + T *instance_; + }; + + Delegate delegate_; +}; + + + +#pragma mark - NativeDeviceInfoDeviceInfoConstants + +template +struct NativeDeviceInfoDeviceInfoConstants { + P0 Dimensions; + P1 isIPhoneX_deprecated; + bool operator==(const NativeDeviceInfoDeviceInfoConstants &other) const { + return Dimensions == other.Dimensions && isIPhoneX_deprecated == other.isIPhoneX_deprecated; + } +}; + +template +struct NativeDeviceInfoDeviceInfoConstantsBridging { + static T types; + + static T fromJs( + jsi::Runtime &rt, + const jsi::Object &value, + const std::shared_ptr &jsInvoker) { + T result{ + bridging::fromJs(rt, value.getProperty(rt, "Dimensions"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "isIPhoneX_deprecated"), jsInvoker)}; + return result; + } + +#ifdef DEBUG + static jsi::Object DimensionsToJs(jsi::Runtime &rt, decltype(types.Dimensions) value) { + return bridging::toJs(rt, value); + } + + static bool isIPhoneX_deprecatedToJs(jsi::Runtime &rt, decltype(types.isIPhoneX_deprecated) value) { + return bridging::toJs(rt, value); + } +#endif + + static jsi::Object toJs( + jsi::Runtime &rt, + const T &value, + const std::shared_ptr &jsInvoker) { + auto result = facebook::jsi::Object(rt); + result.setProperty(rt, "Dimensions", bridging::toJs(rt, value.Dimensions, jsInvoker)); + if (value.isIPhoneX_deprecated) { + result.setProperty(rt, "isIPhoneX_deprecated", bridging::toJs(rt, value.isIPhoneX_deprecated.value(), jsInvoker)); + } + return result; + } +}; @@ -2801,323 +3089,115 @@ struct NativeDeviceInfoDisplayMetricsBridging { #ifdef DEBUG static double widthToJs(jsi::Runtime &rt, decltype(types.width) value) { - return bridging::toJs(rt, value); - } - - static double heightToJs(jsi::Runtime &rt, decltype(types.height) value) { - return bridging::toJs(rt, value); - } - - static double scaleToJs(jsi::Runtime &rt, decltype(types.scale) value) { - return bridging::toJs(rt, value); - } - - static double fontScaleToJs(jsi::Runtime &rt, decltype(types.fontScale) value) { - return bridging::toJs(rt, value); - } -#endif - - static jsi::Object toJs( - jsi::Runtime &rt, - const T &value, - const std::shared_ptr &jsInvoker) { - auto result = facebook::jsi::Object(rt); - result.setProperty(rt, "width", bridging::toJs(rt, value.width, jsInvoker)); - result.setProperty(rt, "height", bridging::toJs(rt, value.height, jsInvoker)); - result.setProperty(rt, "scale", bridging::toJs(rt, value.scale, jsInvoker)); - result.setProperty(rt, "fontScale", bridging::toJs(rt, value.fontScale, jsInvoker)); - return result; - } -}; - - - -#pragma mark - NativeDeviceInfoDisplayMetricsAndroid - -template -struct NativeDeviceInfoDisplayMetricsAndroid { - P0 width; - P1 height; - P2 scale; - P3 fontScale; - P4 densityDpi; - bool operator==(const NativeDeviceInfoDisplayMetricsAndroid &other) const { - return width == other.width && height == other.height && scale == other.scale && fontScale == other.fontScale && densityDpi == other.densityDpi; - } -}; - -template -struct NativeDeviceInfoDisplayMetricsAndroidBridging { - static T types; - - static T fromJs( - jsi::Runtime &rt, - const jsi::Object &value, - const std::shared_ptr &jsInvoker) { - T result{ - bridging::fromJs(rt, value.getProperty(rt, "width"), jsInvoker), - bridging::fromJs(rt, value.getProperty(rt, "height"), jsInvoker), - bridging::fromJs(rt, value.getProperty(rt, "scale"), jsInvoker), - bridging::fromJs(rt, value.getProperty(rt, "fontScale"), jsInvoker), - bridging::fromJs(rt, value.getProperty(rt, "densityDpi"), jsInvoker)}; - return result; - } - -#ifdef DEBUG - static double widthToJs(jsi::Runtime &rt, decltype(types.width) value) { - return bridging::toJs(rt, value); - } - - static double heightToJs(jsi::Runtime &rt, decltype(types.height) value) { - return bridging::toJs(rt, value); - } - - static double scaleToJs(jsi::Runtime &rt, decltype(types.scale) value) { - return bridging::toJs(rt, value); - } - - static double fontScaleToJs(jsi::Runtime &rt, decltype(types.fontScale) value) { - return bridging::toJs(rt, value); - } - - static double densityDpiToJs(jsi::Runtime &rt, decltype(types.densityDpi) value) { - return bridging::toJs(rt, value); - } -#endif - - static jsi::Object toJs( - jsi::Runtime &rt, - const T &value, - const std::shared_ptr &jsInvoker) { - auto result = facebook::jsi::Object(rt); - result.setProperty(rt, "width", bridging::toJs(rt, value.width, jsInvoker)); - result.setProperty(rt, "height", bridging::toJs(rt, value.height, jsInvoker)); - result.setProperty(rt, "scale", bridging::toJs(rt, value.scale, jsInvoker)); - result.setProperty(rt, "fontScale", bridging::toJs(rt, value.fontScale, jsInvoker)); - result.setProperty(rt, "densityDpi", bridging::toJs(rt, value.densityDpi, jsInvoker)); - return result; - } -}; - -class JSI_EXPORT NativeDeviceInfoCxxSpecJSI : public TurboModule { -protected: - NativeDeviceInfoCxxSpecJSI(std::shared_ptr jsInvoker); - -public: - virtual jsi::Object getConstants(jsi::Runtime &rt) = 0; - -}; - -template -class JSI_EXPORT NativeDeviceInfoCxxSpec : public TurboModule { -public: - jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { - return delegate_.create(rt, propName); - } - - std::vector getPropertyNames(jsi::Runtime& runtime) override { - return delegate_.getPropertyNames(runtime); - } - - static constexpr std::string_view kModuleName = "DeviceInfo"; - -protected: - NativeDeviceInfoCxxSpec(std::shared_ptr jsInvoker) - : TurboModule(std::string{NativeDeviceInfoCxxSpec::kModuleName}, jsInvoker), - delegate_(reinterpret_cast(this), jsInvoker) {} - - -private: - class Delegate : public NativeDeviceInfoCxxSpecJSI { - public: - Delegate(T *instance, std::shared_ptr jsInvoker) : - NativeDeviceInfoCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { - - } - - jsi::Object getConstants(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::getConstants) == 1, - "Expected getConstants(...) to have 1 parameters"); - - return bridging::callFromJs( - rt, &T::getConstants, jsInvoker_, instance_); - } - - private: - friend class NativeDeviceInfoCxxSpec; - T *instance_; - }; - - Delegate delegate_; -}; - - - class JSI_EXPORT NativeDevLoadingViewCxxSpecJSI : public TurboModule { -protected: - NativeDevLoadingViewCxxSpecJSI(std::shared_ptr jsInvoker); - -public: - virtual void showMessage(jsi::Runtime &rt, jsi::String message, std::optional withColor, std::optional withBackgroundColor) = 0; - virtual void hide(jsi::Runtime &rt) = 0; - -}; - -template -class JSI_EXPORT NativeDevLoadingViewCxxSpec : public TurboModule { -public: - jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { - return delegate_.create(rt, propName); - } - - std::vector getPropertyNames(jsi::Runtime& runtime) override { - return delegate_.getPropertyNames(runtime); - } - - static constexpr std::string_view kModuleName = "DevLoadingView"; - -protected: - NativeDevLoadingViewCxxSpec(std::shared_ptr jsInvoker) - : TurboModule(std::string{NativeDevLoadingViewCxxSpec::kModuleName}, jsInvoker), - delegate_(reinterpret_cast(this), jsInvoker) {} - - -private: - class Delegate : public NativeDevLoadingViewCxxSpecJSI { - public: - Delegate(T *instance, std::shared_ptr jsInvoker) : - NativeDevLoadingViewCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { - - } - - void showMessage(jsi::Runtime &rt, jsi::String message, std::optional withColor, std::optional withBackgroundColor) override { - static_assert( - bridging::getParameterCount(&T::showMessage) == 4, - "Expected showMessage(...) to have 4 parameters"); - - return bridging::callFromJs( - rt, &T::showMessage, jsInvoker_, instance_, std::move(message), std::move(withColor), std::move(withBackgroundColor)); - } - void hide(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::hide) == 1, - "Expected hide(...) to have 1 parameters"); - - return bridging::callFromJs( - rt, &T::hide, jsInvoker_, instance_); - } - - private: - friend class NativeDevLoadingViewCxxSpec; - T *instance_; - }; - - Delegate delegate_; -}; - - - class JSI_EXPORT NativeDevMenuCxxSpecJSI : public TurboModule { -protected: - NativeDevMenuCxxSpecJSI(std::shared_ptr jsInvoker); + return bridging::toJs(rt, value); + } -public: - virtual void show(jsi::Runtime &rt) = 0; - virtual void reload(jsi::Runtime &rt) = 0; - virtual void setProfilingEnabled(jsi::Runtime &rt, bool enabled) = 0; - virtual void setHotLoadingEnabled(jsi::Runtime &rt, bool enabled) = 0; + static double heightToJs(jsi::Runtime &rt, decltype(types.height) value) { + return bridging::toJs(rt, value); + } -}; + static double scaleToJs(jsi::Runtime &rt, decltype(types.scale) value) { + return bridging::toJs(rt, value); + } -template -class JSI_EXPORT NativeDevMenuCxxSpec : public TurboModule { -public: - jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { - return delegate_.create(rt, propName); + static double fontScaleToJs(jsi::Runtime &rt, decltype(types.fontScale) value) { + return bridging::toJs(rt, value); } +#endif - std::vector getPropertyNames(jsi::Runtime& runtime) override { - return delegate_.getPropertyNames(runtime); + static jsi::Object toJs( + jsi::Runtime &rt, + const T &value, + const std::shared_ptr &jsInvoker) { + auto result = facebook::jsi::Object(rt); + result.setProperty(rt, "width", bridging::toJs(rt, value.width, jsInvoker)); + result.setProperty(rt, "height", bridging::toJs(rt, value.height, jsInvoker)); + result.setProperty(rt, "scale", bridging::toJs(rt, value.scale, jsInvoker)); + result.setProperty(rt, "fontScale", bridging::toJs(rt, value.fontScale, jsInvoker)); + return result; } +}; - static constexpr std::string_view kModuleName = "DevMenu"; -protected: - NativeDevMenuCxxSpec(std::shared_ptr jsInvoker) - : TurboModule(std::string{NativeDevMenuCxxSpec::kModuleName}, jsInvoker), - delegate_(reinterpret_cast(this), jsInvoker) {} +#pragma mark - NativeDeviceInfoDisplayMetricsAndroid -private: - class Delegate : public NativeDevMenuCxxSpecJSI { - public: - Delegate(T *instance, std::shared_ptr jsInvoker) : - NativeDevMenuCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { +template +struct NativeDeviceInfoDisplayMetricsAndroid { + P0 width; + P1 height; + P2 scale; + P3 fontScale; + P4 densityDpi; + bool operator==(const NativeDeviceInfoDisplayMetricsAndroid &other) const { + return width == other.width && height == other.height && scale == other.scale && fontScale == other.fontScale && densityDpi == other.densityDpi; + } +}; - } +template +struct NativeDeviceInfoDisplayMetricsAndroidBridging { + static T types; - void show(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::show) == 1, - "Expected show(...) to have 1 parameters"); + static T fromJs( + jsi::Runtime &rt, + const jsi::Object &value, + const std::shared_ptr &jsInvoker) { + T result{ + bridging::fromJs(rt, value.getProperty(rt, "width"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "height"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "scale"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "fontScale"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "densityDpi"), jsInvoker)}; + return result; + } - return bridging::callFromJs( - rt, &T::show, jsInvoker_, instance_); - } - void reload(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::reload) == 1, - "Expected reload(...) to have 1 parameters"); +#ifdef DEBUG + static double widthToJs(jsi::Runtime &rt, decltype(types.width) value) { + return bridging::toJs(rt, value); + } - return bridging::callFromJs( - rt, &T::reload, jsInvoker_, instance_); - } - void setProfilingEnabled(jsi::Runtime &rt, bool enabled) override { - static_assert( - bridging::getParameterCount(&T::setProfilingEnabled) == 2, - "Expected setProfilingEnabled(...) to have 2 parameters"); + static double heightToJs(jsi::Runtime &rt, decltype(types.height) value) { + return bridging::toJs(rt, value); + } - return bridging::callFromJs( - rt, &T::setProfilingEnabled, jsInvoker_, instance_, std::move(enabled)); - } - void setHotLoadingEnabled(jsi::Runtime &rt, bool enabled) override { - static_assert( - bridging::getParameterCount(&T::setHotLoadingEnabled) == 2, - "Expected setHotLoadingEnabled(...) to have 2 parameters"); + static double scaleToJs(jsi::Runtime &rt, decltype(types.scale) value) { + return bridging::toJs(rt, value); + } - return bridging::callFromJs( - rt, &T::setHotLoadingEnabled, jsInvoker_, instance_, std::move(enabled)); - } + static double fontScaleToJs(jsi::Runtime &rt, decltype(types.fontScale) value) { + return bridging::toJs(rt, value); + } - private: - friend class NativeDevMenuCxxSpec; - T *instance_; - }; + static double densityDpiToJs(jsi::Runtime &rt, decltype(types.densityDpi) value) { + return bridging::toJs(rt, value); + } +#endif - Delegate delegate_; + static jsi::Object toJs( + jsi::Runtime &rt, + const T &value, + const std::shared_ptr &jsInvoker) { + auto result = facebook::jsi::Object(rt); + result.setProperty(rt, "width", bridging::toJs(rt, value.width, jsInvoker)); + result.setProperty(rt, "height", bridging::toJs(rt, value.height, jsInvoker)); + result.setProperty(rt, "scale", bridging::toJs(rt, value.scale, jsInvoker)); + result.setProperty(rt, "fontScale", bridging::toJs(rt, value.fontScale, jsInvoker)); + result.setProperty(rt, "densityDpi", bridging::toJs(rt, value.densityDpi, jsInvoker)); + return result; + } }; - - class JSI_EXPORT NativeDevSettingsCxxSpecJSI : public TurboModule { +class JSI_EXPORT NativeDeviceInfoCxxSpecJSI : public TurboModule { protected: - NativeDevSettingsCxxSpecJSI(std::shared_ptr jsInvoker); + NativeDeviceInfoCxxSpecJSI(std::shared_ptr jsInvoker); public: - virtual void reload(jsi::Runtime &rt) = 0; - virtual void reloadWithReason(jsi::Runtime &rt, jsi::String reason) = 0; - virtual void onFastRefresh(jsi::Runtime &rt) = 0; - virtual void setHotLoadingEnabled(jsi::Runtime &rt, bool isHotLoadingEnabled) = 0; - virtual void setProfilingEnabled(jsi::Runtime &rt, bool isProfilingEnabled) = 0; - virtual void toggleElementInspector(jsi::Runtime &rt) = 0; - virtual void addMenuItem(jsi::Runtime &rt, jsi::String title) = 0; - virtual void openDebugger(jsi::Runtime &rt) = 0; - virtual void addListener(jsi::Runtime &rt, jsi::String eventName) = 0; - virtual void removeListeners(jsi::Runtime &rt, double count) = 0; - virtual void setIsShakeToShowDevMenuEnabled(jsi::Runtime &rt, bool enabled) = 0; + virtual jsi::Object getConstants(jsi::Runtime &rt) = 0; }; template -class JSI_EXPORT NativeDevSettingsCxxSpec : public TurboModule { +class JSI_EXPORT NativeDeviceInfoCxxSpec : public TurboModule { public: jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { return delegate_.create(rt, propName); @@ -3127,113 +3207,33 @@ class JSI_EXPORT NativeDevSettingsCxxSpec : public TurboModule { return delegate_.getPropertyNames(runtime); } - static constexpr std::string_view kModuleName = "DevSettings"; + static constexpr std::string_view kModuleName = "DeviceInfo"; protected: - NativeDevSettingsCxxSpec(std::shared_ptr jsInvoker) - : TurboModule(std::string{NativeDevSettingsCxxSpec::kModuleName}, jsInvoker), + NativeDeviceInfoCxxSpec(std::shared_ptr jsInvoker) + : TurboModule(std::string{NativeDeviceInfoCxxSpec::kModuleName}, jsInvoker), delegate_(reinterpret_cast(this), jsInvoker) {} private: - class Delegate : public NativeDevSettingsCxxSpecJSI { + class Delegate : public NativeDeviceInfoCxxSpecJSI { public: Delegate(T *instance, std::shared_ptr jsInvoker) : - NativeDevSettingsCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { - - } - - void reload(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::reload) == 1, - "Expected reload(...) to have 1 parameters"); - - return bridging::callFromJs( - rt, &T::reload, jsInvoker_, instance_); - } - void reloadWithReason(jsi::Runtime &rt, jsi::String reason) override { - static_assert( - bridging::getParameterCount(&T::reloadWithReason) == 2, - "Expected reloadWithReason(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::reloadWithReason, jsInvoker_, instance_, std::move(reason)); - } - void onFastRefresh(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::onFastRefresh) == 1, - "Expected onFastRefresh(...) to have 1 parameters"); - - return bridging::callFromJs( - rt, &T::onFastRefresh, jsInvoker_, instance_); - } - void setHotLoadingEnabled(jsi::Runtime &rt, bool isHotLoadingEnabled) override { - static_assert( - bridging::getParameterCount(&T::setHotLoadingEnabled) == 2, - "Expected setHotLoadingEnabled(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::setHotLoadingEnabled, jsInvoker_, instance_, std::move(isHotLoadingEnabled)); - } - void setProfilingEnabled(jsi::Runtime &rt, bool isProfilingEnabled) override { - static_assert( - bridging::getParameterCount(&T::setProfilingEnabled) == 2, - "Expected setProfilingEnabled(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::setProfilingEnabled, jsInvoker_, instance_, std::move(isProfilingEnabled)); - } - void toggleElementInspector(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::toggleElementInspector) == 1, - "Expected toggleElementInspector(...) to have 1 parameters"); - - return bridging::callFromJs( - rt, &T::toggleElementInspector, jsInvoker_, instance_); - } - void addMenuItem(jsi::Runtime &rt, jsi::String title) override { - static_assert( - bridging::getParameterCount(&T::addMenuItem) == 2, - "Expected addMenuItem(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::addMenuItem, jsInvoker_, instance_, std::move(title)); - } - void openDebugger(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::openDebugger) == 1, - "Expected openDebugger(...) to have 1 parameters"); - - return bridging::callFromJs( - rt, &T::openDebugger, jsInvoker_, instance_); - } - void addListener(jsi::Runtime &rt, jsi::String eventName) override { - static_assert( - bridging::getParameterCount(&T::addListener) == 2, - "Expected addListener(...) to have 2 parameters"); + NativeDeviceInfoCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { - return bridging::callFromJs( - rt, &T::addListener, jsInvoker_, instance_, std::move(eventName)); } - void removeListeners(jsi::Runtime &rt, double count) override { - static_assert( - bridging::getParameterCount(&T::removeListeners) == 2, - "Expected removeListeners(...) to have 2 parameters"); - return bridging::callFromJs( - rt, &T::removeListeners, jsInvoker_, instance_, std::move(count)); - } - void setIsShakeToShowDevMenuEnabled(jsi::Runtime &rt, bool enabled) override { + jsi::Object getConstants(jsi::Runtime &rt) override { static_assert( - bridging::getParameterCount(&T::setIsShakeToShowDevMenuEnabled) == 2, - "Expected setIsShakeToShowDevMenuEnabled(...) to have 2 parameters"); + bridging::getParameterCount(&T::getConstants) == 1, + "Expected getConstants(...) to have 1 parameters"); - return bridging::callFromJs( - rt, &T::setIsShakeToShowDevMenuEnabled, jsInvoker_, instance_, std::move(enabled)); + return bridging::callFromJs( + rt, &T::getConstants, jsInvoker_, instance_); } private: - friend class NativeDevSettingsCxxSpec; + friend class NativeDeviceInfoCxxSpec; T *instance_; }; From 4fbecf6ce9b41bf20e8b131ca9882d2f218e3db2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Jun 2025 09:39:51 +0000 Subject: [PATCH 5/7] Change files --- ...ative-windows-75d6c7d7-52e4-4f20-8943-8cacf13e6f88.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 change/react-native-windows-75d6c7d7-52e4-4f20-8943-8cacf13e6f88.json diff --git a/change/react-native-windows-75d6c7d7-52e4-4f20-8943-8cacf13e6f88.json b/change/react-native-windows-75d6c7d7-52e4-4f20-8943-8cacf13e6f88.json new file mode 100644 index 00000000000..c548360009a --- /dev/null +++ b/change/react-native-windows-75d6c7d7-52e4-4f20-8943-8cacf13e6f88.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Update generated codegen files after yarn install", + "packageName": "react-native-windows", + "email": "198982749+Copilot@users.noreply.github.com", + "dependentChangeType": "patch" +} From 7ec5a641c49e519299df7e92e7a1cc0b673a0d74 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 12 Jun 2025 21:04:23 +0000 Subject: [PATCH 6/7] Revert changes to generated file rnwcoreJSI-generated.cpp Co-authored-by: chiaramooney <34109996+chiaramooney@users.noreply.github.com> --- vnext/codegen/rnwcoreJSI-generated.cpp | 112 ++++++++++++------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/vnext/codegen/rnwcoreJSI-generated.cpp b/vnext/codegen/rnwcoreJSI-generated.cpp index 9c12f2f7882..75de3b43ef4 100644 --- a/vnext/codegen/rnwcoreJSI-generated.cpp +++ b/vnext/codegen/rnwcoreJSI-generated.cpp @@ -952,6 +952,41 @@ NativeAnimatedTurboModuleCxxSpecJSI::NativeAnimatedTurboModuleCxxSpecJSI(std::sh methodMap_["removeListeners"] = MethodMetadata {1, __hostFunction_NativeAnimatedTurboModuleCxxSpecJSI_removeListeners}; methodMap_["queueAndExecuteBatchedOperations"] = MethodMetadata {1, __hostFunction_NativeAnimatedTurboModuleCxxSpecJSI_queueAndExecuteBatchedOperations}; } +static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_getColorScheme(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + auto result = static_cast(&turboModule)->getColorScheme( + rt + ); + return result ? jsi::Value(std::move(*result)) : jsi::Value::null(); +} +static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_setColorScheme(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + static_cast(&turboModule)->setColorScheme( + rt, + count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt) + ); + return jsi::Value::undefined(); +} +static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_addListener(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + static_cast(&turboModule)->addListener( + rt, + count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt) + ); + return jsi::Value::undefined(); +} +static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_removeListeners(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + static_cast(&turboModule)->removeListeners( + rt, + count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asNumber() + ); + return jsi::Value::undefined(); +} + +NativeAppearanceCxxSpecJSI::NativeAppearanceCxxSpecJSI(std::shared_ptr jsInvoker) + : TurboModule("Appearance", jsInvoker) { + methodMap_["getColorScheme"] = MethodMetadata {0, __hostFunction_NativeAppearanceCxxSpecJSI_getColorScheme}; + methodMap_["setColorScheme"] = MethodMetadata {1, __hostFunction_NativeAppearanceCxxSpecJSI_setColorScheme}; + methodMap_["addListener"] = MethodMetadata {1, __hostFunction_NativeAppearanceCxxSpecJSI_addListener}; + methodMap_["removeListeners"] = MethodMetadata {1, __hostFunction_NativeAppearanceCxxSpecJSI_removeListeners}; +} static jsi::Value __hostFunction_NativeAppStateCxxSpecJSI_getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { return static_cast(&turboModule)->getConstants( rt @@ -997,41 +1032,6 @@ NativeAppThemeCxxSpecJSI::NativeAppThemeCxxSpecJSI(std::shared_ptr : TurboModule("AppTheme", jsInvoker) { methodMap_["getConstants"] = MethodMetadata {0, __hostFunction_NativeAppThemeCxxSpecJSI_getConstants}; } -static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_getColorScheme(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { - auto result = static_cast(&turboModule)->getColorScheme( - rt - ); - return result ? jsi::Value(std::move(*result)) : jsi::Value::null(); -} -static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_setColorScheme(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { - static_cast(&turboModule)->setColorScheme( - rt, - count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt) - ); - return jsi::Value::undefined(); -} -static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_addListener(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { - static_cast(&turboModule)->addListener( - rt, - count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt) - ); - return jsi::Value::undefined(); -} -static jsi::Value __hostFunction_NativeAppearanceCxxSpecJSI_removeListeners(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { - static_cast(&turboModule)->removeListeners( - rt, - count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asNumber() - ); - return jsi::Value::undefined(); -} - -NativeAppearanceCxxSpecJSI::NativeAppearanceCxxSpecJSI(std::shared_ptr jsInvoker) - : TurboModule("Appearance", jsInvoker) { - methodMap_["getColorScheme"] = MethodMetadata {0, __hostFunction_NativeAppearanceCxxSpecJSI_getColorScheme}; - methodMap_["setColorScheme"] = MethodMetadata {1, __hostFunction_NativeAppearanceCxxSpecJSI_setColorScheme}; - methodMap_["addListener"] = MethodMetadata {1, __hostFunction_NativeAppearanceCxxSpecJSI_addListener}; - methodMap_["removeListeners"] = MethodMetadata {1, __hostFunction_NativeAppearanceCxxSpecJSI_removeListeners}; -} static jsi::Value __hostFunction_NativeBlobModuleCxxSpecJSI_getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { return static_cast(&turboModule)->getConstants( rt @@ -1135,6 +1135,27 @@ NativeClipboardCxxSpecJSI::NativeClipboardCxxSpecJSI(std::shared_ptr(&turboModule)->invokeDefaultBackPressHandler( + rt + ); + return jsi::Value::undefined(); +} + +NativeDeviceEventManagerCxxSpecJSI::NativeDeviceEventManagerCxxSpecJSI(std::shared_ptr jsInvoker) + : TurboModule("DeviceEventManager", jsInvoker) { + methodMap_["invokeDefaultBackPressHandler"] = MethodMetadata {0, __hostFunction_NativeDeviceEventManagerCxxSpecJSI_invokeDefaultBackPressHandler}; +} +static jsi::Value __hostFunction_NativeDeviceInfoCxxSpecJSI_getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { + return static_cast(&turboModule)->getConstants( + rt + ); +} + +NativeDeviceInfoCxxSpecJSI::NativeDeviceInfoCxxSpecJSI(std::shared_ptr jsInvoker) + : TurboModule("DeviceInfo", jsInvoker) { + methodMap_["getConstants"] = MethodMetadata {0, __hostFunction_NativeDeviceInfoCxxSpecJSI_getConstants}; +} static jsi::Value __hostFunction_NativeDevLoadingViewCxxSpecJSI_showMessage(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { static_cast(&turboModule)->showMessage( rt, @@ -1278,27 +1299,6 @@ NativeDevSettingsCxxSpecJSI::NativeDevSettingsCxxSpecJSI(std::shared_ptr(&turboModule)->invokeDefaultBackPressHandler( - rt - ); - return jsi::Value::undefined(); -} - -NativeDeviceEventManagerCxxSpecJSI::NativeDeviceEventManagerCxxSpecJSI(std::shared_ptr jsInvoker) - : TurboModule("DeviceEventManager", jsInvoker) { - methodMap_["invokeDefaultBackPressHandler"] = MethodMetadata {0, __hostFunction_NativeDeviceEventManagerCxxSpecJSI_invokeDefaultBackPressHandler}; -} -static jsi::Value __hostFunction_NativeDeviceInfoCxxSpecJSI_getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { - return static_cast(&turboModule)->getConstants( - rt - ); -} - -NativeDeviceInfoCxxSpecJSI::NativeDeviceInfoCxxSpecJSI(std::shared_ptr jsInvoker) - : TurboModule("DeviceInfo", jsInvoker) { - methodMap_["getConstants"] = MethodMetadata {0, __hostFunction_NativeDeviceInfoCxxSpecJSI_getConstants}; -} static jsi::Value __hostFunction_NativeDialogManagerAndroidCxxSpecJSI_getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) { return static_cast(&turboModule)->getConstants( rt From f805ffb4b4ea1f4d981d736a10423ce195f96ac8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 12 Jun 2025 21:12:06 +0000 Subject: [PATCH 7/7] Improve fast refresh simulation to use timer-based approach instead of user interaction Co-authored-by: chiaramooney <34109996+chiaramooney@users.noreply.github.com> --- .../js/examples/View/ViewExample.windows.js | 28 +- .../test/ViewComponentTest.test.ts | 10 +- vnext/codegen/rnwcoreJSI.h | 1002 ++++++++--------- 3 files changed, 530 insertions(+), 510 deletions(-) diff --git a/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js b/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js index ef2cbd4203f..dd9a0df05af 100644 --- a/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js @@ -673,10 +673,11 @@ function BoxSizingExample(): React.Node { class FastRefreshStyleExample extends React.Component< $ReadOnly<{}>, - {currentStyle: number}, + {currentStyle: number, isAutoRefreshing: boolean}, > { - state: {currentStyle: number} = { + state: {currentStyle: number, isAutoRefreshing: boolean} = { currentStyle: 0, + isAutoRefreshing: false, }; styles = [ @@ -686,13 +687,32 @@ class FastRefreshStyleExample extends React.Component< {backgroundColor: '#96ceb4', padding: 10, borderRadius: 20}, ]; + intervalId: ?IntervalID = null; + + componentDidMount() { + // Start auto-refresh after a short delay to simulate fast refresh behavior + this.intervalId = setInterval(() => { + if (this.state.isAutoRefreshing) { + this.setState({ + currentStyle: (this.state.currentStyle + 1) % this.styles.length, + }); + } + }, 2000); + } + + componentWillUnmount() { + if (this.intervalId) { + clearInterval(this.intervalId); + } + } + render(): React.Node { return ( - Tap to change style (simulates fast refresh) + {this.state.isAutoRefreshing ? 'Auto-refreshing styles...' : 'Tap to start fast refresh simulation'} Style: {this.state.currentStyle + 1} of {this.styles.length} @@ -705,7 +725,7 @@ class FastRefreshStyleExample extends React.Component< _handlePress = () => { this.setState({ - currentStyle: (this.state.currentStyle + 1) % this.styles.length, + isAutoRefreshing: !this.state.isAutoRefreshing, }); }; } diff --git a/packages/e2e-test-app-fabric/test/ViewComponentTest.test.ts b/packages/e2e-test-app-fabric/test/ViewComponentTest.test.ts index 16cf30b1b51..18fbfe56e81 100644 --- a/packages/e2e-test-app-fabric/test/ViewComponentTest.test.ts +++ b/packages/e2e-test-app-fabric/test/ViewComponentTest.test.ts @@ -208,22 +208,22 @@ describe('View Tests', () => { const initialDump = await dumpVisualTree('view-test-fast-refresh'); expect(initialDump).toMatchSnapshot('initial-state'); - // Click to change style (simulating fast refresh behavior) + // Click to start auto-refresh (simulating fast refresh activation) await componentsTab.click(); - // Wait a moment for the style change to apply + // Wait for automatic style changes to occur (simulating fast refresh) await app.waitUntil( async () => { const currentDump = await dumpVisualTree('view-test-fast-refresh'); return currentDump !== initialDump; }, { - timeout: 3000, - timeoutMsg: 'View style did not update after interaction', + timeout: 5000, + timeoutMsg: 'View style did not auto-update during fast refresh simulation', } ); - // Take snapshot after style change + // Take snapshot after automatic style change const updatedDump = await dumpVisualTree('view-test-fast-refresh'); expect(updatedDump).toMatchSnapshot('updated-state'); }); diff --git a/vnext/codegen/rnwcoreJSI.h b/vnext/codegen/rnwcoreJSI.h index c19042048d1..d03a6000dbd 100644 --- a/vnext/codegen/rnwcoreJSI.h +++ b/vnext/codegen/rnwcoreJSI.h @@ -1871,6 +1871,87 @@ class JSI_EXPORT NativeAnimatedTurboModuleCxxSpec : public TurboModule { }; + class JSI_EXPORT NativeAppearanceCxxSpecJSI : public TurboModule { +protected: + NativeAppearanceCxxSpecJSI(std::shared_ptr jsInvoker); + +public: + virtual std::optional getColorScheme(jsi::Runtime &rt) = 0; + virtual void setColorScheme(jsi::Runtime &rt, jsi::String colorScheme) = 0; + virtual void addListener(jsi::Runtime &rt, jsi::String eventName) = 0; + virtual void removeListeners(jsi::Runtime &rt, double count) = 0; + +}; + +template +class JSI_EXPORT NativeAppearanceCxxSpec : public TurboModule { +public: + jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { + return delegate_.create(rt, propName); + } + + std::vector getPropertyNames(jsi::Runtime& runtime) override { + return delegate_.getPropertyNames(runtime); + } + + static constexpr std::string_view kModuleName = "Appearance"; + +protected: + NativeAppearanceCxxSpec(std::shared_ptr jsInvoker) + : TurboModule(std::string{NativeAppearanceCxxSpec::kModuleName}, jsInvoker), + delegate_(reinterpret_cast(this), jsInvoker) {} + + +private: + class Delegate : public NativeAppearanceCxxSpecJSI { + public: + Delegate(T *instance, std::shared_ptr jsInvoker) : + NativeAppearanceCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { + + } + + std::optional getColorScheme(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::getColorScheme) == 1, + "Expected getColorScheme(...) to have 1 parameters"); + + return bridging::callFromJs>( + rt, &T::getColorScheme, jsInvoker_, instance_); + } + void setColorScheme(jsi::Runtime &rt, jsi::String colorScheme) override { + static_assert( + bridging::getParameterCount(&T::setColorScheme) == 2, + "Expected setColorScheme(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::setColorScheme, jsInvoker_, instance_, std::move(colorScheme)); + } + void addListener(jsi::Runtime &rt, jsi::String eventName) override { + static_assert( + bridging::getParameterCount(&T::addListener) == 2, + "Expected addListener(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::addListener, jsInvoker_, instance_, std::move(eventName)); + } + void removeListeners(jsi::Runtime &rt, double count) override { + static_assert( + bridging::getParameterCount(&T::removeListeners) == 2, + "Expected removeListeners(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::removeListeners, jsInvoker_, instance_, std::move(count)); + } + + private: + friend class NativeAppearanceCxxSpec; + T *instance_; + }; + + Delegate delegate_; +}; + + #pragma mark - NativeAppStateAppState @@ -2224,87 +2305,6 @@ class JSI_EXPORT NativeAppThemeCxxSpec : public TurboModule { }; - class JSI_EXPORT NativeAppearanceCxxSpecJSI : public TurboModule { -protected: - NativeAppearanceCxxSpecJSI(std::shared_ptr jsInvoker); - -public: - virtual std::optional getColorScheme(jsi::Runtime &rt) = 0; - virtual void setColorScheme(jsi::Runtime &rt, jsi::String colorScheme) = 0; - virtual void addListener(jsi::Runtime &rt, jsi::String eventName) = 0; - virtual void removeListeners(jsi::Runtime &rt, double count) = 0; - -}; - -template -class JSI_EXPORT NativeAppearanceCxxSpec : public TurboModule { -public: - jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { - return delegate_.create(rt, propName); - } - - std::vector getPropertyNames(jsi::Runtime& runtime) override { - return delegate_.getPropertyNames(runtime); - } - - static constexpr std::string_view kModuleName = "Appearance"; - -protected: - NativeAppearanceCxxSpec(std::shared_ptr jsInvoker) - : TurboModule(std::string{NativeAppearanceCxxSpec::kModuleName}, jsInvoker), - delegate_(reinterpret_cast(this), jsInvoker) {} - - -private: - class Delegate : public NativeAppearanceCxxSpecJSI { - public: - Delegate(T *instance, std::shared_ptr jsInvoker) : - NativeAppearanceCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { - - } - - std::optional getColorScheme(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::getColorScheme) == 1, - "Expected getColorScheme(...) to have 1 parameters"); - - return bridging::callFromJs>( - rt, &T::getColorScheme, jsInvoker_, instance_); - } - void setColorScheme(jsi::Runtime &rt, jsi::String colorScheme) override { - static_assert( - bridging::getParameterCount(&T::setColorScheme) == 2, - "Expected setColorScheme(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::setColorScheme, jsInvoker_, instance_, std::move(colorScheme)); - } - void addListener(jsi::Runtime &rt, jsi::String eventName) override { - static_assert( - bridging::getParameterCount(&T::addListener) == 2, - "Expected addListener(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::addListener, jsInvoker_, instance_, std::move(eventName)); - } - void removeListeners(jsi::Runtime &rt, double count) override { - static_assert( - bridging::getParameterCount(&T::removeListeners) == 2, - "Expected removeListeners(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::removeListeners, jsInvoker_, instance_, std::move(count)); - } - - private: - friend class NativeAppearanceCxxSpec; - T *instance_; - }; - - Delegate delegate_; -}; - - #pragma mark - NativeBlobModuleConstants @@ -2595,18 +2595,17 @@ class JSI_EXPORT NativeClipboardCxxSpec : public TurboModule { }; - class JSI_EXPORT NativeDevLoadingViewCxxSpecJSI : public TurboModule { + class JSI_EXPORT NativeDeviceEventManagerCxxSpecJSI : public TurboModule { protected: - NativeDevLoadingViewCxxSpecJSI(std::shared_ptr jsInvoker); + NativeDeviceEventManagerCxxSpecJSI(std::shared_ptr jsInvoker); public: - virtual void showMessage(jsi::Runtime &rt, jsi::String message, std::optional withColor, std::optional withBackgroundColor) = 0; - virtual void hide(jsi::Runtime &rt) = 0; + virtual void invokeDefaultBackPressHandler(jsi::Runtime &rt) = 0; }; template -class JSI_EXPORT NativeDevLoadingViewCxxSpec : public TurboModule { +class JSI_EXPORT NativeDeviceEventManagerCxxSpec : public TurboModule { public: jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { return delegate_.create(rt, propName); @@ -2616,41 +2615,33 @@ class JSI_EXPORT NativeDevLoadingViewCxxSpec : public TurboModule { return delegate_.getPropertyNames(runtime); } - static constexpr std::string_view kModuleName = "DevLoadingView"; + static constexpr std::string_view kModuleName = "DeviceEventManager"; protected: - NativeDevLoadingViewCxxSpec(std::shared_ptr jsInvoker) - : TurboModule(std::string{NativeDevLoadingViewCxxSpec::kModuleName}, jsInvoker), + NativeDeviceEventManagerCxxSpec(std::shared_ptr jsInvoker) + : TurboModule(std::string{NativeDeviceEventManagerCxxSpec::kModuleName}, jsInvoker), delegate_(reinterpret_cast(this), jsInvoker) {} private: - class Delegate : public NativeDevLoadingViewCxxSpecJSI { + class Delegate : public NativeDeviceEventManagerCxxSpecJSI { public: Delegate(T *instance, std::shared_ptr jsInvoker) : - NativeDevLoadingViewCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { + NativeDeviceEventManagerCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { } - void showMessage(jsi::Runtime &rt, jsi::String message, std::optional withColor, std::optional withBackgroundColor) override { - static_assert( - bridging::getParameterCount(&T::showMessage) == 4, - "Expected showMessage(...) to have 4 parameters"); - - return bridging::callFromJs( - rt, &T::showMessage, jsInvoker_, instance_, std::move(message), std::move(withColor), std::move(withBackgroundColor)); - } - void hide(jsi::Runtime &rt) override { + void invokeDefaultBackPressHandler(jsi::Runtime &rt) override { static_assert( - bridging::getParameterCount(&T::hide) == 1, - "Expected hide(...) to have 1 parameters"); + bridging::getParameterCount(&T::invokeDefaultBackPressHandler) == 1, + "Expected invokeDefaultBackPressHandler(...) to have 1 parameters"); return bridging::callFromJs( - rt, &T::hide, jsInvoker_, instance_); + rt, &T::invokeDefaultBackPressHandler, jsInvoker_, instance_); } private: - friend class NativeDevLoadingViewCxxSpec; + friend class NativeDeviceEventManagerCxxSpec; T *instance_; }; @@ -2658,320 +2649,41 @@ class JSI_EXPORT NativeDevLoadingViewCxxSpec : public TurboModule { }; - class JSI_EXPORT NativeDevMenuCxxSpecJSI : public TurboModule { -protected: - NativeDevMenuCxxSpecJSI(std::shared_ptr jsInvoker); - -public: - virtual void show(jsi::Runtime &rt) = 0; - virtual void reload(jsi::Runtime &rt) = 0; - virtual void setProfilingEnabled(jsi::Runtime &rt, bool enabled) = 0; - virtual void setHotLoadingEnabled(jsi::Runtime &rt, bool enabled) = 0; + +#pragma mark - NativeDeviceInfoDeviceInfoConstants +template +struct NativeDeviceInfoDeviceInfoConstants { + P0 Dimensions; + P1 isIPhoneX_deprecated; + bool operator==(const NativeDeviceInfoDeviceInfoConstants &other) const { + return Dimensions == other.Dimensions && isIPhoneX_deprecated == other.isIPhoneX_deprecated; + } }; template -class JSI_EXPORT NativeDevMenuCxxSpec : public TurboModule { -public: - jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { - return delegate_.create(rt, propName); - } +struct NativeDeviceInfoDeviceInfoConstantsBridging { + static T types; - std::vector getPropertyNames(jsi::Runtime& runtime) override { - return delegate_.getPropertyNames(runtime); + static T fromJs( + jsi::Runtime &rt, + const jsi::Object &value, + const std::shared_ptr &jsInvoker) { + T result{ + bridging::fromJs(rt, value.getProperty(rt, "Dimensions"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "isIPhoneX_deprecated"), jsInvoker)}; + return result; } - static constexpr std::string_view kModuleName = "DevMenu"; - -protected: - NativeDevMenuCxxSpec(std::shared_ptr jsInvoker) - : TurboModule(std::string{NativeDevMenuCxxSpec::kModuleName}, jsInvoker), - delegate_(reinterpret_cast(this), jsInvoker) {} - - -private: - class Delegate : public NativeDevMenuCxxSpecJSI { - public: - Delegate(T *instance, std::shared_ptr jsInvoker) : - NativeDevMenuCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { +#ifdef DEBUG + static jsi::Object DimensionsToJs(jsi::Runtime &rt, decltype(types.Dimensions) value) { + return bridging::toJs(rt, value); + } - } - - void show(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::show) == 1, - "Expected show(...) to have 1 parameters"); - - return bridging::callFromJs( - rt, &T::show, jsInvoker_, instance_); - } - void reload(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::reload) == 1, - "Expected reload(...) to have 1 parameters"); - - return bridging::callFromJs( - rt, &T::reload, jsInvoker_, instance_); - } - void setProfilingEnabled(jsi::Runtime &rt, bool enabled) override { - static_assert( - bridging::getParameterCount(&T::setProfilingEnabled) == 2, - "Expected setProfilingEnabled(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::setProfilingEnabled, jsInvoker_, instance_, std::move(enabled)); - } - void setHotLoadingEnabled(jsi::Runtime &rt, bool enabled) override { - static_assert( - bridging::getParameterCount(&T::setHotLoadingEnabled) == 2, - "Expected setHotLoadingEnabled(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::setHotLoadingEnabled, jsInvoker_, instance_, std::move(enabled)); - } - - private: - friend class NativeDevMenuCxxSpec; - T *instance_; - }; - - Delegate delegate_; -}; - - - class JSI_EXPORT NativeDevSettingsCxxSpecJSI : public TurboModule { -protected: - NativeDevSettingsCxxSpecJSI(std::shared_ptr jsInvoker); - -public: - virtual void reload(jsi::Runtime &rt) = 0; - virtual void reloadWithReason(jsi::Runtime &rt, jsi::String reason) = 0; - virtual void onFastRefresh(jsi::Runtime &rt) = 0; - virtual void setHotLoadingEnabled(jsi::Runtime &rt, bool isHotLoadingEnabled) = 0; - virtual void setProfilingEnabled(jsi::Runtime &rt, bool isProfilingEnabled) = 0; - virtual void toggleElementInspector(jsi::Runtime &rt) = 0; - virtual void addMenuItem(jsi::Runtime &rt, jsi::String title) = 0; - virtual void openDebugger(jsi::Runtime &rt) = 0; - virtual void addListener(jsi::Runtime &rt, jsi::String eventName) = 0; - virtual void removeListeners(jsi::Runtime &rt, double count) = 0; - virtual void setIsShakeToShowDevMenuEnabled(jsi::Runtime &rt, bool enabled) = 0; - -}; - -template -class JSI_EXPORT NativeDevSettingsCxxSpec : public TurboModule { -public: - jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { - return delegate_.create(rt, propName); - } - - std::vector getPropertyNames(jsi::Runtime& runtime) override { - return delegate_.getPropertyNames(runtime); - } - - static constexpr std::string_view kModuleName = "DevSettings"; - -protected: - NativeDevSettingsCxxSpec(std::shared_ptr jsInvoker) - : TurboModule(std::string{NativeDevSettingsCxxSpec::kModuleName}, jsInvoker), - delegate_(reinterpret_cast(this), jsInvoker) {} - - -private: - class Delegate : public NativeDevSettingsCxxSpecJSI { - public: - Delegate(T *instance, std::shared_ptr jsInvoker) : - NativeDevSettingsCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { - - } - - void reload(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::reload) == 1, - "Expected reload(...) to have 1 parameters"); - - return bridging::callFromJs( - rt, &T::reload, jsInvoker_, instance_); - } - void reloadWithReason(jsi::Runtime &rt, jsi::String reason) override { - static_assert( - bridging::getParameterCount(&T::reloadWithReason) == 2, - "Expected reloadWithReason(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::reloadWithReason, jsInvoker_, instance_, std::move(reason)); - } - void onFastRefresh(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::onFastRefresh) == 1, - "Expected onFastRefresh(...) to have 1 parameters"); - - return bridging::callFromJs( - rt, &T::onFastRefresh, jsInvoker_, instance_); - } - void setHotLoadingEnabled(jsi::Runtime &rt, bool isHotLoadingEnabled) override { - static_assert( - bridging::getParameterCount(&T::setHotLoadingEnabled) == 2, - "Expected setHotLoadingEnabled(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::setHotLoadingEnabled, jsInvoker_, instance_, std::move(isHotLoadingEnabled)); - } - void setProfilingEnabled(jsi::Runtime &rt, bool isProfilingEnabled) override { - static_assert( - bridging::getParameterCount(&T::setProfilingEnabled) == 2, - "Expected setProfilingEnabled(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::setProfilingEnabled, jsInvoker_, instance_, std::move(isProfilingEnabled)); - } - void toggleElementInspector(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::toggleElementInspector) == 1, - "Expected toggleElementInspector(...) to have 1 parameters"); - - return bridging::callFromJs( - rt, &T::toggleElementInspector, jsInvoker_, instance_); - } - void addMenuItem(jsi::Runtime &rt, jsi::String title) override { - static_assert( - bridging::getParameterCount(&T::addMenuItem) == 2, - "Expected addMenuItem(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::addMenuItem, jsInvoker_, instance_, std::move(title)); - } - void openDebugger(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::openDebugger) == 1, - "Expected openDebugger(...) to have 1 parameters"); - - return bridging::callFromJs( - rt, &T::openDebugger, jsInvoker_, instance_); - } - void addListener(jsi::Runtime &rt, jsi::String eventName) override { - static_assert( - bridging::getParameterCount(&T::addListener) == 2, - "Expected addListener(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::addListener, jsInvoker_, instance_, std::move(eventName)); - } - void removeListeners(jsi::Runtime &rt, double count) override { - static_assert( - bridging::getParameterCount(&T::removeListeners) == 2, - "Expected removeListeners(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::removeListeners, jsInvoker_, instance_, std::move(count)); - } - void setIsShakeToShowDevMenuEnabled(jsi::Runtime &rt, bool enabled) override { - static_assert( - bridging::getParameterCount(&T::setIsShakeToShowDevMenuEnabled) == 2, - "Expected setIsShakeToShowDevMenuEnabled(...) to have 2 parameters"); - - return bridging::callFromJs( - rt, &T::setIsShakeToShowDevMenuEnabled, jsInvoker_, instance_, std::move(enabled)); - } - - private: - friend class NativeDevSettingsCxxSpec; - T *instance_; - }; - - Delegate delegate_; -}; - - - class JSI_EXPORT NativeDeviceEventManagerCxxSpecJSI : public TurboModule { -protected: - NativeDeviceEventManagerCxxSpecJSI(std::shared_ptr jsInvoker); - -public: - virtual void invokeDefaultBackPressHandler(jsi::Runtime &rt) = 0; - -}; - -template -class JSI_EXPORT NativeDeviceEventManagerCxxSpec : public TurboModule { -public: - jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { - return delegate_.create(rt, propName); - } - - std::vector getPropertyNames(jsi::Runtime& runtime) override { - return delegate_.getPropertyNames(runtime); - } - - static constexpr std::string_view kModuleName = "DeviceEventManager"; - -protected: - NativeDeviceEventManagerCxxSpec(std::shared_ptr jsInvoker) - : TurboModule(std::string{NativeDeviceEventManagerCxxSpec::kModuleName}, jsInvoker), - delegate_(reinterpret_cast(this), jsInvoker) {} - - -private: - class Delegate : public NativeDeviceEventManagerCxxSpecJSI { - public: - Delegate(T *instance, std::shared_ptr jsInvoker) : - NativeDeviceEventManagerCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { - - } - - void invokeDefaultBackPressHandler(jsi::Runtime &rt) override { - static_assert( - bridging::getParameterCount(&T::invokeDefaultBackPressHandler) == 1, - "Expected invokeDefaultBackPressHandler(...) to have 1 parameters"); - - return bridging::callFromJs( - rt, &T::invokeDefaultBackPressHandler, jsInvoker_, instance_); - } - - private: - friend class NativeDeviceEventManagerCxxSpec; - T *instance_; - }; - - Delegate delegate_; -}; - - - -#pragma mark - NativeDeviceInfoDeviceInfoConstants - -template -struct NativeDeviceInfoDeviceInfoConstants { - P0 Dimensions; - P1 isIPhoneX_deprecated; - bool operator==(const NativeDeviceInfoDeviceInfoConstants &other) const { - return Dimensions == other.Dimensions && isIPhoneX_deprecated == other.isIPhoneX_deprecated; - } -}; - -template -struct NativeDeviceInfoDeviceInfoConstantsBridging { - static T types; - - static T fromJs( - jsi::Runtime &rt, - const jsi::Object &value, - const std::shared_ptr &jsInvoker) { - T result{ - bridging::fromJs(rt, value.getProperty(rt, "Dimensions"), jsInvoker), - bridging::fromJs(rt, value.getProperty(rt, "isIPhoneX_deprecated"), jsInvoker)}; - return result; - } - -#ifdef DEBUG - static jsi::Object DimensionsToJs(jsi::Runtime &rt, decltype(types.Dimensions) value) { - return bridging::toJs(rt, value); - } - - static bool isIPhoneX_deprecatedToJs(jsi::Runtime &rt, decltype(types.isIPhoneX_deprecated) value) { - return bridging::toJs(rt, value); - } -#endif + static bool isIPhoneX_deprecatedToJs(jsi::Runtime &rt, decltype(types.isIPhoneX_deprecated) value) { + return bridging::toJs(rt, value); + } +#endif static jsi::Object toJs( jsi::Runtime &rt, @@ -3092,112 +2804,320 @@ struct NativeDeviceInfoDisplayMetricsBridging { return bridging::toJs(rt, value); } - static double heightToJs(jsi::Runtime &rt, decltype(types.height) value) { - return bridging::toJs(rt, value); - } + static double heightToJs(jsi::Runtime &rt, decltype(types.height) value) { + return bridging::toJs(rt, value); + } + + static double scaleToJs(jsi::Runtime &rt, decltype(types.scale) value) { + return bridging::toJs(rt, value); + } + + static double fontScaleToJs(jsi::Runtime &rt, decltype(types.fontScale) value) { + return bridging::toJs(rt, value); + } +#endif + + static jsi::Object toJs( + jsi::Runtime &rt, + const T &value, + const std::shared_ptr &jsInvoker) { + auto result = facebook::jsi::Object(rt); + result.setProperty(rt, "width", bridging::toJs(rt, value.width, jsInvoker)); + result.setProperty(rt, "height", bridging::toJs(rt, value.height, jsInvoker)); + result.setProperty(rt, "scale", bridging::toJs(rt, value.scale, jsInvoker)); + result.setProperty(rt, "fontScale", bridging::toJs(rt, value.fontScale, jsInvoker)); + return result; + } +}; + + + +#pragma mark - NativeDeviceInfoDisplayMetricsAndroid + +template +struct NativeDeviceInfoDisplayMetricsAndroid { + P0 width; + P1 height; + P2 scale; + P3 fontScale; + P4 densityDpi; + bool operator==(const NativeDeviceInfoDisplayMetricsAndroid &other) const { + return width == other.width && height == other.height && scale == other.scale && fontScale == other.fontScale && densityDpi == other.densityDpi; + } +}; + +template +struct NativeDeviceInfoDisplayMetricsAndroidBridging { + static T types; + + static T fromJs( + jsi::Runtime &rt, + const jsi::Object &value, + const std::shared_ptr &jsInvoker) { + T result{ + bridging::fromJs(rt, value.getProperty(rt, "width"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "height"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "scale"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "fontScale"), jsInvoker), + bridging::fromJs(rt, value.getProperty(rt, "densityDpi"), jsInvoker)}; + return result; + } + +#ifdef DEBUG + static double widthToJs(jsi::Runtime &rt, decltype(types.width) value) { + return bridging::toJs(rt, value); + } + + static double heightToJs(jsi::Runtime &rt, decltype(types.height) value) { + return bridging::toJs(rt, value); + } + + static double scaleToJs(jsi::Runtime &rt, decltype(types.scale) value) { + return bridging::toJs(rt, value); + } + + static double fontScaleToJs(jsi::Runtime &rt, decltype(types.fontScale) value) { + return bridging::toJs(rt, value); + } + + static double densityDpiToJs(jsi::Runtime &rt, decltype(types.densityDpi) value) { + return bridging::toJs(rt, value); + } +#endif + + static jsi::Object toJs( + jsi::Runtime &rt, + const T &value, + const std::shared_ptr &jsInvoker) { + auto result = facebook::jsi::Object(rt); + result.setProperty(rt, "width", bridging::toJs(rt, value.width, jsInvoker)); + result.setProperty(rt, "height", bridging::toJs(rt, value.height, jsInvoker)); + result.setProperty(rt, "scale", bridging::toJs(rt, value.scale, jsInvoker)); + result.setProperty(rt, "fontScale", bridging::toJs(rt, value.fontScale, jsInvoker)); + result.setProperty(rt, "densityDpi", bridging::toJs(rt, value.densityDpi, jsInvoker)); + return result; + } +}; + +class JSI_EXPORT NativeDeviceInfoCxxSpecJSI : public TurboModule { +protected: + NativeDeviceInfoCxxSpecJSI(std::shared_ptr jsInvoker); + +public: + virtual jsi::Object getConstants(jsi::Runtime &rt) = 0; + +}; + +template +class JSI_EXPORT NativeDeviceInfoCxxSpec : public TurboModule { +public: + jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { + return delegate_.create(rt, propName); + } + + std::vector getPropertyNames(jsi::Runtime& runtime) override { + return delegate_.getPropertyNames(runtime); + } + + static constexpr std::string_view kModuleName = "DeviceInfo"; + +protected: + NativeDeviceInfoCxxSpec(std::shared_ptr jsInvoker) + : TurboModule(std::string{NativeDeviceInfoCxxSpec::kModuleName}, jsInvoker), + delegate_(reinterpret_cast(this), jsInvoker) {} + + +private: + class Delegate : public NativeDeviceInfoCxxSpecJSI { + public: + Delegate(T *instance, std::shared_ptr jsInvoker) : + NativeDeviceInfoCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { + + } + + jsi::Object getConstants(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::getConstants) == 1, + "Expected getConstants(...) to have 1 parameters"); + + return bridging::callFromJs( + rt, &T::getConstants, jsInvoker_, instance_); + } + + private: + friend class NativeDeviceInfoCxxSpec; + T *instance_; + }; + + Delegate delegate_; +}; + + + class JSI_EXPORT NativeDevLoadingViewCxxSpecJSI : public TurboModule { +protected: + NativeDevLoadingViewCxxSpecJSI(std::shared_ptr jsInvoker); + +public: + virtual void showMessage(jsi::Runtime &rt, jsi::String message, std::optional withColor, std::optional withBackgroundColor) = 0; + virtual void hide(jsi::Runtime &rt) = 0; + +}; + +template +class JSI_EXPORT NativeDevLoadingViewCxxSpec : public TurboModule { +public: + jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { + return delegate_.create(rt, propName); + } + + std::vector getPropertyNames(jsi::Runtime& runtime) override { + return delegate_.getPropertyNames(runtime); + } + + static constexpr std::string_view kModuleName = "DevLoadingView"; + +protected: + NativeDevLoadingViewCxxSpec(std::shared_ptr jsInvoker) + : TurboModule(std::string{NativeDevLoadingViewCxxSpec::kModuleName}, jsInvoker), + delegate_(reinterpret_cast(this), jsInvoker) {} + + +private: + class Delegate : public NativeDevLoadingViewCxxSpecJSI { + public: + Delegate(T *instance, std::shared_ptr jsInvoker) : + NativeDevLoadingViewCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { + + } + + void showMessage(jsi::Runtime &rt, jsi::String message, std::optional withColor, std::optional withBackgroundColor) override { + static_assert( + bridging::getParameterCount(&T::showMessage) == 4, + "Expected showMessage(...) to have 4 parameters"); + + return bridging::callFromJs( + rt, &T::showMessage, jsInvoker_, instance_, std::move(message), std::move(withColor), std::move(withBackgroundColor)); + } + void hide(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::hide) == 1, + "Expected hide(...) to have 1 parameters"); + + return bridging::callFromJs( + rt, &T::hide, jsInvoker_, instance_); + } + + private: + friend class NativeDevLoadingViewCxxSpec; + T *instance_; + }; + + Delegate delegate_; +}; + + + class JSI_EXPORT NativeDevMenuCxxSpecJSI : public TurboModule { +protected: + NativeDevMenuCxxSpecJSI(std::shared_ptr jsInvoker); + +public: + virtual void show(jsi::Runtime &rt) = 0; + virtual void reload(jsi::Runtime &rt) = 0; + virtual void setProfilingEnabled(jsi::Runtime &rt, bool enabled) = 0; + virtual void setHotLoadingEnabled(jsi::Runtime &rt, bool enabled) = 0; - static double scaleToJs(jsi::Runtime &rt, decltype(types.scale) value) { - return bridging::toJs(rt, value); - } +}; - static double fontScaleToJs(jsi::Runtime &rt, decltype(types.fontScale) value) { - return bridging::toJs(rt, value); +template +class JSI_EXPORT NativeDevMenuCxxSpec : public TurboModule { +public: + jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { + return delegate_.create(rt, propName); } -#endif - static jsi::Object toJs( - jsi::Runtime &rt, - const T &value, - const std::shared_ptr &jsInvoker) { - auto result = facebook::jsi::Object(rt); - result.setProperty(rt, "width", bridging::toJs(rt, value.width, jsInvoker)); - result.setProperty(rt, "height", bridging::toJs(rt, value.height, jsInvoker)); - result.setProperty(rt, "scale", bridging::toJs(rt, value.scale, jsInvoker)); - result.setProperty(rt, "fontScale", bridging::toJs(rt, value.fontScale, jsInvoker)); - return result; + std::vector getPropertyNames(jsi::Runtime& runtime) override { + return delegate_.getPropertyNames(runtime); } -}; + static constexpr std::string_view kModuleName = "DevMenu"; +protected: + NativeDevMenuCxxSpec(std::shared_ptr jsInvoker) + : TurboModule(std::string{NativeDevMenuCxxSpec::kModuleName}, jsInvoker), + delegate_(reinterpret_cast(this), jsInvoker) {} -#pragma mark - NativeDeviceInfoDisplayMetricsAndroid -template -struct NativeDeviceInfoDisplayMetricsAndroid { - P0 width; - P1 height; - P2 scale; - P3 fontScale; - P4 densityDpi; - bool operator==(const NativeDeviceInfoDisplayMetricsAndroid &other) const { - return width == other.width && height == other.height && scale == other.scale && fontScale == other.fontScale && densityDpi == other.densityDpi; - } -}; +private: + class Delegate : public NativeDevMenuCxxSpecJSI { + public: + Delegate(T *instance, std::shared_ptr jsInvoker) : + NativeDevMenuCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { -template -struct NativeDeviceInfoDisplayMetricsAndroidBridging { - static T types; + } - static T fromJs( - jsi::Runtime &rt, - const jsi::Object &value, - const std::shared_ptr &jsInvoker) { - T result{ - bridging::fromJs(rt, value.getProperty(rt, "width"), jsInvoker), - bridging::fromJs(rt, value.getProperty(rt, "height"), jsInvoker), - bridging::fromJs(rt, value.getProperty(rt, "scale"), jsInvoker), - bridging::fromJs(rt, value.getProperty(rt, "fontScale"), jsInvoker), - bridging::fromJs(rt, value.getProperty(rt, "densityDpi"), jsInvoker)}; - return result; - } + void show(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::show) == 1, + "Expected show(...) to have 1 parameters"); -#ifdef DEBUG - static double widthToJs(jsi::Runtime &rt, decltype(types.width) value) { - return bridging::toJs(rt, value); - } + return bridging::callFromJs( + rt, &T::show, jsInvoker_, instance_); + } + void reload(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::reload) == 1, + "Expected reload(...) to have 1 parameters"); - static double heightToJs(jsi::Runtime &rt, decltype(types.height) value) { - return bridging::toJs(rt, value); - } + return bridging::callFromJs( + rt, &T::reload, jsInvoker_, instance_); + } + void setProfilingEnabled(jsi::Runtime &rt, bool enabled) override { + static_assert( + bridging::getParameterCount(&T::setProfilingEnabled) == 2, + "Expected setProfilingEnabled(...) to have 2 parameters"); - static double scaleToJs(jsi::Runtime &rt, decltype(types.scale) value) { - return bridging::toJs(rt, value); - } + return bridging::callFromJs( + rt, &T::setProfilingEnabled, jsInvoker_, instance_, std::move(enabled)); + } + void setHotLoadingEnabled(jsi::Runtime &rt, bool enabled) override { + static_assert( + bridging::getParameterCount(&T::setHotLoadingEnabled) == 2, + "Expected setHotLoadingEnabled(...) to have 2 parameters"); - static double fontScaleToJs(jsi::Runtime &rt, decltype(types.fontScale) value) { - return bridging::toJs(rt, value); - } + return bridging::callFromJs( + rt, &T::setHotLoadingEnabled, jsInvoker_, instance_, std::move(enabled)); + } - static double densityDpiToJs(jsi::Runtime &rt, decltype(types.densityDpi) value) { - return bridging::toJs(rt, value); - } -#endif + private: + friend class NativeDevMenuCxxSpec; + T *instance_; + }; - static jsi::Object toJs( - jsi::Runtime &rt, - const T &value, - const std::shared_ptr &jsInvoker) { - auto result = facebook::jsi::Object(rt); - result.setProperty(rt, "width", bridging::toJs(rt, value.width, jsInvoker)); - result.setProperty(rt, "height", bridging::toJs(rt, value.height, jsInvoker)); - result.setProperty(rt, "scale", bridging::toJs(rt, value.scale, jsInvoker)); - result.setProperty(rt, "fontScale", bridging::toJs(rt, value.fontScale, jsInvoker)); - result.setProperty(rt, "densityDpi", bridging::toJs(rt, value.densityDpi, jsInvoker)); - return result; - } + Delegate delegate_; }; -class JSI_EXPORT NativeDeviceInfoCxxSpecJSI : public TurboModule { + + class JSI_EXPORT NativeDevSettingsCxxSpecJSI : public TurboModule { protected: - NativeDeviceInfoCxxSpecJSI(std::shared_ptr jsInvoker); + NativeDevSettingsCxxSpecJSI(std::shared_ptr jsInvoker); public: - virtual jsi::Object getConstants(jsi::Runtime &rt) = 0; + virtual void reload(jsi::Runtime &rt) = 0; + virtual void reloadWithReason(jsi::Runtime &rt, jsi::String reason) = 0; + virtual void onFastRefresh(jsi::Runtime &rt) = 0; + virtual void setHotLoadingEnabled(jsi::Runtime &rt, bool isHotLoadingEnabled) = 0; + virtual void setProfilingEnabled(jsi::Runtime &rt, bool isProfilingEnabled) = 0; + virtual void toggleElementInspector(jsi::Runtime &rt) = 0; + virtual void addMenuItem(jsi::Runtime &rt, jsi::String title) = 0; + virtual void openDebugger(jsi::Runtime &rt) = 0; + virtual void addListener(jsi::Runtime &rt, jsi::String eventName) = 0; + virtual void removeListeners(jsi::Runtime &rt, double count) = 0; + virtual void setIsShakeToShowDevMenuEnabled(jsi::Runtime &rt, bool enabled) = 0; }; template -class JSI_EXPORT NativeDeviceInfoCxxSpec : public TurboModule { +class JSI_EXPORT NativeDevSettingsCxxSpec : public TurboModule { public: jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override { return delegate_.create(rt, propName); @@ -3207,33 +3127,113 @@ class JSI_EXPORT NativeDeviceInfoCxxSpec : public TurboModule { return delegate_.getPropertyNames(runtime); } - static constexpr std::string_view kModuleName = "DeviceInfo"; + static constexpr std::string_view kModuleName = "DevSettings"; protected: - NativeDeviceInfoCxxSpec(std::shared_ptr jsInvoker) - : TurboModule(std::string{NativeDeviceInfoCxxSpec::kModuleName}, jsInvoker), + NativeDevSettingsCxxSpec(std::shared_ptr jsInvoker) + : TurboModule(std::string{NativeDevSettingsCxxSpec::kModuleName}, jsInvoker), delegate_(reinterpret_cast(this), jsInvoker) {} private: - class Delegate : public NativeDeviceInfoCxxSpecJSI { + class Delegate : public NativeDevSettingsCxxSpecJSI { public: Delegate(T *instance, std::shared_ptr jsInvoker) : - NativeDeviceInfoCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { + NativeDevSettingsCxxSpecJSI(std::move(jsInvoker)), instance_(instance) { } - jsi::Object getConstants(jsi::Runtime &rt) override { + void reload(jsi::Runtime &rt) override { static_assert( - bridging::getParameterCount(&T::getConstants) == 1, - "Expected getConstants(...) to have 1 parameters"); + bridging::getParameterCount(&T::reload) == 1, + "Expected reload(...) to have 1 parameters"); - return bridging::callFromJs( - rt, &T::getConstants, jsInvoker_, instance_); + return bridging::callFromJs( + rt, &T::reload, jsInvoker_, instance_); + } + void reloadWithReason(jsi::Runtime &rt, jsi::String reason) override { + static_assert( + bridging::getParameterCount(&T::reloadWithReason) == 2, + "Expected reloadWithReason(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::reloadWithReason, jsInvoker_, instance_, std::move(reason)); + } + void onFastRefresh(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::onFastRefresh) == 1, + "Expected onFastRefresh(...) to have 1 parameters"); + + return bridging::callFromJs( + rt, &T::onFastRefresh, jsInvoker_, instance_); + } + void setHotLoadingEnabled(jsi::Runtime &rt, bool isHotLoadingEnabled) override { + static_assert( + bridging::getParameterCount(&T::setHotLoadingEnabled) == 2, + "Expected setHotLoadingEnabled(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::setHotLoadingEnabled, jsInvoker_, instance_, std::move(isHotLoadingEnabled)); + } + void setProfilingEnabled(jsi::Runtime &rt, bool isProfilingEnabled) override { + static_assert( + bridging::getParameterCount(&T::setProfilingEnabled) == 2, + "Expected setProfilingEnabled(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::setProfilingEnabled, jsInvoker_, instance_, std::move(isProfilingEnabled)); + } + void toggleElementInspector(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::toggleElementInspector) == 1, + "Expected toggleElementInspector(...) to have 1 parameters"); + + return bridging::callFromJs( + rt, &T::toggleElementInspector, jsInvoker_, instance_); + } + void addMenuItem(jsi::Runtime &rt, jsi::String title) override { + static_assert( + bridging::getParameterCount(&T::addMenuItem) == 2, + "Expected addMenuItem(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::addMenuItem, jsInvoker_, instance_, std::move(title)); + } + void openDebugger(jsi::Runtime &rt) override { + static_assert( + bridging::getParameterCount(&T::openDebugger) == 1, + "Expected openDebugger(...) to have 1 parameters"); + + return bridging::callFromJs( + rt, &T::openDebugger, jsInvoker_, instance_); + } + void addListener(jsi::Runtime &rt, jsi::String eventName) override { + static_assert( + bridging::getParameterCount(&T::addListener) == 2, + "Expected addListener(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::addListener, jsInvoker_, instance_, std::move(eventName)); + } + void removeListeners(jsi::Runtime &rt, double count) override { + static_assert( + bridging::getParameterCount(&T::removeListeners) == 2, + "Expected removeListeners(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::removeListeners, jsInvoker_, instance_, std::move(count)); + } + void setIsShakeToShowDevMenuEnabled(jsi::Runtime &rt, bool enabled) override { + static_assert( + bridging::getParameterCount(&T::setIsShakeToShowDevMenuEnabled) == 2, + "Expected setIsShakeToShowDevMenuEnabled(...) to have 2 parameters"); + + return bridging::callFromJs( + rt, &T::setIsShakeToShowDevMenuEnabled, jsInvoker_, instance_, std::move(enabled)); } private: - friend class NativeDeviceInfoCxxSpec; + friend class NativeDevSettingsCxxSpec; T *instance_; };