package com.smartechbasereactnative import android.util.Log import com.facebook.react.TurboReactPackage import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.module.model.ReactModuleInfo import com.facebook.react.module.model.ReactModuleInfoProvider import com.smartechbasereactnative.Constants.Constants.REACT_MODULE_NAME import java.util.HashMap class SmartechBaseReactNativePackage : TurboReactPackage() { override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? { return if (name == REACT_MODULE_NAME) { SmartechBaseReactNativeModule(reactContext) } else { null } } override fun getReactModuleInfoProvider(): ReactModuleInfoProvider { return ReactModuleInfoProvider { mapOf(REACT_MODULE_NAME to createReactModuleInfo()) } } private fun createReactModuleInfo(): ReactModuleInfo { return try { createModernReactModuleInfo() } catch (e: Exception) { Log.d(TAG, "Modern constructor not found, using legacy constructor") createLegacyReactModuleInfo() } } private fun createModernReactModuleInfo(): ReactModuleInfo { // RN 0.77+ - Constructor without hasConstants parameter val constructor = ReactModuleInfo::class.java.getConstructor( String::class.java, String::class.java, Boolean::class.javaPrimitiveType, Boolean::class.javaPrimitiveType, Boolean::class.javaPrimitiveType, Boolean::class.javaPrimitiveType ) return constructor.newInstance( REACT_MODULE_NAME, REACT_MODULE_NAME, false, // canOverrideExistingModule false, // needsEagerInit false, // isCxxModule true // isTurboModule ) as ReactModuleInfo } private fun createLegacyReactModuleInfo(): ReactModuleInfo { // RN 0.76 and below - Constructor with hasConstants parameter val constructor = ReactModuleInfo::class.java.getConstructor( String::class.java, String::class.java, Boolean::class.javaPrimitiveType, Boolean::class.javaPrimitiveType, Boolean::class.javaPrimitiveType, Boolean::class.javaPrimitiveType, Boolean::class.javaPrimitiveType ) return constructor.newInstance( REACT_MODULE_NAME, REACT_MODULE_NAME, false, // canOverrideExistingModule false, // needsEagerInit true, // hasConstants (deprecated) false, // isCxxModule true // isTurboModule ) as ReactModuleInfo } companion object { private const val TAG = "SmartechBaseReactNativePackage" } }