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#import "EXUpdatesBinding.h" 22 23#import "EXScopedReactNativeAdapter.h" 24#import "EXExpoUserNotificationCenterProxy.h" 25 26#import "EXScopedNotificationsEmitter.h" 27#import "EXScopedNotificationsHandlerModule.h" 28#import "EXScopedNotificationBuilder.h" 29#import "EXScopedNotificationSchedulerModule.h" 30#import "EXScopedNotificationPresentationModule.h" 31#import "EXScopedNotificationCategoriesModule.h" 32#import "EXScopedServerRegistrationModule.h" 33 34#if __has_include(<EXTaskManager/EXTaskManager.h>) 35#import <EXTaskManager/EXTaskManager.h> 36#endif 37 38@implementation EXScopedModuleRegistryAdapter 39 40- (UMModuleRegistry *)moduleRegistryForParams:(NSDictionary *)params forExperienceId:(NSString *)experienceId withKernelServices:(NSDictionary *)kernelServices 41{ 42 UMModuleRegistry *moduleRegistry = [self.moduleRegistryProvider moduleRegistry]; 43 44#if __has_include(<EXUpdates/EXUpdatesService.h>) 45 EXUpdatesBinding *updatesBinding = [[EXUpdatesBinding alloc] initWithExperienceId:experienceId updatesKernelService:kernelServices[EX_UNVERSIONED(@"EXUpdatesManager")] databaseKernelService:kernelServices[EX_UNVERSIONED(@"EXUpdatesDatabaseManager")]]; 46 [moduleRegistry registerInternalModule:updatesBinding]; 47#endif 48 49#if __has_include(<EXConstants/EXConstantsService.h>) 50 EXConstantsBinding *constantsBinding = [[EXConstantsBinding alloc] initWithExperienceId:experienceId andParams:params]; 51 [moduleRegistry registerInternalModule:constantsBinding]; 52#endif 53 54#if __has_include(<EXFacebook/EXFacebook.h>) 55 // only override in Expo Go 56 if ([params[@"constants"][@"appOwnership"] isEqualToString:@"expo"]) { 57 EXScopedFacebook *scopedFacebook = [[EXScopedFacebook alloc] initWithExperienceId:experienceId andParams:params]; 58 [moduleRegistry registerExportedModule:scopedFacebook]; 59 } 60#endif 61 62#if __has_include(<EXFileSystem/EXFileSystem.h>) 63 EXScopedFileSystemModule *fileSystemModule; 64 if (params[@"fileSystemDirectories"]) { 65 NSString *documentDirectory = params[@"fileSystemDirectories"][@"documentDirectory"]; 66 NSString *cachesDirectory = params[@"fileSystemDirectories"][@"cachesDirectory"]; 67 fileSystemModule = [[EXScopedFileSystemModule alloc] initWithDocumentDirectory:documentDirectory 68 cachesDirectory:cachesDirectory 69 bundleDirectory:nil]; 70 } else { 71 fileSystemModule = [EXScopedFileSystemModule new]; 72 } 73 [moduleRegistry registerExportedModule:fileSystemModule]; 74 [moduleRegistry registerInternalModule:fileSystemModule]; 75#endif 76 77#if __has_include(<EXFont/EXFontLoader.h>) 78 EXScopedFontLoader *fontModule = [[EXScopedFontLoader alloc] init]; 79 [moduleRegistry registerExportedModule:fontModule]; 80#endif 81 82#if __has_include(<EXSensors/EXSensorsManager.h>) 83 EXSensorsManagerBinding *sensorsManagerBinding = [[EXSensorsManagerBinding alloc] initWithExperienceId:experienceId andKernelService:kernelServices[EX_UNVERSIONED(@"EXSensorManager")]]; 84 [moduleRegistry registerInternalModule:sensorsManagerBinding]; 85#endif 86 87 EXScopedReactNativeAdapter *reactNativeAdapter = [[EXScopedReactNativeAdapter alloc] init]; 88 [moduleRegistry registerInternalModule:reactNativeAdapter]; 89 90 EXExpoUserNotificationCenterProxy *userNotificationCenter = [[EXExpoUserNotificationCenterProxy alloc] initWithUserNotificationCenter:kernelServices[EX_UNVERSIONED(@"EXUserNotificationCenter")]]; 91 [moduleRegistry registerInternalModule:userNotificationCenter]; 92 93#if __has_include(<EXFileSystem/EXFilePermissionModule.h>) 94 EXScopedFilePermissionModule *filePermissionModule = [[EXScopedFilePermissionModule alloc] init]; 95 [moduleRegistry registerInternalModule:filePermissionModule]; 96#endif 97 98#if __has_include(<EXSecureStore/EXSecureStore.h>) 99 EXScopedSecureStore *secureStoreModule = [[EXScopedSecureStore alloc] initWithExperienceId:experienceId andConstantsBinding:constantsBinding]; 100 [moduleRegistry registerExportedModule:secureStoreModule]; 101#endif 102 103#if __has_include(<EXAmplitude/EXAmplitude.h>) 104 EXScopedAmplitude *amplitudeModule = [[EXScopedAmplitude alloc] initWithExperienceId:experienceId]; 105 [moduleRegistry registerExportedModule:amplitudeModule]; 106#endif 107 108#if __has_include(<UMReactNativeAdapter/EXPermissionsService.h>) 109 EXScopedPermissions *permissionsModule = [[EXScopedPermissions alloc] initWithExperienceId:experienceId andConstantsBinding:constantsBinding]; 110 [moduleRegistry registerExportedModule:permissionsModule]; 111 [moduleRegistry registerInternalModule:permissionsModule]; 112#endif 113 114#if __has_include(<EXSegment/EXSegment.h>) 115 EXScopedSegment *segmentModule = [[EXScopedSegment alloc] init]; 116 [moduleRegistry registerExportedModule:segmentModule]; 117#endif 118 119#if __has_include(<EXBranch/RNBranch.h>) 120 EXScopedBranch *branchModule = [[EXScopedBranch alloc] initWithExperienceId:experienceId]; 121 [moduleRegistry registerInternalModule:branchModule]; 122#endif 123 124#if __has_include(<EXLocalAuthentication/EXLocalAuthentication.h>) 125 EXScopedLocalAuthentication *localAuthenticationModule = [[EXScopedLocalAuthentication alloc] init]; 126 [moduleRegistry registerExportedModule:localAuthenticationModule]; 127#endif 128 129#if __has_include(<EXTaskManager/EXTaskManager.h>) 130 // TODO: Make scoped task manager when adding support for bare React Native 131 EXTaskManager *taskManagerModule = [[EXTaskManager alloc] initWithExperienceId:experienceId]; 132 [moduleRegistry registerInternalModule:taskManagerModule]; 133 [moduleRegistry registerExportedModule:taskManagerModule]; 134#endif 135 136#if __has_include(<EXErrorRecovery/EXErrorRecoveryModule.h>) 137 EXScopedErrorRecoveryModule *errorRecovery = [[EXScopedErrorRecoveryModule alloc] initWithExperienceId:experienceId]; 138 [moduleRegistry registerExportedModule:errorRecovery]; 139#endif 140 141#if __has_include(<EXFirebaseCore/EXFirebaseCore.h>) 142 EXScopedFirebaseCore *firebaseCoreModule = [[EXScopedFirebaseCore alloc] initWithExperienceId:experienceId andConstantsBinding:constantsBinding]; 143 [moduleRegistry registerExportedModule:firebaseCoreModule]; 144 [moduleRegistry registerInternalModule:firebaseCoreModule]; 145#endif 146 147#if __has_include(<EXNotifications/EXNotificationsEmitter.h>) 148 // only override in Expo Go 149 if ([params[@"constants"][@"appOwnership"] isEqualToString:@"expo"]) { 150 EXScopedNotificationsEmitter *notificationsEmmitter = [[EXScopedNotificationsEmitter alloc] initWithExperienceId:experienceId]; 151 [moduleRegistry registerExportedModule:notificationsEmmitter]; 152 } 153#endif 154 155#if __has_include(<EXNotifications/EXNotificationsHandlerModule.h>) 156 // only override in Expo Go 157 if ([params[@"constants"][@"appOwnership"] isEqualToString:@"expo"]) { 158 EXScopedNotificationsHandlerModule *notificationsHandler = [[EXScopedNotificationsHandlerModule alloc] initWithExperienceId:experienceId]; 159 [moduleRegistry registerExportedModule:notificationsHandler]; 160 } 161#endif 162 163#if __has_include(<EXNotifications/EXNotificationsHandlerModule.h>) 164 EXScopedNotificationBuilder *notificationsBuilder = [[EXScopedNotificationBuilder alloc] initWithExperienceId:experienceId andConstantsBinding:constantsBinding]; 165 [moduleRegistry registerInternalModule:notificationsBuilder]; 166#endif 167 168#if __has_include(<EXNotifications/EXNotificationSchedulerModule.h>) 169 // only override in Expo Go 170 if ([params[@"constants"][@"appOwnership"] isEqualToString:@"expo"]) { 171 EXScopedNotificationSchedulerModule *schedulerModule = [[EXScopedNotificationSchedulerModule alloc] initWithExperienceId:experienceId]; 172 [moduleRegistry registerExportedModule:schedulerModule]; 173 } 174#endif 175 176#if __has_include(<EXNotifications/EXNotificationPresentationModule.h>) 177 // only override in Expo Go 178 if ([params[@"constants"][@"appOwnership"] isEqualToString:@"expo"]) { 179 EXScopedNotificationPresentationModule *notificationPresentationModule = [[EXScopedNotificationPresentationModule alloc] initWithExperienceId:experienceId]; 180 [moduleRegistry registerExportedModule:notificationPresentationModule]; 181 } 182#endif 183 184#if __has_include(<EXNotifications/EXNotificationCategoriesModule.h>) 185 // only override in Expo Go 186 if ([params[@"constants"][@"appOwnership"] isEqualToString:@"expo"]) { 187 EXScopedNotificationCategoriesModule *scopedCategoriesModule = [[EXScopedNotificationCategoriesModule alloc] initWithExperienceId:experienceId andConstantsBinding:constantsBinding]; 188 [moduleRegistry registerExportedModule:scopedCategoriesModule]; 189 } 190 [EXScopedNotificationCategoriesModule maybeMigrateLegacyCategoryIdentifiersForProject:experienceId 191 isInExpoGo:[params[@"constants"][@"appOwnership"] isEqualToString:@"expo"]]; 192#endif 193 194#if __has_include(<EXNotifications/EXServerRegistrationModule.h>) 195 EXScopedServerRegistrationModule *serverRegistrationModule = [[EXScopedServerRegistrationModule alloc] initWithExperienceId:experienceId]; 196 [moduleRegistry registerExportedModule:serverRegistrationModule]; 197#endif 198 199 return moduleRegistry; 200} 201 202@end 203