react-native 0.84.0-nightly-20251105-5ec5cc3a3 → 0.84.0-nightly-20251107-f8198f662
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.
- package/Libraries/Animated/createAnimatedComponent.js +1 -0
- package/Libraries/Components/Button.js +0 -3
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +2 -2
- package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +1 -1
- package/Libraries/StyleSheet/PlatformColorValueTypes.js.flow +4 -2
- package/React/Base/RCTVersion.m +1 -1
- package/React/CoreModules/React-CoreModules.podspec +1 -0
- package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +8 -8
- package/React/Fabric/Surface/RCTFabricSurface.mm +1 -1
- package/React/Runtime/React-RCTRuntime.podspec +1 -0
- package/ReactAndroid/api/ReactAndroid.api +0 -13
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.kt +2 -3
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +2 -6
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.kt +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.kt +1 -16
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +7 -7
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +11 -11
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +3 -3
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +3 -3
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +12 -12
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +3 -3
- package/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.kt +2 -35
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.kt +3 -36
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +4 -0
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +4 -0
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/VirtualViewContainerStateExperimental.kt +7 -0
- package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +11 -1
- package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp +36 -26
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +15 -15
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +4 -4
- package/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.cpp +3 -13
- package/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.h +1 -4
- package/ReactAndroid/src/main/jni/react/jni/CxxModuleWrapperBase.h +0 -24
- package/ReactAndroid/src/main/jni/react/jni/JavaModuleWrapper.cpp +0 -1
- package/ReactAndroid/src/main/jni/react/jni/ModuleRegistryBuilder.cpp +1 -29
- package/ReactAndroid/src/main/jni/react/jni/ModuleRegistryBuilder.h +1 -2
- package/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp +0 -2
- package/ReactAndroid/src/main/jni/react/runtime/jni/JReactInstance.cpp +2 -1
- package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp +1 -35
- package/ReactCommon/cxxreact/React-cxxreact.podspec +1 -0
- package/ReactCommon/cxxreact/ReactMarker.cpp +0 -1
- package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
- package/ReactCommon/jsiexecutor/CMakeLists.txt +3 -1
- package/ReactCommon/jsiexecutor/React-jsiexecutor.podspec +3 -0
- package/ReactCommon/jsiexecutor/jsireact/JSIExecutor.cpp +0 -40
- package/ReactCommon/jsiexecutor/jsireact/JSIExecutor.h +1 -6
- package/ReactCommon/jsinspector-modern/ConsoleTask.cpp +27 -0
- package/ReactCommon/jsinspector-modern/ConsoleTask.h +38 -0
- package/ReactCommon/jsinspector-modern/ConsoleTaskContext.cpp +46 -0
- package/ReactCommon/jsinspector-modern/ConsoleTaskContext.h +102 -0
- package/ReactCommon/jsinspector-modern/ConsoleTaskOrchestrator.cpp +55 -0
- package/ReactCommon/jsinspector-modern/ConsoleTaskOrchestrator.h +48 -0
- package/ReactCommon/jsinspector-modern/RuntimeAgent.h +1 -1
- package/ReactCommon/jsinspector-modern/RuntimeTarget.cpp +12 -0
- package/ReactCommon/jsinspector-modern/RuntimeTarget.h +16 -13
- package/ReactCommon/jsinspector-modern/RuntimeTargetConsole.cpp +106 -1
- package/ReactCommon/jsinspector-modern/tests/ConsoleCreateTaskTest.cpp +131 -0
- package/ReactCommon/jsinspector-modern/tests/ReactInstanceIntegrationTest.cpp +1 -0
- package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp +13 -2
- package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.h +6 -2
- package/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +4 -0
- package/ReactCommon/jsinspector-modern/tracing/TargetTracingAgent.h +5 -0
- package/ReactCommon/jsitooling/React-jsitooling.podspec +1 -0
- package/ReactCommon/jsitooling/react/runtime/JSRuntimeBindings.cpp +54 -0
- package/ReactCommon/jsitooling/react/runtime/JSRuntimeBindings.h +20 -0
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +5 -5
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +6 -6
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +83 -83
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +3 -3
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +5 -5
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +10 -10
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +2 -2
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +6 -6
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +3 -3
- package/ReactCommon/react/performance/timeline/CMakeLists.txt +1 -0
- package/ReactCommon/react/performance/timeline/PerformanceEntryReporter.cpp +9 -1
- package/ReactCommon/react/performance/timeline/React-performancetimeline.podspec +1 -0
- package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +21 -16
- package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp +9 -5
- package/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +67 -32
- package/ReactCommon/react/renderer/animationbackend/AnimationBackend.h +14 -2
- package/ReactCommon/react/renderer/core/EventDispatcher.cpp +1 -1
- package/ReactCommon/react/renderer/core/EventQueueProcessor.cpp +3 -3
- package/ReactCommon/react/renderer/scheduler/SurfaceHandler.cpp +0 -20
- package/ReactCommon/react/renderer/scheduler/SurfaceHandler.h +3 -3
- package/ReactCommon/react/renderer/scheduler/SurfaceManager.cpp +2 -3
- package/ReactCommon/react/runtime/ReactInstance.cpp +8 -6
- package/ReactCommon/react/runtime/ReactInstance.h +0 -1
- package/ReactCommon/react/utils/React-utils.podspec +3 -1
- package/flow/bom.js.flow +7 -0
- package/package.json +9 -8
- package/scripts/ios-configure-glog.sh +6 -1
- package/src/private/featureflags/ReactNativeFeatureFlags.js +6 -6
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +2 -2
- package/types_generated/Libraries/Components/Button.d.ts +1 -4
- package/types_generated/Libraries/StyleSheet/PlatformColorValueTypes.d.ts +3 -3
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapper.kt +0 -25
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapperBase.kt +0 -61
- package/ReactAndroid/src/main/jni/react/jni/CxxModuleWrapper.h +0 -37
package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.kt
CHANGED
|
@@ -7,14 +7,12 @@
|
|
|
7
7
|
|
|
8
8
|
package com.facebook.react.uimanager.events
|
|
9
9
|
|
|
10
|
-
import android.os.Handler
|
|
11
10
|
import android.view.Choreographer
|
|
12
11
|
import com.facebook.react.bridge.LifecycleEventListener
|
|
13
12
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
14
13
|
import com.facebook.react.bridge.ReactSoftExceptionLogger
|
|
15
14
|
import com.facebook.react.bridge.UiThreadUtil
|
|
16
15
|
import com.facebook.react.common.annotations.UnstableReactNativeAPI
|
|
17
|
-
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
|
|
18
16
|
import com.facebook.react.modules.core.ReactChoreographer
|
|
19
17
|
import com.facebook.react.uimanager.UIManagerHelper
|
|
20
18
|
import com.facebook.react.uimanager.common.UIManagerType
|
|
@@ -41,19 +39,6 @@ internal class FabricEventDispatcher(
|
|
|
41
39
|
private val postEventDispatchListeners = CopyOnWriteArrayList<BatchEventDispatchedListener>()
|
|
42
40
|
private val currentFrameCallback = ScheduleDispatchFrameCallback()
|
|
43
41
|
|
|
44
|
-
private var isDispatchScheduled = false
|
|
45
|
-
private val dispatchEventsRunnable = Runnable {
|
|
46
|
-
isDispatchScheduled = false
|
|
47
|
-
Systrace.beginSection(Systrace.TRACE_TAG_REACT, "BatchEventDispatchedListeners")
|
|
48
|
-
try {
|
|
49
|
-
for (listener in postEventDispatchListeners) {
|
|
50
|
-
listener.onBatchEventDispatched()
|
|
51
|
-
}
|
|
52
|
-
} finally {
|
|
53
|
-
Systrace.endSection(Systrace.TRACE_TAG_REACT)
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
42
|
init {
|
|
58
43
|
reactContext.addLifecycleEventListener(this)
|
|
59
44
|
eventEmitter.registerFabricEventEmitter(fabricEventEmitter)
|
|
@@ -109,14 +94,7 @@ internal class FabricEventDispatcher(
|
|
|
109
94
|
}
|
|
110
95
|
|
|
111
96
|
private fun scheduleDispatchOfBatchedEvents() {
|
|
112
|
-
|
|
113
|
-
if (!isDispatchScheduled) {
|
|
114
|
-
isDispatchScheduled = true
|
|
115
|
-
uiThreadHandler.postAtFrontOfQueue(dispatchEventsRunnable)
|
|
116
|
-
}
|
|
117
|
-
} else {
|
|
118
|
-
currentFrameCallback.maybeScheduleDispatchOfBatchedEvents()
|
|
119
|
-
}
|
|
97
|
+
currentFrameCallback.maybeScheduleDispatchOfBatchedEvents()
|
|
120
98
|
}
|
|
121
99
|
|
|
122
100
|
/** Add a listener to this EventDispatcher. */
|
|
@@ -139,9 +117,7 @@ internal class FabricEventDispatcher(
|
|
|
139
117
|
|
|
140
118
|
override fun onHostResume() {
|
|
141
119
|
scheduleDispatchOfBatchedEvents()
|
|
142
|
-
|
|
143
|
-
currentFrameCallback.resume()
|
|
144
|
-
}
|
|
120
|
+
currentFrameCallback.resume()
|
|
145
121
|
}
|
|
146
122
|
|
|
147
123
|
override fun onHostPause() {
|
|
@@ -165,12 +141,7 @@ internal class FabricEventDispatcher(
|
|
|
165
141
|
|
|
166
142
|
private fun cancelDispatchOfBatchedEvents() {
|
|
167
143
|
UiThreadUtil.assertOnUiThread()
|
|
168
|
-
|
|
169
|
-
isDispatchScheduled = false
|
|
170
|
-
uiThreadHandler.removeCallbacks(dispatchEventsRunnable)
|
|
171
|
-
} else {
|
|
172
|
-
currentFrameCallback.stop()
|
|
173
|
-
}
|
|
144
|
+
currentFrameCallback.stop()
|
|
174
145
|
}
|
|
175
146
|
|
|
176
147
|
private inner class ScheduleDispatchFrameCallback : Choreographer.FrameCallback {
|
|
@@ -229,8 +200,4 @@ internal class FabricEventDispatcher(
|
|
|
229
200
|
}
|
|
230
201
|
}
|
|
231
202
|
}
|
|
232
|
-
|
|
233
|
-
private companion object {
|
|
234
|
-
private val uiThreadHandler: Handler = UiThreadUtil.getUiThreadHandler()
|
|
235
|
-
}
|
|
236
203
|
}
|
package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java
CHANGED
|
@@ -291,6 +291,10 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
|
|
|
291
291
|
|
|
292
292
|
@Override
|
|
293
293
|
public void setRemoveClippedSubviews(boolean removeClippedSubviews) {
|
|
294
|
+
if (ReactNativeFeatureFlags.disableSubviewClippingAndroid()) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
|
|
294
298
|
if (removeClippedSubviews && mClippingRect == null) {
|
|
295
299
|
mClippingRect = new Rect();
|
|
296
300
|
}
|
|
@@ -719,6 +719,10 @@ public class ReactScrollView extends ScrollView
|
|
|
719
719
|
|
|
720
720
|
@Override
|
|
721
721
|
public void setRemoveClippedSubviews(boolean removeClippedSubviews) {
|
|
722
|
+
if (ReactNativeFeatureFlags.disableSubviewClippingAndroid()) {
|
|
723
|
+
return;
|
|
724
|
+
}
|
|
725
|
+
|
|
722
726
|
if (removeClippedSubviews && mClippingRect == null) {
|
|
723
727
|
mClippingRect = new Rect();
|
|
724
728
|
}
|
|
@@ -49,6 +49,13 @@ internal class VirtualViewContainerStateExperimental(scrollView: ViewGroup) :
|
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
override fun remove(virtualView: VirtualView) {
|
|
53
|
+
super.remove(virtualView)
|
|
54
|
+
HPV.remove(virtualView.virtualViewID)
|
|
55
|
+
P.remove(virtualView.virtualViewID)
|
|
56
|
+
V.remove(virtualView.virtualViewID)
|
|
57
|
+
}
|
|
58
|
+
|
|
52
59
|
/**
|
|
53
60
|
* Perform mode update check on a single VirtualView. Does not check other VirtualViews in the
|
|
54
61
|
* collection. Use carefully
|
|
@@ -32,6 +32,7 @@ import com.facebook.react.bridge.UiThreadUtil.assertOnUiThread
|
|
|
32
32
|
import com.facebook.react.bridge.UiThreadUtil.runOnUiThread
|
|
33
33
|
import com.facebook.react.common.ReactConstants.TAG
|
|
34
34
|
import com.facebook.react.config.ReactFeatureFlags
|
|
35
|
+
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
|
|
35
36
|
import com.facebook.react.touch.OnInterceptTouchEventListener
|
|
36
37
|
import com.facebook.react.touch.ReactHitSlopView
|
|
37
38
|
import com.facebook.react.touch.ReactInterceptingViewGroup
|
|
@@ -362,8 +363,17 @@ public open class ReactViewGroup public constructor(context: Context?) :
|
|
|
362
363
|
}
|
|
363
364
|
|
|
364
365
|
override var removeClippedSubviews: Boolean
|
|
365
|
-
get()
|
|
366
|
+
get() {
|
|
367
|
+
if (ReactNativeFeatureFlags.disableSubviewClippingAndroid()) {
|
|
368
|
+
return false
|
|
369
|
+
}
|
|
370
|
+
return _removeClippedSubviews
|
|
371
|
+
}
|
|
366
372
|
set(newValue) {
|
|
373
|
+
if (ReactNativeFeatureFlags.disableSubviewClippingAndroid()) {
|
|
374
|
+
return
|
|
375
|
+
}
|
|
376
|
+
|
|
367
377
|
if (newValue == _removeClippedSubviews) {
|
|
368
378
|
return
|
|
369
379
|
}
|
|
@@ -166,34 +166,39 @@ void FabricUIManagerBinding::startSurface(
|
|
|
166
166
|
return;
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
|
|
170
|
-
|
|
169
|
+
SurfaceHandler* surfaceHandler = nullptr;
|
|
170
|
+
{
|
|
171
|
+
std::unique_lock lock(surfaceHandlerRegistryMutex_);
|
|
172
|
+
auto [it, _] = surfaceHandlerRegistry_.try_emplace(
|
|
173
|
+
surfaceId,
|
|
174
|
+
std::in_place_index<0>,
|
|
175
|
+
moduleName->toStdString(),
|
|
176
|
+
surfaceId);
|
|
177
|
+
surfaceHandler = &std::get<SurfaceHandler>(it->second);
|
|
178
|
+
}
|
|
171
179
|
|
|
172
|
-
|
|
173
|
-
surfaceHandler.setContextContainer(scheduler->getContextContainer());
|
|
180
|
+
surfaceHandler->setContextContainer(scheduler->getContextContainer());
|
|
174
181
|
if (initialProps != nullptr) {
|
|
175
|
-
surfaceHandler
|
|
182
|
+
surfaceHandler->setProps(initialProps->consume());
|
|
176
183
|
}
|
|
177
|
-
surfaceHandler.constraintLayout({}, layoutContext);
|
|
178
184
|
|
|
179
|
-
|
|
185
|
+
auto layoutContext = LayoutContext{};
|
|
186
|
+
layoutContext.pointScaleFactor = pointScaleFactor_;
|
|
187
|
+
surfaceHandler->constraintLayout({}, layoutContext);
|
|
188
|
+
|
|
189
|
+
scheduler->registerSurface(*surfaceHandler);
|
|
180
190
|
|
|
181
191
|
auto mountingManager = getMountingManager("startSurface");
|
|
182
192
|
if (mountingManager != nullptr) {
|
|
183
193
|
mountingManager->onSurfaceStart(surfaceId);
|
|
184
194
|
}
|
|
185
195
|
|
|
186
|
-
surfaceHandler
|
|
196
|
+
surfaceHandler->start();
|
|
187
197
|
|
|
188
198
|
if (ReactNativeFeatureFlags::enableLayoutAnimationsOnAndroid()) {
|
|
189
|
-
surfaceHandler
|
|
199
|
+
surfaceHandler->getMountingCoordinator()->setMountingOverrideDelegate(
|
|
190
200
|
animationDriver_);
|
|
191
201
|
}
|
|
192
|
-
|
|
193
|
-
{
|
|
194
|
-
std::unique_lock lock(surfaceHandlerRegistryMutex_);
|
|
195
|
-
surfaceHandlerRegistry_.emplace(surfaceId, std::move(surfaceHandler));
|
|
196
|
-
}
|
|
197
202
|
}
|
|
198
203
|
|
|
199
204
|
jint FabricUIManagerBinding::findNextFocusableElement(
|
|
@@ -338,31 +343,36 @@ void FabricUIManagerBinding::startSurfaceWithConstraints(
|
|
|
338
343
|
constraints.layoutDirection =
|
|
339
344
|
isRTL != 0 ? LayoutDirection::RightToLeft : LayoutDirection::LeftToRight;
|
|
340
345
|
|
|
341
|
-
|
|
342
|
-
|
|
346
|
+
SurfaceHandler* surfaceHandler = nullptr;
|
|
347
|
+
{
|
|
348
|
+
std::unique_lock lock(surfaceHandlerRegistryMutex_);
|
|
349
|
+
auto [it, _] = surfaceHandlerRegistry_.try_emplace(
|
|
350
|
+
surfaceId,
|
|
351
|
+
std::in_place_index<0>,
|
|
352
|
+
moduleName->toStdString(),
|
|
353
|
+
surfaceId);
|
|
354
|
+
surfaceHandler = &std::get<SurfaceHandler>(it->second);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
surfaceHandler->setContextContainer(scheduler->getContextContainer());
|
|
343
358
|
if (initialProps != nullptr) {
|
|
344
|
-
surfaceHandler
|
|
359
|
+
surfaceHandler->setProps(initialProps->consume());
|
|
345
360
|
}
|
|
346
|
-
surfaceHandler
|
|
361
|
+
surfaceHandler->constraintLayout(constraints, context);
|
|
347
362
|
|
|
348
|
-
scheduler->registerSurface(surfaceHandler);
|
|
363
|
+
scheduler->registerSurface(*surfaceHandler);
|
|
349
364
|
|
|
350
365
|
auto mountingManager = getMountingManager("startSurfaceWithConstraints");
|
|
351
366
|
if (mountingManager != nullptr) {
|
|
352
367
|
mountingManager->onSurfaceStart(surfaceId);
|
|
353
368
|
}
|
|
354
369
|
|
|
355
|
-
surfaceHandler
|
|
370
|
+
surfaceHandler->start();
|
|
356
371
|
|
|
357
372
|
if (ReactNativeFeatureFlags::enableLayoutAnimationsOnAndroid()) {
|
|
358
|
-
surfaceHandler
|
|
373
|
+
surfaceHandler->getMountingCoordinator()->setMountingOverrideDelegate(
|
|
359
374
|
animationDriver_);
|
|
360
375
|
}
|
|
361
|
-
|
|
362
|
-
{
|
|
363
|
-
std::unique_lock lock(surfaceHandlerRegistryMutex_);
|
|
364
|
-
surfaceHandlerRegistry_.emplace(surfaceId, std::move(surfaceHandler));
|
|
365
|
-
}
|
|
366
376
|
}
|
|
367
377
|
|
|
368
378
|
// Used by non-bridgeless+Fabric
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<0527dbb4a838be34b80d76b11d18cea0>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -87,6 +87,12 @@ class ReactNativeFeatureFlagsJavaProvider
|
|
|
87
87
|
return method(javaProvider_);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
+
bool disableSubviewClippingAndroid() override {
|
|
91
|
+
static const auto method =
|
|
92
|
+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("disableSubviewClippingAndroid");
|
|
93
|
+
return method(javaProvider_);
|
|
94
|
+
}
|
|
95
|
+
|
|
90
96
|
bool disableTextLayoutManagerCacheAndroid() override {
|
|
91
97
|
static const auto method =
|
|
92
98
|
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("disableTextLayoutManagerCacheAndroid");
|
|
@@ -471,12 +477,6 @@ class ReactNativeFeatureFlagsJavaProvider
|
|
|
471
477
|
return method(javaProvider_);
|
|
472
478
|
}
|
|
473
479
|
|
|
474
|
-
bool useOptimizedEventBatchingOnAndroid() override {
|
|
475
|
-
static const auto method =
|
|
476
|
-
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("useOptimizedEventBatchingOnAndroid");
|
|
477
|
-
return method(javaProvider_);
|
|
478
|
-
}
|
|
479
|
-
|
|
480
480
|
bool useRawPropsJsiValue() override {
|
|
481
481
|
static const auto method =
|
|
482
482
|
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("useRawPropsJsiValue");
|
|
@@ -575,6 +575,11 @@ bool JReactNativeFeatureFlagsCxxInterop::disableOldAndroidAttachmentMetricsWorka
|
|
|
575
575
|
return ReactNativeFeatureFlags::disableOldAndroidAttachmentMetricsWorkarounds();
|
|
576
576
|
}
|
|
577
577
|
|
|
578
|
+
bool JReactNativeFeatureFlagsCxxInterop::disableSubviewClippingAndroid(
|
|
579
|
+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
580
|
+
return ReactNativeFeatureFlags::disableSubviewClippingAndroid();
|
|
581
|
+
}
|
|
582
|
+
|
|
578
583
|
bool JReactNativeFeatureFlagsCxxInterop::disableTextLayoutManagerCacheAndroid(
|
|
579
584
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
580
585
|
return ReactNativeFeatureFlags::disableTextLayoutManagerCacheAndroid();
|
|
@@ -895,11 +900,6 @@ bool JReactNativeFeatureFlagsCxxInterop::useNativeViewConfigsInBridgelessMode(
|
|
|
895
900
|
return ReactNativeFeatureFlags::useNativeViewConfigsInBridgelessMode();
|
|
896
901
|
}
|
|
897
902
|
|
|
898
|
-
bool JReactNativeFeatureFlagsCxxInterop::useOptimizedEventBatchingOnAndroid(
|
|
899
|
-
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
900
|
-
return ReactNativeFeatureFlags::useOptimizedEventBatchingOnAndroid();
|
|
901
|
-
}
|
|
902
|
-
|
|
903
903
|
bool JReactNativeFeatureFlagsCxxInterop::useRawPropsJsiValue(
|
|
904
904
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
905
905
|
return ReactNativeFeatureFlags::useRawPropsJsiValue();
|
|
@@ -1000,6 +1000,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
|
|
1000
1000
|
makeNativeMethod(
|
|
1001
1001
|
"disableOldAndroidAttachmentMetricsWorkarounds",
|
|
1002
1002
|
JReactNativeFeatureFlagsCxxInterop::disableOldAndroidAttachmentMetricsWorkarounds),
|
|
1003
|
+
makeNativeMethod(
|
|
1004
|
+
"disableSubviewClippingAndroid",
|
|
1005
|
+
JReactNativeFeatureFlagsCxxInterop::disableSubviewClippingAndroid),
|
|
1003
1006
|
makeNativeMethod(
|
|
1004
1007
|
"disableTextLayoutManagerCacheAndroid",
|
|
1005
1008
|
JReactNativeFeatureFlagsCxxInterop::disableTextLayoutManagerCacheAndroid),
|
|
@@ -1192,9 +1195,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
|
|
1192
1195
|
makeNativeMethod(
|
|
1193
1196
|
"useNativeViewConfigsInBridgelessMode",
|
|
1194
1197
|
JReactNativeFeatureFlagsCxxInterop::useNativeViewConfigsInBridgelessMode),
|
|
1195
|
-
makeNativeMethod(
|
|
1196
|
-
"useOptimizedEventBatchingOnAndroid",
|
|
1197
|
-
JReactNativeFeatureFlagsCxxInterop::useOptimizedEventBatchingOnAndroid),
|
|
1198
1198
|
makeNativeMethod(
|
|
1199
1199
|
"useRawPropsJsiValue",
|
|
1200
1200
|
JReactNativeFeatureFlagsCxxInterop::useRawPropsJsiValue),
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<a1deb0145d8c51d608903e1704e96b8d>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -54,6 +54,9 @@ class JReactNativeFeatureFlagsCxxInterop
|
|
|
54
54
|
static bool disableOldAndroidAttachmentMetricsWorkarounds(
|
|
55
55
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
56
56
|
|
|
57
|
+
static bool disableSubviewClippingAndroid(
|
|
58
|
+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
59
|
+
|
|
57
60
|
static bool disableTextLayoutManagerCacheAndroid(
|
|
58
61
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
59
62
|
|
|
@@ -246,9 +249,6 @@ class JReactNativeFeatureFlagsCxxInterop
|
|
|
246
249
|
static bool useNativeViewConfigsInBridgelessMode(
|
|
247
250
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
248
251
|
|
|
249
|
-
static bool useOptimizedEventBatchingOnAndroid(
|
|
250
|
-
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
251
|
-
|
|
252
252
|
static bool useRawPropsJsiValue(
|
|
253
253
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
254
254
|
|
|
@@ -164,8 +164,6 @@ void CatalystInstanceImpl::initializeBridge(
|
|
|
164
164
|
jni::alias_ref<JavaMessageQueueThread::javaobject> nativeModulesQueue,
|
|
165
165
|
jni::alias_ref<jni::JCollection<JavaModuleWrapper::javaobject>::javaobject>
|
|
166
166
|
javaModules,
|
|
167
|
-
jni::alias_ref<jni::JCollection<ModuleHolder::javaobject>::javaobject>
|
|
168
|
-
cxxModules,
|
|
169
167
|
jni::alias_ref<ReactInstanceManagerInspectorTarget::javaobject>
|
|
170
168
|
inspectorTarget) {
|
|
171
169
|
set_react_native_logfunc(&log);
|
|
@@ -194,10 +192,7 @@ void CatalystInstanceImpl::initializeBridge(
|
|
|
194
192
|
// stack.
|
|
195
193
|
|
|
196
194
|
moduleRegistry_ = std::make_shared<ModuleRegistry>(buildNativeModuleList(
|
|
197
|
-
std::weak_ptr<Instance>(instance_),
|
|
198
|
-
javaModules,
|
|
199
|
-
cxxModules,
|
|
200
|
-
moduleMessageQueue_));
|
|
195
|
+
std::weak_ptr<Instance>(instance_), javaModules, moduleMessageQueue_));
|
|
201
196
|
|
|
202
197
|
instance_->initializeBridge(
|
|
203
198
|
std::make_unique<InstanceCallbackImpl>(callback),
|
|
@@ -211,14 +206,9 @@ void CatalystInstanceImpl::initializeBridge(
|
|
|
211
206
|
|
|
212
207
|
void CatalystInstanceImpl::extendNativeModules(
|
|
213
208
|
jni::alias_ref<jni::JCollection<JavaModuleWrapper::javaobject>::javaobject>
|
|
214
|
-
javaModules
|
|
215
|
-
jni::alias_ref<jni::JCollection<ModuleHolder::javaobject>::javaobject>
|
|
216
|
-
cxxModules) {
|
|
209
|
+
javaModules) {
|
|
217
210
|
moduleRegistry_->registerModules(buildNativeModuleList(
|
|
218
|
-
std::weak_ptr<Instance>(instance_),
|
|
219
|
-
javaModules,
|
|
220
|
-
cxxModules,
|
|
221
|
-
moduleMessageQueue_));
|
|
211
|
+
std::weak_ptr<Instance>(instance_), javaModules, moduleMessageQueue_));
|
|
222
212
|
}
|
|
223
213
|
|
|
224
214
|
void CatalystInstanceImpl::jniSetSourceURL(const std::string& sourceURL) {
|
|
@@ -60,12 +60,9 @@ class [[deprecated("This API will be removed along with the legacy architecture.
|
|
|
60
60
|
jni::alias_ref<JavaMessageQueueThread::javaobject> jsQueue,
|
|
61
61
|
jni::alias_ref<JavaMessageQueueThread::javaobject> nativeModulesQueue,
|
|
62
62
|
jni::alias_ref<jni::JCollection<JavaModuleWrapper::javaobject>::javaobject> javaModules,
|
|
63
|
-
jni::alias_ref<jni::JCollection<ModuleHolder::javaobject>::javaobject> cxxModules,
|
|
64
63
|
jni::alias_ref<ReactInstanceManagerInspectorTarget::javaobject> inspectorTarget);
|
|
65
64
|
|
|
66
|
-
void extendNativeModules(
|
|
67
|
-
jni::alias_ref<jni::JCollection<JavaModuleWrapper::javaobject>::javaobject> javaModules,
|
|
68
|
-
jni::alias_ref<jni::JCollection<ModuleHolder::javaobject>::javaobject> cxxModules);
|
|
65
|
+
void extendNativeModules(jni::alias_ref<jni::JCollection<JavaModuleWrapper::javaobject>::javaobject> javaModules);
|
|
69
66
|
|
|
70
67
|
/**
|
|
71
68
|
* Sets the source URL of the underlying bridge without loading any JS code.
|
|
@@ -7,10 +7,6 @@
|
|
|
7
7
|
|
|
8
8
|
#pragma once
|
|
9
9
|
|
|
10
|
-
#include <memory>
|
|
11
|
-
#include <string>
|
|
12
|
-
|
|
13
|
-
#include <cxxreact/CxxModule.h>
|
|
14
10
|
#include <fbjni/fbjni.h>
|
|
15
11
|
|
|
16
12
|
namespace facebook::react {
|
|
@@ -19,24 +15,4 @@ struct JNativeModule : jni::JavaClass<JNativeModule> {
|
|
|
19
15
|
constexpr static const char *const kJavaDescriptor = "Lcom/facebook/react/bridge/NativeModule;";
|
|
20
16
|
};
|
|
21
17
|
|
|
22
|
-
/**
|
|
23
|
-
* The C++ part of a CxxModuleWrapper is not a unique class, but it
|
|
24
|
-
* must extend this base class.
|
|
25
|
-
*/
|
|
26
|
-
class CxxModuleWrapperBase : public jni::HybridClass<CxxModuleWrapperBase, JNativeModule> {
|
|
27
|
-
public:
|
|
28
|
-
constexpr static const char *const kJavaDescriptor = "Lcom/facebook/react/bridge/CxxModuleWrapperBase;";
|
|
29
|
-
|
|
30
|
-
static void registerNatives()
|
|
31
|
-
{
|
|
32
|
-
registerHybrid({makeNativeMethod("getName", CxxModuleWrapperBase::getName)});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// JNI method
|
|
36
|
-
virtual std::string getName() = 0;
|
|
37
|
-
|
|
38
|
-
// Called by ModuleRegistryBuilder
|
|
39
|
-
virtual std::unique_ptr<xplat::module::CxxModule> getModule() = 0;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
18
|
} // namespace facebook::react
|
|
@@ -24,30 +24,13 @@ std::string ModuleHolder::getName() const {
|
|
|
24
24
|
|
|
25
25
|
xplat::module::CxxModule::Provider ModuleHolder::getProvider(
|
|
26
26
|
const std::string& moduleName) const {
|
|
27
|
-
return [self = jni::make_global(self()), moduleName] {
|
|
28
|
-
static auto getModule =
|
|
29
|
-
ModuleHolder::javaClassStatic()->getMethod<JNativeModule::javaobject()>(
|
|
30
|
-
"getModule");
|
|
31
|
-
// This is the call which uses the lazy Java Provider to instantiate the
|
|
32
|
-
// Java CxxModuleWrapper which contains the CxxModule.
|
|
33
|
-
auto module = getModule(self);
|
|
34
|
-
|
|
35
|
-
CHECK(module->isInstanceOf(CxxModuleWrapperBase::javaClassStatic()))
|
|
36
|
-
<< "NativeModule '" << moduleName << "' isn't a C++ module";
|
|
37
|
-
|
|
38
|
-
auto cxxModule =
|
|
39
|
-
jni::static_ref_cast<CxxModuleWrapperBase::javaobject>(module);
|
|
40
|
-
// Then, we grab the CxxModule from the wrapper, which is no longer needed.
|
|
41
|
-
return cxxModule->cthis()->getModule();
|
|
42
|
-
};
|
|
27
|
+
return [self = jni::make_global(self()), moduleName] { return nullptr; };
|
|
43
28
|
}
|
|
44
29
|
|
|
45
30
|
std::vector<std::unique_ptr<NativeModule>> buildNativeModuleList(
|
|
46
31
|
std::weak_ptr<Instance> winstance,
|
|
47
32
|
jni::alias_ref<jni::JCollection<JavaModuleWrapper::javaobject>::javaobject>
|
|
48
33
|
javaModules,
|
|
49
|
-
jni::alias_ref<jni::JCollection<ModuleHolder::javaobject>::javaobject>
|
|
50
|
-
cxxModules,
|
|
51
34
|
std::shared_ptr<MessageQueueThread> moduleMessageQueue) {
|
|
52
35
|
std::vector<std::unique_ptr<NativeModule>> modules;
|
|
53
36
|
if (javaModules) {
|
|
@@ -57,17 +40,6 @@ std::vector<std::unique_ptr<NativeModule>> buildNativeModuleList(
|
|
|
57
40
|
winstance, jm, moduleMessageQueue));
|
|
58
41
|
}
|
|
59
42
|
}
|
|
60
|
-
if (cxxModules) {
|
|
61
|
-
for (const auto& cm : *cxxModules) {
|
|
62
|
-
std::string moduleName = cm->getName();
|
|
63
|
-
modules.emplace_back(
|
|
64
|
-
std::make_unique<CxxNativeModule>(
|
|
65
|
-
winstance,
|
|
66
|
-
moduleName,
|
|
67
|
-
cm->getProvider(moduleName),
|
|
68
|
-
moduleMessageQueue));
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
43
|
return modules;
|
|
72
44
|
}
|
|
73
45
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
#include <cxxreact/ModuleRegistry.h>
|
|
12
12
|
#include <fbjni/fbjni.h>
|
|
13
13
|
|
|
14
|
-
#include "
|
|
14
|
+
#include "CxxModuleWrapperBase.h"
|
|
15
15
|
#include "JavaModuleWrapper.h"
|
|
16
16
|
|
|
17
17
|
#ifndef RCT_REMOVE_LEGACY_ARCH
|
|
@@ -33,7 +33,6 @@ class [[deprecated("This API will be removed along with the legacy architecture.
|
|
|
33
33
|
std::vector<std::unique_ptr<NativeModule>> buildNativeModuleList(
|
|
34
34
|
std::weak_ptr<Instance> winstance,
|
|
35
35
|
jni::alias_ref<jni::JCollection<JavaModuleWrapper::javaobject>::javaobject> javaModules,
|
|
36
|
-
jni::alias_ref<jni::JCollection<ModuleHolder::javaobject>::javaobject> cxxModules,
|
|
37
36
|
std::shared_ptr<MessageQueueThread> moduleMessageQueue);
|
|
38
37
|
} // namespace facebook::react
|
|
39
38
|
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
#include <fbjni/fbjni.h>
|
|
12
12
|
|
|
13
13
|
#include "CatalystInstanceImpl.h"
|
|
14
|
-
#include "CxxModuleWrapperBase.h"
|
|
15
14
|
#include "InspectorNetworkRequestListener.h"
|
|
16
15
|
#include "JavaScriptExecutorHolder.h"
|
|
17
16
|
#include "ReactInstanceManagerInspectorTarget.h"
|
|
@@ -42,7 +41,6 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
|
|
|
42
41
|
CatalystInstanceImpl::registerNatives();
|
|
43
42
|
#pragma clang diagnostic pop
|
|
44
43
|
#endif
|
|
45
|
-
CxxModuleWrapperBase::registerNatives();
|
|
46
44
|
ReactInstanceManagerInspectorTarget::registerNatives();
|
|
47
45
|
InspectorNetworkRequestListener::registerNatives();
|
|
48
46
|
});
|
|
@@ -13,11 +13,12 @@
|
|
|
13
13
|
#include <glog/logging.h>
|
|
14
14
|
#include <jni.h>
|
|
15
15
|
#include <jsi/jsi.h>
|
|
16
|
-
#include <jsireact/JSIExecutor.h>
|
|
17
16
|
#include <react/jni/JRuntimeExecutor.h>
|
|
18
17
|
#include <react/jni/JSLogging.h>
|
|
19
18
|
#include <react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.h>
|
|
20
19
|
#include <react/runtime/BridgelessNativeMethodCallInvoker.h>
|
|
20
|
+
#include <react/runtime/JSRuntimeBindings.h>
|
|
21
|
+
|
|
21
22
|
#include "JavaTimerRegistry.h"
|
|
22
23
|
|
|
23
24
|
namespace facebook::react {
|
|
@@ -17,10 +17,9 @@
|
|
|
17
17
|
#include <ReactCommon/BindingsInstallerHolder.h>
|
|
18
18
|
#include <ReactCommon/CxxTurboModuleUtils.h>
|
|
19
19
|
#include <ReactCommon/JavaInteropTurboModule.h>
|
|
20
|
-
#include <ReactCommon/TurboCxxModule.h>
|
|
21
20
|
#include <ReactCommon/TurboModuleBinding.h>
|
|
22
21
|
#include <ReactCommon/TurboModulePerfLogger.h>
|
|
23
|
-
#include <react/jni/
|
|
22
|
+
#include <react/jni/CxxModuleWrapperBase.h>
|
|
24
23
|
|
|
25
24
|
namespace facebook::react {
|
|
26
25
|
|
|
@@ -208,22 +207,6 @@ std::shared_ptr<TurboModule> TurboModuleManager::getTurboModule(
|
|
|
208
207
|
return turboModule;
|
|
209
208
|
}
|
|
210
209
|
|
|
211
|
-
static auto getTurboLegacyCxxModule =
|
|
212
|
-
javaPart->getClass()
|
|
213
|
-
->getMethod<jni::alias_ref<CxxModuleWrapper::javaobject>(
|
|
214
|
-
const std::string&)>("getTurboLegacyCxxModule");
|
|
215
|
-
auto legacyCxxModule = getTurboLegacyCxxModule(javaPart.get(), name);
|
|
216
|
-
if (legacyCxxModule) {
|
|
217
|
-
TurboModulePerfLogger::moduleJSRequireEndingStart(moduleName);
|
|
218
|
-
|
|
219
|
-
auto turboModule = std::make_shared<react::TurboCxxModule>(
|
|
220
|
-
legacyCxxModule->cthis()->getModule(), jsCallInvoker_);
|
|
221
|
-
turboModuleCache_.insert({name, turboModule});
|
|
222
|
-
|
|
223
|
-
TurboModulePerfLogger::moduleJSRequireEndingEnd(moduleName);
|
|
224
|
-
return turboModule;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
210
|
return nullptr;
|
|
228
211
|
}
|
|
229
212
|
|
|
@@ -260,23 +243,6 @@ std::shared_ptr<TurboModule> TurboModuleManager::getLegacyModule(
|
|
|
260
243
|
|
|
261
244
|
TurboModulePerfLogger::moduleJSRequireBeginningEnd(moduleName);
|
|
262
245
|
|
|
263
|
-
static auto getLegacyCxxModule =
|
|
264
|
-
javaPart->getClass()
|
|
265
|
-
->getMethod<jni::alias_ref<CxxModuleWrapper::javaobject>(
|
|
266
|
-
const std::string&)>("getLegacyCxxModule");
|
|
267
|
-
auto legacyCxxModule = getLegacyCxxModule(javaPart.get(), name);
|
|
268
|
-
|
|
269
|
-
if (legacyCxxModule) {
|
|
270
|
-
TurboModulePerfLogger::moduleJSRequireEndingStart(moduleName);
|
|
271
|
-
|
|
272
|
-
auto turboModule = std::make_shared<react::TurboCxxModule>(
|
|
273
|
-
legacyCxxModule->cthis()->getModule(), jsCallInvoker_);
|
|
274
|
-
legacyModuleCache_.insert({name, turboModule});
|
|
275
|
-
|
|
276
|
-
TurboModulePerfLogger::moduleJSRequireEndingEnd(moduleName);
|
|
277
|
-
return turboModule;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
246
|
static auto getLegacyJavaModule =
|
|
281
247
|
javaPart->getClass()
|
|
282
248
|
->getMethod<jni::alias_ref<JNativeModule>(const std::string&)>(
|
|
@@ -44,6 +44,7 @@ Pod::Spec.new do |s|
|
|
|
44
44
|
s.dependency "React-logger", version
|
|
45
45
|
s.dependency "React-debug", version
|
|
46
46
|
s.dependency "React-timing", version
|
|
47
|
+
add_dependency(s, "React-utils", :additional_framework_paths => ["react/utils/platform/ios"])
|
|
47
48
|
|
|
48
49
|
s.resource_bundles = {'React-cxxreact_privacy' => 'PrivacyInfo.xcprivacy'}
|
|
49
50
|
|
|
@@ -22,7 +22,7 @@ constexpr struct {
|
|
|
22
22
|
int32_t Major = 0;
|
|
23
23
|
int32_t Minor = 84;
|
|
24
24
|
int32_t Patch = 0;
|
|
25
|
-
std::string_view Prerelease = "nightly-
|
|
25
|
+
std::string_view Prerelease = "nightly-20251107-f8198f662";
|
|
26
26
|
} ReactNativeVersion;
|
|
27
27
|
|
|
28
28
|
} // namespace facebook::react
|