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