1// Copyright 2015-present 650 Industries. All rights reserved. 2 3#import "EXScopedModuleRegistry.h" 4#import "EXUnversioned.h" 5 6static NSMutableDictionary<NSString *, NSDictionary *> *EXScopedModuleClasses; 7 8NSDictionary<NSString *, NSDictionary *> * EXGetScopedModuleClasses(void); 9NSDictionary<NSString *, NSDictionary *> * EXGetScopedModuleClasses() 10{ 11 return EXScopedModuleClasses; 12} 13 14void EXRegisterScopedModule(Class, ...); 15void EXRegisterScopedModule(Class moduleClass, ...) 16{ 17 static dispatch_once_t onceToken; 18 dispatch_once(&onceToken, ^{ 19 EXScopedModuleClasses = [NSMutableDictionary dictionary]; 20 }); 21 22 NSString *kernelServiceClassName; 23 va_list argumentList; 24 NSMutableDictionary *unversionedKernelServiceClassNames = [[NSMutableDictionary alloc] init]; 25 26 va_start(argumentList, moduleClass); 27 while ((kernelServiceClassName = va_arg(argumentList, NSString*))) { 28 if ([kernelServiceClassName isEqualToString:@"nil"]) { 29 unversionedKernelServiceClassNames[kernelServiceClassName] = EX_KERNEL_SERVICE_NONE; 30 } else { 31 unversionedKernelServiceClassNames[kernelServiceClassName] = [EX_UNVERSIONED(@"EX") stringByAppendingString:kernelServiceClassName]; 32 } 33 } 34 va_end(argumentList); 35 36 NSString *moduleClassName = NSStringFromClass(moduleClass); 37 if (moduleClassName) { 38 EXScopedModuleClasses[moduleClassName] = unversionedKernelServiceClassNames; 39 } 40} 41 42@implementation EXScopedModuleRegistry 43 44RCT_EXPORT_MODULE(ExponentScopedModuleRegistry); 45 46@synthesize bridge = _bridge; 47 48- (void)setBridge:(RCTBridge *)bridge 49{ 50 _bridge = bridge; 51} 52 53@end 54 55@implementation RCTBridge (EXScopedModuleRegistry) 56 57- (EXScopedModuleRegistry *)scopedModules 58{ 59 return [self moduleForClass:[EXScopedModuleRegistry class]]; 60} 61 62@end 63