Inline DefaultJSIModulePackage (#41094)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41094

Inlining the `DefaultJSIModulePackage` in `DefaultReactNativeHost` for simplification

Changelog:
[Internal] internal

Reviewed By: mdvacca

Differential Revision: D50468945

fbshipit-source-id: 9c458044518db1db38cdac590da542be497cecaf
This commit is contained in:
Arushi Kesarwani
2023-10-23 16:15:14 -07:00
committed by Facebook GitHub Bot
parent 9b6e2d21d1
commit 85356fdf55
2 changed files with 33 additions and 60 deletions
@@ -1,59 +0,0 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package com.facebook.react.defaults
import com.facebook.react.ReactNativeHost
import com.facebook.react.bridge.JSIModulePackage
import com.facebook.react.bridge.JSIModuleProvider
import com.facebook.react.bridge.JSIModuleSpec
import com.facebook.react.bridge.JSIModuleType
import com.facebook.react.bridge.JavaScriptContextHolder
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.UIManager
import com.facebook.react.fabric.ComponentFactory
import com.facebook.react.fabric.FabricJSIModuleProvider
import com.facebook.react.fabric.ReactNativeConfig
import com.facebook.react.uimanager.ViewManagerRegistry
/**
* A utility class that allows users to create a JSIModulePackage to use Fabric. This essentially
* allows users to just provide C++ implementation for the methods of `DefaultComponentsRegistry`
* without providing all the extra machinery for the New Architecture.
*
* `ReactNativeHost` is required to create Fabric's ViewManagers.
*/
class DefaultJSIModulePackage(private val reactNativeHost: ReactNativeHost) : JSIModulePackage {
override fun getJSIModules(
reactApplicationContext: ReactApplicationContext,
jsContext: JavaScriptContextHolder
): List<JSIModuleSpec<UIManager>> =
listOf<JSIModuleSpec<UIManager>>(JSIModuleForFabric(reactApplicationContext, reactNativeHost))
private inner class JSIModuleForFabric(
private val reactApplicationContext: ReactApplicationContext,
private val reactNativeHost: ReactNativeHost
) : JSIModuleSpec<UIManager> {
override fun getJSIModuleType(): JSIModuleType = JSIModuleType.UIManager
override fun getJSIModuleProvider(): JSIModuleProvider<UIManager> {
val componentFactory = ComponentFactory()
DefaultComponentsRegistry.register(componentFactory)
val viewManagers =
reactNativeHost.reactInstanceManager.getOrCreateViewManagers(reactApplicationContext)
val viewManagerRegistry = ViewManagerRegistry(viewManagers)
return FabricJSIModuleProvider(
reactApplicationContext,
componentFactory,
ReactNativeConfig.DEFAULT_CONFIG,
viewManagerRegistry)
}
}
}
@@ -11,9 +11,19 @@ import android.app.Application
import android.content.Context
import com.facebook.react.JSEngineResolutionAlgorithm
import com.facebook.react.ReactHost
import com.facebook.react.ReactInstanceManager
import com.facebook.react.ReactNativeHost
import com.facebook.react.ReactPackageTurboModuleManagerDelegate
import com.facebook.react.bridge.JSIModulePackage
import com.facebook.react.bridge.JSIModuleProvider
import com.facebook.react.bridge.JSIModuleSpec
import com.facebook.react.bridge.JSIModuleType
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.UIManager
import com.facebook.react.fabric.ComponentFactory
import com.facebook.react.fabric.FabricJSIModuleProvider
import com.facebook.react.fabric.ReactNativeConfig
import com.facebook.react.uimanager.ViewManagerRegistry
/**
* A utility class that allows you to simplify the setup of a [ReactNativeHost] for new apps in Open
@@ -38,7 +48,29 @@ protected constructor(
override fun getJSIModulePackage(): JSIModulePackage? =
if (isNewArchEnabled) {
DefaultJSIModulePackage(this)
JSIModulePackage { reactApplicationContext: ReactApplicationContext, _ ->
listOf(
object : JSIModuleSpec<UIManager> {
override fun getJSIModuleType(): JSIModuleType = JSIModuleType.UIManager
override fun getJSIModuleProvider(): JSIModuleProvider<UIManager> {
val componentFactory = ComponentFactory()
DefaultComponentsRegistry.register(componentFactory)
val reactInstanceManager: ReactInstanceManager = getReactInstanceManager()
val viewManagers =
reactInstanceManager.getOrCreateViewManagers(reactApplicationContext)
val viewManagerRegistry = ViewManagerRegistry(viewManagers)
return FabricJSIModuleProvider(
reactApplicationContext,
componentFactory,
ReactNativeConfig.DEFAULT_CONFIG,
viewManagerRegistry)
}
})
}
} else {
null
}