/* * 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 import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.UIManager import com.facebook.react.common.annotations.StableReactNativeAPI import com.facebook.react.uimanager.ViewManager /** * Main interface for providing additional capabilities to the catalyst framework by couple of * different means: * 1. Registering new native modules * 1. Registering new JS modules that may be accessed from native modules or from other parts of the * native code (requiring JS modules from the package doesn't mean it will automatically be * included as a part of the JS bundle, so there should be a corresponding piece of code on JS * side that will require implementation of that JS module so that it gets bundled) * 1. Registering custom native views (view managers) and custom event types * 1. Registering natively packaged assets/resources (e.g. images) exposed to JS * * TODO(6788500, 6788507): Implement support for adding custom views, events and resources */ public interface ReactPackage { /** * @param reactContext react application context that can be used to create modules * @return list of native modules to register with the newly created catalyst instance This method * is deprecated in the new Architecture of React Native. */ @Deprecated(message = "Migrate to [BaseReactPackage] and implement [getModule] instead.") public fun createNativeModules(reactContext: ReactApplicationContext): List = emptyList() /** @return a list of view managers that should be registered with [UIManager] */ public fun createViewManagers( reactContext: ReactApplicationContext ): List> /** * Given a module name, it returns an instance of [NativeModule] for the name * * @param name name of the Native Module * @param reactContext [ReactApplicationContext] context for this */ @StableReactNativeAPI public fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? = null }