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
20#import "EXScopedReactNativeAdapter.h"
21#import "EXModuleRegistryBinding.h"
22#import "EXExpoUserNotificationCenterProxy.h"
23
24#if __has_include(<EXTaskManager/EXTaskManager.h>)
25#import <EXTaskManager/EXTaskManager.h>
26#endif
27
28@implementation EXScopedModuleRegistryAdapter
29
30- (UMModuleRegistry *)moduleRegistryForParams:(NSDictionary *)params forExperienceId:(NSString *)experienceId withKernelServices:(NSDictionary *)kernelServices
31{
32  UMModuleRegistry *moduleRegistry = [self.moduleRegistryProvider moduleRegistry];
33
34#if __has_include(<EXConstants/EXConstantsService.h>)
35  EXConstantsBinding *constantsBinding = [[EXConstantsBinding alloc] initWithExperienceId:experienceId andParams:params];
36  [moduleRegistry registerInternalModule:constantsBinding];
37#endif
38
39#if __has_include(<EXFileSystem/EXFileSystem.h>)
40  EXScopedFileSystemModule *fileSystemModule = [[EXScopedFileSystemModule alloc] initWithExperienceId:experienceId andConstantsBinding:constantsBinding];
41  [moduleRegistry registerExportedModule:fileSystemModule];
42  [moduleRegistry registerInternalModule:fileSystemModule];
43#endif
44
45#if __has_include(<EXFont/EXFontLoader.h>)
46  EXScopedFontLoader *fontModule = [[EXScopedFontLoader alloc] init];
47  [moduleRegistry registerExportedModule:fontModule];
48#endif
49
50#if __has_include(<EXSensors/EXSensorsManager.h>)
51  EXSensorsManagerBinding *sensorsManagerBinding = [[EXSensorsManagerBinding alloc] initWithExperienceId:experienceId andKernelService:kernelServices[EX_UNVERSIONED(@"EXSensorManager")]];
52  [moduleRegistry registerInternalModule:sensorsManagerBinding];
53#endif
54
55  EXScopedReactNativeAdapter *reactNativeAdapter = [[EXScopedReactNativeAdapter alloc] init];
56  [moduleRegistry registerInternalModule:reactNativeAdapter];
57
58  EXExpoUserNotificationCenterProxy *userNotificationCenter = [[EXExpoUserNotificationCenterProxy alloc] initWithUserNotificationCenter:kernelServices[EX_UNVERSIONED(@"EXUserNotificationCenter")]];
59  [moduleRegistry registerInternalModule:userNotificationCenter];
60
61#if __has_include(<EXFileSystem/EXFilePermissionModule.h>)
62  EXScopedFilePermissionModule *filePermissionModule = [[EXScopedFilePermissionModule alloc] init];
63  [moduleRegistry registerInternalModule:filePermissionModule];
64#endif
65
66#if __has_include(<EXSecureStore/EXSecureStore.h>)
67  EXScopedSecureStore *secureStoreModule = [[EXScopedSecureStore alloc] initWithExperienceId:experienceId];
68  [moduleRegistry registerExportedModule:secureStoreModule];
69#endif
70
71#if __has_include(<EXAmplitude/EXAmplitude.h>)
72  EXScopedAmplitude *amplitudeModule = [[EXScopedAmplitude alloc] initWithExperienceId:experienceId];
73  [moduleRegistry registerExportedModule:amplitudeModule];
74#endif
75
76#if __has_include(<EXPermissions/EXPermissions.h>)
77  EXScopedPermissions *permissionsModule = [[EXScopedPermissions alloc] initWithExperienceId:experienceId andConstantsBinding:constantsBinding];
78  [moduleRegistry registerExportedModule:permissionsModule];
79  [moduleRegistry registerInternalModule:permissionsModule];
80#endif
81
82#if __has_include(<EXSegment/EXSegment.h>)
83  EXScopedSegment *segmentModule = [[EXScopedSegment alloc] init];
84  [moduleRegistry registerExportedModule:segmentModule];
85#endif
86
87#if __has_include(<EXBranch/RNBranch.h>)
88  EXScopedBranch *branchModule = [[EXScopedBranch alloc] initWithExperienceId:experienceId];
89  [moduleRegistry registerInternalModule:branchModule];
90#endif
91
92#if __has_include(<EXLocalAuthentication/EXLocalAuthentication.h>)
93  EXScopedLocalAuthentication *localAuthenticationModule = [[EXScopedLocalAuthentication alloc] init];
94  [moduleRegistry registerExportedModule:localAuthenticationModule];
95#endif
96
97#if __has_include(<EXTaskManager/EXTaskManager.h>)
98  // TODO: Make scoped task manager when adding support for bare React Native
99  EXTaskManager *taskManagerModule = [[EXTaskManager alloc] initWithExperienceId:experienceId];
100  [moduleRegistry registerInternalModule:taskManagerModule];
101  [moduleRegistry registerExportedModule:taskManagerModule];
102#endif
103
104#if __has_include(<EXErrorRecovery/EXErrorRecoveryModule.h>)
105  EXScopedErrorRecoveryModule *errorRecovery = [[EXScopedErrorRecoveryModule alloc] initWithExperienceId:experienceId];
106  [moduleRegistry registerExportedModule:errorRecovery];
107#endif
108
109  return moduleRegistry;
110}
111
112- (NSArray<id<RCTBridgeModule>> *)extraModulesForModuleRegistry:(UMModuleRegistry *)moduleRegistry
113{
114  return [[super extraModulesForModuleRegistry:moduleRegistry] arrayByAddingObject:[[EXModuleRegistryBinding alloc] initWithModuleRegistry:moduleRegistry]];
115}
116
117@end
118