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