react-native-windows 0.82.3 → 0.83.0-preview.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/.flowconfig +2 -7
  2. package/Libraries/Animated/components/AnimatedFlatList.js +5 -3
  3. package/Libraries/Animated/components/AnimatedImage.js +4 -3
  4. package/Libraries/Animated/components/AnimatedSectionList.js +2 -2
  5. package/Libraries/Animated/components/AnimatedText.js +7 -3
  6. package/Libraries/Animated/components/AnimatedView.js +3 -2
  7. package/Libraries/Animated/createAnimatedComponent.js +24 -12
  8. package/Libraries/Animated/nodes/AnimatedColor.js +26 -10
  9. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +43 -15
  10. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +43 -15
  11. package/Libraries/Components/ActivityIndicator/ActivityIndicator.d.ts +2 -2
  12. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.d.ts +2 -2
  13. package/Libraries/Components/Glyph/Glyph.js +4 -1
  14. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.d.ts +2 -2
  15. package/Libraries/Components/RefreshControl/RefreshControl.d.ts +3 -3
  16. package/Libraries/Components/SafeAreaView/SafeAreaView.d.ts +2 -2
  17. package/Libraries/Components/ScrollView/ScrollView.js +1 -0
  18. package/Libraries/Components/ScrollView/ScrollView.windows.js +1 -0
  19. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +6 -6
  20. package/Libraries/Components/Switch/Switch.d.ts +2 -2
  21. package/Libraries/Components/Switch/Switch.windows.js +1 -1
  22. package/Libraries/Components/TextInput/TextInput.d.ts +2 -5
  23. package/Libraries/Components/TextInput/TextInput.js +6 -0
  24. package/Libraries/Components/TextInput/TextInput.windows.js +6 -0
  25. package/Libraries/Components/Touchable/TouchableBounce.js +7 -7
  26. package/Libraries/Components/Touchable/TouchableBounce.windows.js +7 -7
  27. package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +1 -1
  28. package/Libraries/Components/View/ReactNativeStyleAttributes.js +19 -1
  29. package/Libraries/Components/View/View.d.ts +2 -2
  30. package/Libraries/Components/View/View.windows.js +0 -1
  31. package/Libraries/Components/View/ViewNativeComponent.js +13 -1
  32. package/Libraries/Core/ReactNativeVersion.js +3 -3
  33. package/Libraries/Core/setUpPerformance.js +2 -0
  34. package/Libraries/Debugging/DebuggingOverlay.js +14 -14
  35. package/Libraries/Debugging/DebuggingOverlayRegistry.js +8 -2
  36. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +5 -2
  37. package/Libraries/Image/Image.d.ts +3 -3
  38. package/Libraries/Image/ImageInjection.js +3 -6
  39. package/Libraries/Image/ImageTypes.flow.js +3 -7
  40. package/Libraries/Lists/FlatList.js +8 -8
  41. package/Libraries/Lists/SectionList.d.ts +5 -1
  42. package/Libraries/Lists/ViewabilityHelper.js +1 -1
  43. package/Libraries/Lists/VirtualizedList.js +1 -0
  44. package/Libraries/LogBox/UI/AnsiHighlight.js +4 -1
  45. package/Libraries/NativeComponent/BaseViewConfig.android.js +11 -2
  46. package/Libraries/NativeComponent/NativeComponentRegistry.d.ts +98 -0
  47. package/Libraries/NativeComponent/NativeComponentRegistry.js +2 -0
  48. package/Libraries/NativeComponent/NativeComponentRegistryUnstable.js +3 -1
  49. package/Libraries/NativeComponent/ViewConfigIgnore.windows.js +45 -0
  50. package/Libraries/Network/RCTNetworking.android.js +3 -1
  51. package/Libraries/Network/RCTNetworking.ios.js +3 -0
  52. package/Libraries/Network/RCTNetworking.windows.js +3 -0
  53. package/Libraries/Network/XMLHttpRequest.js +1 -41
  54. package/Libraries/Pressability/usePressability.js +14 -3
  55. package/Libraries/ReactNative/PaperUIManager.windows.js +3 -3
  56. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +20 -82
  57. package/Libraries/ReactNative/getNativeComponentAttributes.js +12 -0
  58. package/Libraries/Renderer/implementations/ReactFabric-dev.js +6759 -4478
  59. package/Libraries/Renderer/implementations/ReactFabric-prod.js +3169 -3119
  60. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +4732 -3535
  61. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +6646 -4070
  62. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3136 -2825
  63. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +4761 -3312
  64. package/Libraries/Renderer/shims/ReactNative.js +3 -1
  65. package/Libraries/Renderer/shims/ReactNativeTypes.js +2 -1
  66. package/Libraries/Renderer/shims/ReactNativeTypes.windows.js +2 -1
  67. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +1 -1
  68. package/Libraries/StyleSheet/StyleSheetTypes.js +44 -0
  69. package/Libraries/StyleSheet/processBackgroundPosition.js +284 -0
  70. package/Libraries/StyleSheet/processBackgroundRepeat.js +105 -0
  71. package/Libraries/StyleSheet/processBackgroundSize.js +104 -0
  72. package/Libraries/Text/Text.d.ts +2 -2
  73. package/Libraries/Text/TextNativeComponent.js +10 -0
  74. package/Libraries/TurboModule/TurboModuleRegistry.js +3 -9
  75. package/Libraries/Utilities/DevLoadingView.js +14 -6
  76. package/Libraries/Utilities/HMRClient.js +13 -5
  77. package/Microsoft.ReactNative/CompositionComponentView.idl +2 -0
  78. package/Microsoft.ReactNative/CompositionHwndHost.idl +1 -0
  79. package/Microsoft.ReactNative/Fabric/ComponentView.cpp +1 -1
  80. package/Microsoft.ReactNative/Fabric/ComponentView.h +1 -1
  81. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.cpp +10 -40
  82. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +3 -80
  83. package/Microsoft.ReactNative/Fabric/Composition/ContentIslandComponentView.cpp +45 -12
  84. package/Microsoft.ReactNative/Fabric/Composition/ContentIslandComponentView.h +8 -0
  85. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +61 -74
  86. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.h +4 -0
  87. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.h +1 -0
  88. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +4 -3
  89. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.h +2 -1
  90. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeWindow.cpp +245 -0
  91. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeWindow.h +80 -0
  92. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentDescriptor.h +20 -36
  93. package/Microsoft.ReactNative/Fabric/Composition/UriImageManager.cpp +5 -0
  94. package/Microsoft.ReactNative/IReactCompositionViewComponentBuilder.idl +1 -0
  95. package/Microsoft.ReactNative/Modules/ImageViewManagerModule.cpp +1 -1
  96. package/Microsoft.ReactNative/Modules/LogBoxModule.cpp +20 -94
  97. package/Microsoft.ReactNative/Modules/LogBoxModule.h +1 -3
  98. package/Microsoft.ReactNative/ReactNativeAppBuilder.cpp +0 -41
  99. package/Microsoft.ReactNative/ReactNativeAppBuilder.idl +0 -11
  100. package/Microsoft.ReactNative/ReactNativeIsland.idl +2 -3
  101. package/Microsoft.ReactNative/ReactNativeWin32App.cpp +31 -101
  102. package/Microsoft.ReactNative/ReactNativeWin32App.h +2 -13
  103. package/Microsoft.ReactNative/ReactNativeWindow.idl +44 -0
  104. package/Microsoft.ReactNative.Cxx/AutoDraw.h +9 -1
  105. package/Microsoft.ReactNative.Cxx/ReactCommon/CallInvoker.h +13 -16
  106. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.h +24 -36
  107. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModuleUtils.h +5 -8
  108. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/AString.h +8 -6
  109. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Array.h +32 -49
  110. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Base.h +27 -76
  111. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bool.h +4 -2
  112. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/CallbackWrapper.h +19 -18
  113. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Class.h +25 -48
  114. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Convert.h +38 -31
  115. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Error.h +11 -6
  116. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/EventEmitter.h +47 -45
  117. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Function.h +69 -89
  118. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/HighResTimeStamp.h +8 -8
  119. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/LongLivedObject.h +6 -6
  120. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Number.h +16 -8
  121. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Object.h +17 -24
  122. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Promise.h +17 -17
  123. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Value.h +20 -29
  124. package/Microsoft.ReactNative.Cxx/ReactCommon/react/debug/react_native_assert.h +2 -7
  125. package/Microsoft.ReactNative.Cxx/ReactCommon/react/timing/primitives.h +127 -115
  126. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  127. package/PropertySheets/Warnings.props +2 -1
  128. package/ReactCommon/ReactCommon.vcxproj +11 -2
  129. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/CxxNativeModule.cpp +2 -2
  130. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/Instance.cpp +4 -2
  131. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +4 -2
  132. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSIndexedRAMBundle.cpp +4 -2
  133. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/MethodCall.cpp +4 -2
  134. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/ModuleRegistry.cpp +5 -3
  135. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/NativeToJsBridge.cpp +4 -4
  136. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/RAMBundleRegistry.cpp +6 -4
  137. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/ReactMarker.cpp +2 -0
  138. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/TraceSection.h +25 -35
  139. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +86 -67
  140. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsiexecutor/jsireact/JSIExecutor.cpp +15 -8
  141. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsiexecutor/jsireact/JSINativeModules.cpp +4 -2
  142. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp +84 -68
  143. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.h +31 -35
  144. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/Utf8.h +4 -5
  145. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/network/HttpUtils.cpp +2 -1
  146. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +24 -36
  147. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/dom/NativeDOM.h +28 -66
  148. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/webperformance/NativePerformance.cpp +5 -0
  149. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +3 -3
  150. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/image/conversions.h +8 -4
  151. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/ParagraphShadowNode.cpp +19 -16
  152. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/platform/android/react/renderer/components/text/ParagraphState.h +8 -9
  153. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +25 -95
  154. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/BaseViewProps.cpp +36 -0
  155. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/accessibilityPropsConversions.h +85 -42
  156. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/EventDispatcher.cpp +2 -0
  157. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/EventQueueProcessor.cpp +2 -0
  158. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/imagemanager/primitives.h +25 -31
  159. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp +19 -5
  160. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +16 -1
  161. package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +1 -15
  162. package/Scripts/creaternwapp.cmd +1 -1
  163. package/Scripts/perf/compare-results.js +357 -0
  164. package/Scripts/perf/create-perf-test.js +343 -0
  165. package/Scripts/perf/post-pr-comment.js +210 -0
  166. package/Shared/Hermes/HermesRuntimeTargetDelegate.cpp +8 -0
  167. package/Shared/Hermes/HermesRuntimeTargetDelegate.h +3 -0
  168. package/Shared/Shared.vcxitems +15 -3
  169. package/Shared/Shared.vcxitems.filters +11 -3
  170. package/codegen/NativeIntersectionObserverSpec.g.h +2 -0
  171. package/codegen/NativeNetworkingIOSSpec.g.h +2 -0
  172. package/codegen/NativePerformanceSpec.g.h +6 -0
  173. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +229 -139
  174. package/codegen/react/components/rnwcore/ActivityIndicatorView.g.h +2 -1
  175. package/codegen/react/components/rnwcore/AndroidDrawerLayout.g.h +42 -25
  176. package/codegen/react/components/rnwcore/AndroidHorizontalScrollContentView.g.h +2 -1
  177. package/codegen/react/components/rnwcore/AndroidProgressBar.g.h +2 -1
  178. package/codegen/react/components/rnwcore/AndroidSwipeRefreshLayout.g.h +11 -6
  179. package/codegen/react/components/rnwcore/AndroidSwitch.g.h +11 -6
  180. package/codegen/react/components/rnwcore/DebuggingOverlay.g.h +1 -0
  181. package/codegen/react/components/rnwcore/InputAccessory.g.h +2 -1
  182. package/codegen/react/components/rnwcore/ModalHostView.g.h +40 -23
  183. package/codegen/react/components/rnwcore/Props.cpp +6 -1
  184. package/codegen/react/components/rnwcore/Props.h +1 -0
  185. package/codegen/react/components/rnwcore/PullToRefreshView.g.h +11 -6
  186. package/codegen/react/components/rnwcore/SafeAreaView.g.h +1 -0
  187. package/codegen/react/components/rnwcore/Switch.g.h +11 -6
  188. package/codegen/react/components/rnwcore/UnimplementedNativeView.g.h +2 -1
  189. package/codegen/react/components/rnwcore/VirtualView.g.h +41 -8
  190. package/codegen/react/components/rnwcore/VirtualViewExperimental.g.h +45 -8
  191. package/codegen/rnwcoreJSI.h +3973 -6059
  192. package/index.js +6 -0
  193. package/index.windows.js +6 -0
  194. package/jest/mockComponent.js +6 -6
  195. package/jest/setup.js +15 -10
  196. package/package.json +27 -27
  197. package/src/private/components/virtualview/VirtualView.js +22 -27
  198. package/src/private/components/virtualview/VirtualViewExperimentalNativeComponent.js +6 -0
  199. package/src/private/featureflags/ReactNativeFeatureFlags.js +100 -19
  200. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +18 -3
  201. package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
  202. package/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js +1 -1
  203. package/src/private/specs_DEPRECATED/modules/NativeNetworkingIOS.js +1 -0
  204. package/src/private/webapis/dom/nodes/ReactNativeElement.js +12 -2
  205. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +76 -15
  206. package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +1 -0
  207. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
  208. package/src/private/webapis/performance/ResourceTiming.js +31 -4
  209. package/src/private/webapis/performance/internals/RawPerformanceEntry.js +4 -1
  210. package/src/private/webapis/performance/specs/NativePerformance.js +3 -0
  211. package/stubs/double-conversion/double-conversion.h +5 -0
  212. package/templates/cpp-app/template.config.js +1 -1
  213. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +1 -1
  214. package/templates/cpp-lib/template.config.js +1 -1
  215. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +1 -1
  216. package/types/index.d.ts +1 -0
  217. package/types/public/ReactNativeTypes.d.ts +115 -2
  218. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +0 -152
  219. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/conversions.h +0 -1574
  220. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/ShadowNode.cpp +0 -528
  221. package/Scripts/OpenSSL.nuspec +0 -39
  222. package/Scripts/OpenSSL.targets +0 -36
  223. package/codegen/rnwcoreJSI-generated.cpp +0 -3470
@@ -20,46 +20,47 @@ class CallInvoker;
20
20
  // Helper for passing jsi::Function arg to other methods.
21
21
  class CallbackWrapper : public LongLivedObject {
22
22
  private:
23
- CallbackWrapper(
24
- jsi::Function&& callback,
25
- jsi::Runtime& runtime,
26
- std::shared_ptr<CallInvoker> jsInvoker)
27
- : LongLivedObject(runtime),
28
- callback_(std::move(callback)),
29
- jsInvoker_(std::move(jsInvoker)) {}
23
+ CallbackWrapper(jsi::Function &&callback, jsi::Runtime &runtime, std::shared_ptr<CallInvoker> jsInvoker)
24
+ : LongLivedObject(runtime), callback_(std::move(callback)), jsInvoker_(std::move(jsInvoker))
25
+ {
26
+ }
30
27
 
31
28
  jsi::Function callback_;
32
29
  std::shared_ptr<CallInvoker> jsInvoker_;
33
30
 
34
31
  public:
35
- static std::weak_ptr<CallbackWrapper> createWeak(
36
- jsi::Function&& callback,
37
- jsi::Runtime& runtime,
38
- std::shared_ptr<CallInvoker> jsInvoker) {
39
- auto wrapper = std::shared_ptr<CallbackWrapper>(new CallbackWrapper(
40
- std::move(callback), runtime, std::move(jsInvoker)));
32
+ static std::weak_ptr<CallbackWrapper>
33
+ createWeak(jsi::Function &&callback, jsi::Runtime &runtime, std::shared_ptr<CallInvoker> jsInvoker)
34
+ {
35
+ auto wrapper =
36
+ std::shared_ptr<CallbackWrapper>(new CallbackWrapper(std::move(callback), runtime, std::move(jsInvoker)));
41
37
  LongLivedObjectCollection::get(runtime).add(wrapper);
42
38
  return wrapper;
43
39
  }
44
40
 
45
41
  // Delete the enclosed jsi::Function
46
- void destroy() {
42
+ void destroy()
43
+ {
47
44
  allowRelease();
48
45
  }
49
46
 
50
- jsi::Function& callback() noexcept {
47
+ jsi::Function &callback() noexcept
48
+ {
51
49
  return callback_;
52
50
  }
53
51
 
54
- jsi::Runtime& runtime() noexcept {
52
+ jsi::Runtime &runtime() noexcept
53
+ {
55
54
  return runtime_;
56
55
  }
57
56
 
58
- CallInvoker& jsInvoker() noexcept {
57
+ CallInvoker &jsInvoker() noexcept
58
+ {
59
59
  return *(jsInvoker_);
60
60
  }
61
61
 
62
- std::shared_ptr<CallInvoker> jsInvokerPtr() noexcept {
62
+ std::shared_ptr<CallInvoker> jsInvokerPtr() noexcept
63
+ {
63
64
  return jsInvoker_;
64
65
  }
65
66
  };
@@ -11,64 +11,41 @@
11
11
 
12
12
  namespace facebook::react::bridging {
13
13
 
14
- template <
15
- typename JSReturnT,
16
- typename ClassT,
17
- typename ReturnT,
18
- typename... ArgsT,
19
- typename... JSArgsT>
14
+ template <typename JSReturnT, typename ClassT, typename ReturnT, typename... ArgsT, typename... JSArgsT>
20
15
  JSReturnT callFromJs(
21
- jsi::Runtime& rt,
22
- ReturnT (ClassT::*method)(jsi::Runtime&, ArgsT...),
23
- const std::shared_ptr<CallInvoker>& jsInvoker,
24
- ClassT* instance,
25
- JSArgsT&&... args) {
26
- static_assert(
27
- sizeof...(ArgsT) == sizeof...(JSArgsT), "Incorrect arguments length");
28
- static_assert(
29
- (supportsFromJs<ArgsT, JSArgsT> && ...), "Incompatible arguments");
16
+ jsi::Runtime &rt,
17
+ ReturnT (ClassT::*method)(jsi::Runtime &, ArgsT...),
18
+ const std::shared_ptr<CallInvoker> &jsInvoker,
19
+ ClassT *instance,
20
+ JSArgsT &&...args)
21
+ {
22
+ static_assert(sizeof...(ArgsT) == sizeof...(JSArgsT), "Incorrect arguments length");
23
+ static_assert((supportsFromJs<ArgsT, JSArgsT> && ...), "Incompatible arguments");
30
24
  if constexpr (std::is_void_v<JSReturnT>) {
31
- static_assert(
32
- std::is_void_v<ReturnT>,
33
- "Method must return void when JSReturnT is void");
25
+ static_assert(std::is_void_v<ReturnT>, "Method must return void when JSReturnT is void");
34
26
  }
35
27
 
36
28
  if constexpr (std::is_void_v<JSReturnT>) {
37
- (instance->*method)(
38
- rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...);
29
+ (instance->*method)(rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...);
39
30
 
40
31
  } else if constexpr (std::is_void_v<ReturnT>) {
41
- static_assert(
42
- std::is_same_v<JSReturnT, jsi::Value>,
43
- "Void functions may only return undefined");
32
+ static_assert(std::is_same_v<JSReturnT, jsi::Value>, "Void functions may only return undefined");
44
33
 
45
- (instance->*method)(
46
- rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...);
34
+ (instance->*method)(rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...);
47
35
  return jsi::Value();
48
36
 
49
- } else if constexpr (
50
- is_jsi_v<JSReturnT> || supportsToJs<ReturnT, JSReturnT>) {
37
+ } else if constexpr (is_jsi_v<JSReturnT> || supportsToJs<ReturnT, JSReturnT>) {
51
38
  static_assert(supportsToJs<ReturnT, JSReturnT>, "Incompatible return type");
52
39
 
53
- return toJs(
54
- rt,
55
- (instance->*method)(
56
- rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...),
57
- jsInvoker);
40
+ return toJs(rt, (instance->*method)(rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...), jsInvoker);
58
41
  } else if constexpr (is_optional_jsi_v<JSReturnT>) {
59
42
  static_assert(
60
- is_optional_v<ReturnT>
61
- ? supportsToJs<
62
- typename ReturnT::value_type,
63
- typename JSReturnT::value_type>
64
- : supportsToJs<ReturnT, typename JSReturnT::value_type>,
43
+ is_optional_v<ReturnT> ? supportsToJs<typename ReturnT::value_type, typename JSReturnT::value_type>
44
+ : supportsToJs<ReturnT, typename JSReturnT::value_type>,
65
45
  "Incompatible return type");
66
46
 
67
- auto result = toJs(
68
- rt,
69
- (instance->*method)(
70
- rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...),
71
- jsInvoker);
47
+ auto result =
48
+ toJs(rt, (instance->*method)(rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...), jsInvoker);
72
49
 
73
50
  if constexpr (std::is_same_v<decltype(result), jsi::Value>) {
74
51
  if (result.isNull() || result.isUndefined()) {
@@ -78,20 +55,20 @@ JSReturnT callFromJs(
78
55
 
79
56
  return convert(rt, std::move(result));
80
57
  } else {
81
- static_assert(
82
- std::is_convertible_v<ReturnT, JSReturnT>, "Incompatible return type");
83
- return (instance->*method)(
84
- rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...);
58
+ static_assert(std::is_convertible_v<ReturnT, JSReturnT>, "Incompatible return type");
59
+ return (instance->*method)(rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...);
85
60
  }
86
61
  }
87
62
 
88
63
  template <typename ReturnT, typename... ArgsT>
89
- constexpr size_t getParameterCount(ReturnT (*)(ArgsT...)) {
64
+ constexpr size_t getParameterCount(ReturnT (* /*unused*/)(ArgsT...))
65
+ {
90
66
  return sizeof...(ArgsT);
91
67
  }
92
68
 
93
69
  template <typename Class, typename ReturnT, typename... ArgsT>
94
- constexpr size_t getParameterCount(ReturnT (Class::*)(ArgsT...)) {
70
+ constexpr size_t getParameterCount(ReturnT (Class::* /*unused*/)(ArgsT...))
71
+ {
95
72
  return sizeof...(ArgsT);
96
73
  }
97
74
 
@@ -19,10 +19,8 @@ template <typename T>
19
19
  using remove_cvref_t = std::remove_cv_t<std::remove_reference_t<T>>;
20
20
 
21
21
  template <typename T>
22
- inline constexpr bool is_jsi_v =
23
- std::is_same_v<jsi::Value, remove_cvref_t<T>> ||
24
- std::is_same_v<jsi::String, remove_cvref_t<T>> ||
25
- std::is_base_of_v<jsi::Object, remove_cvref_t<T>>;
22
+ inline constexpr bool is_jsi_v = std::is_same_v<jsi::Value, remove_cvref_t<T>> ||
23
+ std::is_same_v<jsi::String, remove_cvref_t<T>> || std::is_base_of_v<jsi::Object, remove_cvref_t<T>>;
26
24
 
27
25
  template <typename>
28
26
  struct is_optional : std::false_type {};
@@ -37,9 +35,8 @@ template <typename T, typename = void>
37
35
  inline constexpr bool is_optional_jsi_v = false;
38
36
 
39
37
  template <typename T>
40
- inline constexpr bool
41
- is_optional_jsi_v<T, typename std::enable_if_t<is_optional_v<T>>> =
42
- is_jsi_v<typename T::value_type>;
38
+ inline constexpr bool is_optional_jsi_v<T, typename std::enable_if_t<is_optional_v<T>>> =
39
+ is_jsi_v<typename T::value_type>;
43
40
 
44
41
  template <typename T>
45
42
  struct Converter;
@@ -48,10 +45,10 @@ template <typename T>
48
45
  struct ConverterBase {
49
46
  using BaseT = remove_cvref_t<T>;
50
47
 
51
- ConverterBase(jsi::Runtime& rt, T&& value)
52
- : rt_(rt), value_(std::forward<T>(value)) {}
48
+ ConverterBase(jsi::Runtime &rt, T &&value) : rt_(rt), value_(std::forward<T>(value)) {}
53
49
 
54
- operator BaseT() && {
50
+ operator BaseT() &&
51
+ {
55
52
  if constexpr (std::is_lvalue_reference_v<T>) {
56
53
  // Copy the reference into a Value that then can be moved from.
57
54
  auto value = jsi::Value(rt_, value_);
@@ -79,17 +76,16 @@ struct ConverterBase {
79
76
  // Ensure non-reference type can be converted to the desired type.
80
77
  std::is_convertible_v<Converter<BaseT>, U>,
81
78
  int> = 0>
82
- operator U() && {
79
+ operator U() &&
80
+ {
83
81
  return Converter<BaseT>(rt_, std::move(*this).operator BaseT());
84
82
  }
85
83
 
86
- template <
87
- typename U,
88
- std::enable_if_t<is_jsi_v<T> && std::is_same_v<U, jsi::Value>, int> = 0>
84
+ template <typename U, std::enable_if_t<is_jsi_v<T> && std::is_same_v<U, jsi::Value>, int> = 0>
89
85
  operator U() && = delete; // Prevent unwanted upcasting of JSI values.
90
86
 
91
87
  protected:
92
- jsi::Runtime& rt_;
88
+ jsi::Runtime &rt_;
93
89
  T value_;
94
90
  };
95
91
 
@@ -102,19 +98,23 @@ template <>
102
98
  struct Converter<jsi::Value> : public ConverterBase<jsi::Value> {
103
99
  using ConverterBase<jsi::Value>::ConverterBase;
104
100
 
105
- operator jsi::String() && {
101
+ operator jsi::String() &&
102
+ {
106
103
  return std::move(value_).asString(rt_);
107
104
  }
108
105
 
109
- operator jsi::Object() && {
106
+ operator jsi::Object() &&
107
+ {
110
108
  return std::move(value_).asObject(rt_);
111
109
  }
112
110
 
113
- operator jsi::Array() && {
111
+ operator jsi::Array() &&
112
+ {
114
113
  return std::move(value_).asObject(rt_).asArray(rt_);
115
114
  }
116
115
 
117
- operator jsi::Function() && {
116
+ operator jsi::Function() &&
117
+ {
118
118
  return std::move(value_).asObject(rt_).asFunction(rt_);
119
119
  }
120
120
  };
@@ -123,21 +123,26 @@ template <>
123
123
  struct Converter<jsi::Object> : public ConverterBase<jsi::Object> {
124
124
  using ConverterBase<jsi::Object>::ConverterBase;
125
125
 
126
- operator jsi::Array() && {
126
+ operator jsi::Array() &&
127
+ {
127
128
  return std::move(value_).asArray(rt_);
128
129
  }
129
130
 
130
- operator jsi::Function() && {
131
+ operator jsi::Function() &&
132
+ {
131
133
  return std::move(value_).asFunction(rt_);
132
134
  }
133
135
  };
134
136
 
135
137
  template <typename T>
136
138
  struct Converter<std::optional<T>> : public ConverterBase<jsi::Value> {
137
- Converter(jsi::Runtime& rt, std::optional<T> value)
138
- : ConverterBase(rt, value ? std::move(*value) : jsi::Value::null()) {}
139
+ Converter(jsi::Runtime &rt, std::optional<T> value)
140
+ : ConverterBase(rt, value ? std::move(*value) : jsi::Value::null())
141
+ {
142
+ }
139
143
 
140
- operator std::optional<T>() && {
144
+ operator std::optional<T>() &&
145
+ {
141
146
  if (value_.isNull() || value_.isUndefined()) {
142
147
  return {};
143
148
  }
@@ -146,24 +151,26 @@ struct Converter<std::optional<T>> : public ConverterBase<jsi::Value> {
146
151
  };
147
152
 
148
153
  template <typename T, std::enable_if_t<is_jsi_v<T>, int> = 0>
149
- auto convert(jsi::Runtime& rt, T&& value) {
154
+ auto convert(jsi::Runtime &rt, T &&value)
155
+ {
150
156
  return Converter<T>(rt, std::forward<T>(value));
151
157
  }
152
158
 
153
- template <
154
- typename T,
155
- std::enable_if_t<is_jsi_v<T> || std::is_scalar_v<T>, int> = 0>
156
- auto convert(jsi::Runtime& rt, std::optional<T> value) {
159
+ template <typename T, std::enable_if_t<is_jsi_v<T> || std::is_scalar_v<T>, int> = 0>
160
+ auto convert(jsi::Runtime &rt, std::optional<T> value)
161
+ {
157
162
  return Converter<std::optional<T>>(rt, std::move(value));
158
163
  }
159
164
 
160
165
  template <typename T, std::enable_if_t<std::is_scalar_v<T>, int> = 0>
161
- auto convert(jsi::Runtime& /*rt*/, T&& value) {
166
+ auto convert(jsi::Runtime & /*rt*/, T &&value)
167
+ {
162
168
  return value;
163
169
  }
164
170
 
165
171
  template <typename T>
166
- auto convert(jsi::Runtime& /*rt*/, Converter<T>&& converter) {
172
+ auto convert(jsi::Runtime & /*rt*/, Converter<T> &&converter)
173
+ {
167
174
  return std::move(converter);
168
175
  }
169
176
 
@@ -16,9 +16,10 @@ class Error {
16
16
  // TODO (T114055466): Retain stack trace (at least caller location)
17
17
  Error(std::string message) : message_(std::move(message)) {}
18
18
 
19
- Error(const char* message) : Error(std::string(message)) {}
19
+ Error(const char *message) : Error(std::string(message)) {}
20
20
 
21
- const std::string& message() const {
21
+ const std::string &message() const
22
+ {
22
23
  return message_;
23
24
  }
24
25
 
@@ -28,22 +29,26 @@ class Error {
28
29
 
29
30
  template <>
30
31
  struct Bridging<jsi::JSError> {
31
- static jsi::JSError fromJs(jsi::Runtime& rt, const jsi::Value& value) {
32
+ static jsi::JSError fromJs(jsi::Runtime &rt, const jsi::Value &value)
33
+ {
32
34
  return jsi::JSError(rt, jsi::Value(rt, value));
33
35
  }
34
36
 
35
- static jsi::JSError fromJs(jsi::Runtime& rt, jsi::Value&& value) {
37
+ static jsi::JSError fromJs(jsi::Runtime &rt, jsi::Value &&value)
38
+ {
36
39
  return jsi::JSError(rt, std::move(value));
37
40
  }
38
41
 
39
- static jsi::Value toJs(jsi::Runtime& rt, std::string message) {
42
+ static jsi::Value toJs(jsi::Runtime &rt, std::string message)
43
+ {
40
44
  return jsi::Value(rt, jsi::JSError(rt, std::move(message)).value());
41
45
  }
42
46
  };
43
47
 
44
48
  template <>
45
49
  struct Bridging<Error> {
46
- static jsi::Value toJs(jsi::Runtime& rt, const Error& error) {
50
+ static jsi::Value toJs(jsi::Runtime &rt, const Error &error)
51
+ {
47
52
  return jsi::Value(rt, jsi::JSError(rt, error.message()).value());
48
53
  }
49
54
  };
@@ -13,36 +13,43 @@
13
13
  #include <mutex>
14
14
  #include <unordered_map>
15
15
 
16
- #define FRIEND_TEST(test_case_name, test_name) \
17
- friend class test_case_name##_##test_name##_Test
16
+ #define FRIEND_TEST(test_case_name, test_name) friend class test_case_name##_##test_name##_Test
18
17
 
19
18
  namespace facebook::react {
20
19
 
21
20
  class EventSubscription {
22
21
  public:
23
- explicit EventSubscription(std::function<void()> remove)
24
- : remove_(std::move(remove)) {}
22
+ explicit EventSubscription(std::function<void()> remove) : remove_(std::move(remove)) {}
25
23
  ~EventSubscription() = default;
26
- EventSubscription(EventSubscription&&) noexcept = default;
27
- EventSubscription& operator=(EventSubscription&&) noexcept = default;
28
- EventSubscription(const EventSubscription&) = delete;
29
- EventSubscription& operator=(const EventSubscription&) = delete;
24
+ EventSubscription(EventSubscription &&) noexcept = default;
25
+ EventSubscription &operator=(EventSubscription &&) noexcept = default;
26
+ EventSubscription(const EventSubscription &) = delete;
27
+ EventSubscription &operator=(const EventSubscription &) = delete;
28
+
29
+ void remove()
30
+ {
31
+ remove_();
32
+ }
30
33
 
31
34
  private:
32
35
  friend Bridging<EventSubscription>;
33
-
34
36
  std::function<void()> remove_;
35
37
  };
36
38
 
37
39
  template <>
38
40
  struct Bridging<EventSubscription> {
39
- static jsi::Object toJs(
40
- jsi::Runtime& rt,
41
- const EventSubscription& eventSubscription,
42
- const std::shared_ptr<CallInvoker>& jsInvoker) {
41
+ static EventSubscription
42
+ fromJs(jsi::Runtime &rt, const jsi::Object &value, const std::shared_ptr<CallInvoker> &jsInvoker)
43
+ {
44
+ auto listener = bridging::fromJs<AsyncCallback<>>(rt, value.getProperty(rt, "remove"), jsInvoker);
45
+ return EventSubscription([listener = std::move(listener)]() mutable { listener(); });
46
+ }
47
+
48
+ static jsi::Object
49
+ toJs(jsi::Runtime &rt, const EventSubscription &eventSubscription, const std::shared_ptr<CallInvoker> &jsInvoker)
50
+ {
43
51
  auto result = jsi::Object(rt);
44
- result.setProperty(
45
- rt, "remove", bridging::toJs(rt, eventSubscription.remove_, jsInvoker));
52
+ result.setProperty(rt, "remove", bridging::toJs(rt, eventSubscription.remove_, jsInvoker));
46
53
  return result;
47
54
  }
48
55
  };
@@ -51,24 +58,21 @@ class IAsyncEventEmitter {
51
58
  public:
52
59
  IAsyncEventEmitter() noexcept = default;
53
60
  virtual ~IAsyncEventEmitter() noexcept = default;
54
- IAsyncEventEmitter(IAsyncEventEmitter&&) noexcept = default;
55
- IAsyncEventEmitter& operator=(IAsyncEventEmitter&&) noexcept = default;
56
- IAsyncEventEmitter(const IAsyncEventEmitter&) = delete;
57
- IAsyncEventEmitter& operator=(const IAsyncEventEmitter&) = delete;
58
-
59
- virtual jsi::Object get(
60
- jsi::Runtime& rt,
61
- const std::shared_ptr<CallInvoker>& jsInvoker) const = 0;
61
+ IAsyncEventEmitter(IAsyncEventEmitter &&) noexcept = default;
62
+ IAsyncEventEmitter &operator=(IAsyncEventEmitter &&) noexcept = default;
63
+ IAsyncEventEmitter(const IAsyncEventEmitter &) = delete;
64
+ IAsyncEventEmitter &operator=(const IAsyncEventEmitter &) = delete;
65
+
66
+ virtual jsi::Object get(jsi::Runtime &rt, const std::shared_ptr<CallInvoker> &jsInvoker) const = 0;
62
67
  };
63
68
 
64
69
  template <typename... Args>
65
70
  class AsyncEventEmitter : public IAsyncEventEmitter {
66
- static_assert(
67
- sizeof...(Args) <= 1,
68
- "AsyncEventEmitter must have at most one argument");
71
+ static_assert(sizeof...(Args) <= 1, "AsyncEventEmitter must have at most one argument");
69
72
 
70
73
  public:
71
- AsyncEventEmitter() : state_(std::make_shared<SharedState>()) {
74
+ AsyncEventEmitter() : state_(std::make_shared<SharedState>())
75
+ {
72
76
  listen_ = [state = state_](AsyncCallback<Args...> listener) {
73
77
  std::lock_guard<std::mutex> lock(state->mutex);
74
78
  auto listenerId = state->listenerId++;
@@ -80,30 +84,29 @@ class AsyncEventEmitter : public IAsyncEventEmitter {
80
84
  };
81
85
  }
82
86
  ~AsyncEventEmitter() override = default;
83
- AsyncEventEmitter(AsyncEventEmitter&&) noexcept = default;
84
- AsyncEventEmitter& operator=(AsyncEventEmitter&&) noexcept = default;
85
- AsyncEventEmitter(const AsyncEventEmitter&) = delete;
86
- AsyncEventEmitter& operator=(const AsyncEventEmitter&) = delete;
87
+ AsyncEventEmitter(AsyncEventEmitter &&) noexcept = default;
88
+ AsyncEventEmitter &operator=(AsyncEventEmitter &&) noexcept = default;
89
+ AsyncEventEmitter(const AsyncEventEmitter &) = delete;
90
+ AsyncEventEmitter &operator=(const AsyncEventEmitter &) = delete;
87
91
 
88
- void emit(std::function<jsi::Value(jsi::Runtime&)>&& converter) {
92
+ void emit(std::function<jsi::Value(jsi::Runtime &)> &&converter)
93
+ {
89
94
  std::lock_guard<std::mutex> lock(state_->mutex);
90
- for (auto& [_, listener] : state_->listeners) {
91
- listener.call([converter](jsi::Runtime& rt, jsi::Function& jsFunction) {
92
- jsFunction.call(rt, converter(rt));
93
- });
95
+ for (auto &[_, listener] : state_->listeners) {
96
+ listener.call([converter](jsi::Runtime &rt, jsi::Function &jsFunction) { jsFunction.call(rt, converter(rt)); });
94
97
  }
95
98
  }
96
99
 
97
- void emit(Args... value) {
100
+ void emit(Args... value)
101
+ {
98
102
  std::lock_guard<std::mutex> lock(state_->mutex);
99
- for (const auto& [_, listener] : state_->listeners) {
103
+ for (const auto &[_, listener] : state_->listeners) {
100
104
  listener.call(static_cast<Args>(value)...);
101
105
  }
102
106
  }
103
107
 
104
- jsi::Object get(
105
- jsi::Runtime& rt,
106
- const std::shared_ptr<CallInvoker>& jsInvoker) const override {
108
+ jsi::Object get(jsi::Runtime &rt, const std::shared_ptr<CallInvoker> &jsInvoker) const override
109
+ {
107
110
  return bridging::toJs(rt, listen_, jsInvoker);
108
111
  }
109
112
 
@@ -123,10 +126,9 @@ class AsyncEventEmitter : public IAsyncEventEmitter {
123
126
 
124
127
  template <typename... Args>
125
128
  struct Bridging<AsyncEventEmitter<Args...>> {
126
- static jsi::Object toJs(
127
- jsi::Runtime& rt,
128
- const AsyncEventEmitter<Args...>& eventEmitter,
129
- const std::shared_ptr<CallInvoker>& jsInvoker) {
129
+ static jsi::Object
130
+ toJs(jsi::Runtime &rt, const AsyncEventEmitter<Args...> &eventEmitter, const std::shared_ptr<CallInvoker> &jsInvoker)
131
+ {
130
132
  return eventEmitter.get(rt, jsInvoker);
131
133
  }
132
134
  };