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