1// Copyright © 2018 650 Industries. All rights reserved. 2 3#import "EXScopedModuleRegistry.h" 4 5#import "EXScopedModuleRegistryAdapter.h" 6#import "EXFileSystemBinding.h" 7#import "EXSensorsManagerBinding.h" 8#import "EXConstantsBinding.h" 9#import "EXScopedFileSystemModule.h" 10#import "EXUnversioned.h" 11#import "EXScopedFilePermissionModule.h" 12 13#import "EXScopedReactNativeAdapter.h" 14#import "EXModuleRegistryBinding.h" 15#import "EXExpoUserNotificationCenterProxy.h" 16 17@implementation EXScopedModuleRegistryAdapter 18 19- (NSArray<id<RCTBridgeModule>> *)extraModulesForParams:(NSDictionary *)params andExperience:(NSString *)experienceId withScopedModulesArray:(NSArray<id<RCTBridgeModule>> *)scopedModulesArray withKernelServices:(NSDictionary *)kernelServices 20{ 21 EXModuleRegistry *moduleRegistry = [self.moduleRegistryProvider moduleRegistryForExperienceId:experienceId]; 22 23 EXConstantsBinding *constantsBinding = [[EXConstantsBinding alloc] initWithExperienceId:experienceId andParams:params]; 24 [moduleRegistry registerInternalModule:constantsBinding]; 25 26 EXScopedFileSystemModule *fileSystemModule = [[EXScopedFileSystemModule alloc] initWithExperienceId:experienceId]; 27 [moduleRegistry registerExportedModule:fileSystemModule]; 28 29 EXFileSystemBinding *fileSystemBinding = [[EXFileSystemBinding alloc] init]; 30 [moduleRegistry registerInternalModule:fileSystemBinding]; 31 32 EXSensorsManagerBinding *sensorsManagerBinding = [[EXSensorsManagerBinding alloc] initWithExperienceId:experienceId andKernelService:kernelServices[EX_UNVERSIONED(@"EXSensorManager")]]; 33 [moduleRegistry registerInternalModule:sensorsManagerBinding]; 34 35 EXScopedReactNativeAdapter *reactNativeAdapter = [[EXScopedReactNativeAdapter alloc] init]; 36 [moduleRegistry registerInternalModule:reactNativeAdapter]; 37 38 EXExpoUserNotificationCenterProxy *userNotificationCenter = [[EXExpoUserNotificationCenterProxy alloc] initWithUserNotificationCenter:kernelServices[EX_UNVERSIONED(@"EXUserNotificationCenter")]]; 39 [moduleRegistry registerInternalModule:userNotificationCenter]; 40 41 EXScopedFilePermissionModule *filePermissionModule = [[EXScopedFilePermissionModule alloc] init]; 42 [moduleRegistry registerInternalModule:filePermissionModule]; 43 44 NSArray<id<RCTBridgeModule>> *bridgeModules = [self extraModulesForModuleRegistry:moduleRegistry]; 45 return [bridgeModules arrayByAddingObject:[[EXModuleRegistryBinding alloc] initWithModuleRegistry:moduleRegistry]]; 46} 47 48- (NSDictionary<Class, id> *)dictionaryFromScopedModulesArray:(NSArray<id<RCTBridgeModule>> *)scopedModulesArray 49{ 50 NSMutableDictionary<Class, id> *scopedModulesDictionary = [NSMutableDictionary dictionaryWithCapacity:[scopedModulesArray count]]; 51 for (id<RCTBridgeModule> module in scopedModulesArray) { 52 scopedModulesDictionary[(id<NSCopying>)[module class]] = module; 53 } 54 return scopedModulesDictionary; 55} 56 57@end 58