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