1// Copyright © 2018 650 Industries. All rights reserved. 2 3#import "EXScopedModuleRegistry.h" 4 5#import "EXScopedModuleRegistryAdapter.h" 6#import "EXSensorsManagerBinding.h" 7#import "EXConstantsBinding.h" 8#import "EXScopedFileSystemModule.h" 9#import "EXUnversioned.h" 10#import "EXScopedFilePermissionModule.h" 11#import "EXScopedFontLoader.h" 12#import "EXScopedSecureStore.h" 13#import "EXScopedAmplitude.h" 14#import "EXScopedPermissions.h" 15#import "EXScopedSegment.h" 16#import "EXScopedLocalAuthentication.h" 17#import "EXScopedBranch.h" 18#import "EXScopedErrorRecoveryModule.h" 19#import "EXScopedFacebook.h" 20#import "EXScopedFirebaseCore.h" 21 22#import "EXScopedReactNativeAdapter.h" 23#import "EXExpoUserNotificationCenterProxy.h" 24 25#import "EXScopedNotificationsEmitter.h" 26 27#if __has_include(<EXTaskManager/EXTaskManager.h>) 28#import <EXTaskManager/EXTaskManager.h> 29#endif 30 31@implementation EXScopedModuleRegistryAdapter 32 33- (UMModuleRegistry *)moduleRegistryForParams:(NSDictionary *)params forExperienceId:(NSString *)experienceId withKernelServices:(NSDictionary *)kernelServices 34{ 35 UMModuleRegistry *moduleRegistry = [self.moduleRegistryProvider moduleRegistry]; 36 37#if __has_include(<EXConstants/EXConstantsService.h>) 38 EXConstantsBinding *constantsBinding = [[EXConstantsBinding alloc] initWithExperienceId:experienceId andParams:params]; 39 [moduleRegistry registerInternalModule:constantsBinding]; 40#endif 41 42#if __has_include(<EXFacebook/EXFacebook.h>) 43 // only override in Expo client 44 if ([params[@"constants"][@"appOwnership"] isEqualToString:@"expo"]) { 45 EXScopedFacebook *scopedFacebook = [[EXScopedFacebook alloc] initWithExperienceId:experienceId andParams:params]; 46 [moduleRegistry registerExportedModule:scopedFacebook]; 47 } 48#endif 49 50#if __has_include(<EXFileSystem/EXFileSystem.h>) 51 EXScopedFileSystemModule *fileSystemModule = [[EXScopedFileSystemModule alloc] initWithExperienceId:experienceId andConstantsBinding:constantsBinding]; 52 [moduleRegistry registerExportedModule:fileSystemModule]; 53 [moduleRegistry registerInternalModule:fileSystemModule]; 54#endif 55 56#if __has_include(<EXFont/EXFontLoader.h>) 57 EXScopedFontLoader *fontModule = [[EXScopedFontLoader alloc] init]; 58 [moduleRegistry registerExportedModule:fontModule]; 59#endif 60 61#if __has_include(<EXSensors/EXSensorsManager.h>) 62 EXSensorsManagerBinding *sensorsManagerBinding = [[EXSensorsManagerBinding alloc] initWithExperienceId:experienceId andKernelService:kernelServices[EX_UNVERSIONED(@"EXSensorManager")]]; 63 [moduleRegistry registerInternalModule:sensorsManagerBinding]; 64#endif 65 66 EXScopedReactNativeAdapter *reactNativeAdapter = [[EXScopedReactNativeAdapter alloc] init]; 67 [moduleRegistry registerInternalModule:reactNativeAdapter]; 68 69 EXExpoUserNotificationCenterProxy *userNotificationCenter = [[EXExpoUserNotificationCenterProxy alloc] initWithUserNotificationCenter:kernelServices[EX_UNVERSIONED(@"EXUserNotificationCenter")]]; 70 [moduleRegistry registerInternalModule:userNotificationCenter]; 71 72#if __has_include(<EXFileSystem/EXFilePermissionModule.h>) 73 EXScopedFilePermissionModule *filePermissionModule = [[EXScopedFilePermissionModule alloc] init]; 74 [moduleRegistry registerInternalModule:filePermissionModule]; 75#endif 76 77#if __has_include(<EXSecureStore/EXSecureStore.h>) 78 EXScopedSecureStore *secureStoreModule = [[EXScopedSecureStore alloc] initWithExperienceId:experienceId]; 79 [moduleRegistry registerExportedModule:secureStoreModule]; 80#endif 81 82#if __has_include(<EXAmplitude/EXAmplitude.h>) 83 EXScopedAmplitude *amplitudeModule = [[EXScopedAmplitude alloc] initWithExperienceId:experienceId]; 84 [moduleRegistry registerExportedModule:amplitudeModule]; 85#endif 86 87#if __has_include(<EXPermissions/EXPermissions.h>) 88 EXScopedPermissions *permissionsModule = [[EXScopedPermissions alloc] initWithExperienceId:experienceId andConstantsBinding:constantsBinding]; 89 [moduleRegistry registerExportedModule:permissionsModule]; 90 [moduleRegistry registerInternalModule:permissionsModule]; 91#endif 92 93#if __has_include(<EXSegment/EXSegment.h>) 94 EXScopedSegment *segmentModule = [[EXScopedSegment alloc] init]; 95 [moduleRegistry registerExportedModule:segmentModule]; 96#endif 97 98#if __has_include(<EXBranch/RNBranch.h>) 99 EXScopedBranch *branchModule = [[EXScopedBranch alloc] initWithExperienceId:experienceId]; 100 [moduleRegistry registerInternalModule:branchModule]; 101#endif 102 103#if __has_include(<EXLocalAuthentication/EXLocalAuthentication.h>) 104 EXScopedLocalAuthentication *localAuthenticationModule = [[EXScopedLocalAuthentication alloc] init]; 105 [moduleRegistry registerExportedModule:localAuthenticationModule]; 106#endif 107 108#if __has_include(<EXTaskManager/EXTaskManager.h>) 109 // TODO: Make scoped task manager when adding support for bare React Native 110 EXTaskManager *taskManagerModule = [[EXTaskManager alloc] initWithExperienceId:experienceId]; 111 [moduleRegistry registerInternalModule:taskManagerModule]; 112 [moduleRegistry registerExportedModule:taskManagerModule]; 113#endif 114 115#if __has_include(<EXErrorRecovery/EXErrorRecoveryModule.h>) 116 EXScopedErrorRecoveryModule *errorRecovery = [[EXScopedErrorRecoveryModule alloc] initWithExperienceId:experienceId]; 117 [moduleRegistry registerExportedModule:errorRecovery]; 118#endif 119 120#if __has_include(<EXFirebaseCore/EXFirebaseCore.h>) 121 EXScopedFirebaseCore *firebaseCoreModule = [[EXScopedFirebaseCore alloc] initWithExperienceId:experienceId andConstantsBinding:constantsBinding]; 122 [moduleRegistry registerExportedModule:firebaseCoreModule]; 123 [moduleRegistry registerInternalModule:firebaseCoreModule]; 124#endif 125 126#if __has_include(<EXNotifications/EXNotificationsEmitter.h>) 127 EXScopedNotificationsEmitter *notificationsEmmitter = [[EXScopedNotificationsEmitter alloc] initWithExperienceId:experienceId]; 128 [moduleRegistry registerExportedModule:notificationsEmmitter]; 129#endif 130 return moduleRegistry; 131} 132 133@end 134