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