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