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