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