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 <EXTaskManager/EXTaskManager.h>
16
17#import "EXScopedReactNativeAdapter.h"
18#import "EXModuleRegistryBinding.h"
19#import "EXExpoUserNotificationCenterProxy.h"
20
21@implementation EXScopedModuleRegistryAdapter
22
23- (UMModuleRegistry *)moduleRegistryForParams:(NSDictionary *)params forExperienceId:(NSString *)experienceId withKernelServices:(NSDictionary *)kernelServices
24{
25  UMModuleRegistry *moduleRegistry = [self.moduleRegistryProvider moduleRegistry];
26
27  EXConstantsBinding *constantsBinding = [[EXConstantsBinding alloc] initWithExperienceId:experienceId andParams:params];
28  [moduleRegistry registerInternalModule:constantsBinding];
29
30  EXScopedFileSystemModule *fileSystemModule = [[EXScopedFileSystemModule alloc] initWithExperienceId:experienceId andConstantsBinding:constantsBinding];
31  [moduleRegistry registerExportedModule:fileSystemModule];
32  [moduleRegistry registerInternalModule:fileSystemModule];
33
34  EXSensorsManagerBinding *sensorsManagerBinding = [[EXSensorsManagerBinding alloc] initWithExperienceId:experienceId andKernelService:kernelServices[EX_UNVERSIONED(@"EXSensorManager")]];
35  [moduleRegistry registerInternalModule:sensorsManagerBinding];
36
37  EXScopedReactNativeAdapter *reactNativeAdapter = [[EXScopedReactNativeAdapter alloc] init];
38  [moduleRegistry registerInternalModule:reactNativeAdapter];
39
40  EXExpoUserNotificationCenterProxy *userNotificationCenter = [[EXExpoUserNotificationCenterProxy alloc] initWithUserNotificationCenter:kernelServices[EX_UNVERSIONED(@"EXUserNotificationCenter")]];
41  [moduleRegistry registerInternalModule:userNotificationCenter];
42
43  EXScopedFilePermissionModule *filePermissionModule = [[EXScopedFilePermissionModule alloc] init];
44  [moduleRegistry registerInternalModule:filePermissionModule];
45
46  EXScopedSecureStore *secureStoreModule = [[EXScopedSecureStore alloc] initWithExperienceId:experienceId];
47  [moduleRegistry registerExportedModule:secureStoreModule];
48
49  EXScopedAmplitude *amplitudeModule = [[EXScopedAmplitude alloc] initWithExperienceId:experienceId];
50  [moduleRegistry registerExportedModule:amplitudeModule];
51
52  EXScopedPermissions *permissionsModule = [[EXScopedPermissions alloc] initWithExperienceId:experienceId];
53  [moduleRegistry registerExportedModule:permissionsModule];
54  [moduleRegistry registerInternalModule:permissionsModule];
55
56  EXScopedSegment *segmentModule = [[EXScopedSegment alloc] init];
57  [moduleRegistry registerExportedModule:segmentModule];
58
59  // TODO: Make scoped task manager when adding support for bare React Native
60  EXTaskManager *taskManagerModule = [[EXTaskManager alloc] initWithExperienceId:experienceId];
61  [moduleRegistry registerInternalModule:taskManagerModule];
62  [moduleRegistry registerExportedModule:taskManagerModule];
63
64  return moduleRegistry;
65}
66
67- (NSArray<id<RCTBridgeModule>> *)extraModulesForModuleRegistry:(UMModuleRegistry *)moduleRegistry
68{
69  return [[super extraModulesForModuleRegistry:moduleRegistry] arrayByAddingObject:[[EXModuleRegistryBinding alloc] initWithModuleRegistry:moduleRegistry]];
70}
71
72@end
73