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