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