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