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