yeet
This commit is contained in:
21
node_modules/@unimodules/react-native-adapter/ios/UMReactNativeAdapter/UMModuleRegistryAdapter/UMModuleRegistryAdapter.h
generated
vendored
Normal file
21
node_modules/@unimodules/react-native-adapter/ios/UMReactNativeAdapter/UMModuleRegistryAdapter/UMModuleRegistryAdapter.h
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright 2018-present 650 Industries. All rights reserved.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <React/RCTBridgeModule.h>
|
||||
#import <UMCore/UMModuleRegistryProvider.h>
|
||||
|
||||
// An "adapter" over module registry, for given RCTBridge and NSString
|
||||
// is able to provide an array of exported RCTBridgeModules. Override
|
||||
// it and use in your AppDelegate to export different bridge modules
|
||||
// for different experiences.
|
||||
|
||||
@interface UMModuleRegistryAdapter : NSObject
|
||||
|
||||
@property (nonatomic, readonly) UMModuleRegistryProvider *moduleRegistryProvider;
|
||||
|
||||
- (instancetype)initWithModuleRegistryProvider:(UMModuleRegistryProvider *)moduleRegistryProvider;
|
||||
- (NSArray<id<RCTBridgeModule>> *)extraModulesForModuleRegistry:(UMModuleRegistry *)moduleRegistry;
|
||||
- (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge;
|
||||
|
||||
@end
|
||||
|
70
node_modules/@unimodules/react-native-adapter/ios/UMReactNativeAdapter/UMModuleRegistryAdapter/UMModuleRegistryAdapter.m
generated
vendored
Normal file
70
node_modules/@unimodules/react-native-adapter/ios/UMReactNativeAdapter/UMModuleRegistryAdapter/UMModuleRegistryAdapter.m
generated
vendored
Normal file
@ -0,0 +1,70 @@
|
||||
// Copyright 2018-present 650 Industries. All rights reserved.
|
||||
|
||||
#import <UMReactNativeAdapter/UMNativeModulesProxy.h>
|
||||
#import <UMReactNativeAdapter/UMViewManagerAdapter.h>
|
||||
#import <UMReactNativeAdapter/UMModuleRegistryAdapter.h>
|
||||
#import <UMReactNativeAdapter/UMViewManagerAdapterClassesRegistry.h>
|
||||
#import <UMReactNativeAdapter/UMModuleRegistryHolderReactModule.h>
|
||||
|
||||
@interface UMModuleRegistryAdapter ()
|
||||
|
||||
@property (nonatomic, strong) UMModuleRegistryProvider *moduleRegistryProvider;
|
||||
@property (nonatomic, strong) UMViewManagerAdapterClassesRegistry *viewManagersClassesRegistry;
|
||||
|
||||
@end
|
||||
|
||||
@implementation UMModuleRegistryAdapter
|
||||
|
||||
- (instancetype)initWithModuleRegistryProvider:(UMModuleRegistryProvider *)moduleRegistryProvider
|
||||
{
|
||||
if (self = [super init]) {
|
||||
_moduleRegistryProvider = moduleRegistryProvider;
|
||||
_viewManagersClassesRegistry = [[UMViewManagerAdapterClassesRegistry alloc] init];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge
|
||||
{
|
||||
return [self extraModulesForModuleRegistry:[_moduleRegistryProvider moduleRegistry]];
|
||||
}
|
||||
|
||||
- (NSArray<id<RCTBridgeModule>> *)extraModulesForModuleRegistry:(UMModuleRegistry *)moduleRegistry
|
||||
{
|
||||
NSMutableArray<id<RCTBridgeModule>> *extraModules = [NSMutableArray array];
|
||||
|
||||
UMNativeModulesProxy *nativeModulesProxy = [[UMNativeModulesProxy alloc] initWithModuleRegistry:moduleRegistry];
|
||||
|
||||
[extraModules addObject:nativeModulesProxy];
|
||||
|
||||
for (UMViewManager *viewManager in [moduleRegistry getAllViewManagers]) {
|
||||
Class viewManagerAdapterClass = [_viewManagersClassesRegistry viewManagerAdapterClassForViewManager:viewManager];
|
||||
[extraModules addObject:[[viewManagerAdapterClass alloc] initWithViewManager:viewManager]];
|
||||
}
|
||||
|
||||
// Silence React Native warning `Base module "%s" does not exist`
|
||||
// occurring when view manager class is subclassing another class
|
||||
// that is not RCTViewManager (in our case all the view manager adapters
|
||||
// subclass UMViewManagerAdapter, so RN expects to find UMViewManagerAdapter
|
||||
// exported.
|
||||
[extraModules addObject:[[UMViewManagerAdapter alloc] init]];
|
||||
|
||||
// It is possible that among internal modules there are some RCTBridgeModules --
|
||||
// let's add them to extraModules here.
|
||||
for (id<UMInternalModule> module in [moduleRegistry getAllInternalModules]) {
|
||||
if ([module conformsToProtocol:@protocol(RCTBridgeModule)]) {
|
||||
id<RCTBridgeModule> reactBridgeModule = (id<RCTBridgeModule>)module;
|
||||
[extraModules addObject:reactBridgeModule];
|
||||
}
|
||||
}
|
||||
|
||||
// Adding the way to access the module registry from RCTBridgeModules.
|
||||
[extraModules addObject:[[UMModuleRegistryHolderReactModule alloc] initWithModuleRegistry:moduleRegistry]];
|
||||
|
||||
// One could add some modules to the Module Registry after creating it.
|
||||
// Here is our last call for finalizing initialization.
|
||||
[moduleRegistry initialize];
|
||||
return extraModules;
|
||||
}
|
||||
|
||||
@end
|
12
node_modules/@unimodules/react-native-adapter/ios/UMReactNativeAdapter/UMModuleRegistryAdapter/UMModuleRegistryHolderReactModule.h
generated
vendored
Normal file
12
node_modules/@unimodules/react-native-adapter/ios/UMReactNativeAdapter/UMModuleRegistryAdapter/UMModuleRegistryHolderReactModule.h
generated
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
// Copyright 2018-present 650 Industries. All rights reserved.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UMCore/UMModuleRegistry.h>
|
||||
#import <React/RCTBridgeModule.h>
|
||||
|
||||
@interface UMModuleRegistryHolderReactModule : NSObject <RCTBridgeModule>
|
||||
|
||||
- (instancetype)initWithModuleRegistry:(UMModuleRegistry *)moduleRegistry;
|
||||
- (UMModuleRegistry *)moduleRegistry;
|
||||
|
||||
@end
|
30
node_modules/@unimodules/react-native-adapter/ios/UMReactNativeAdapter/UMModuleRegistryAdapter/UMModuleRegistryHolderReactModule.m
generated
vendored
Normal file
30
node_modules/@unimodules/react-native-adapter/ios/UMReactNativeAdapter/UMModuleRegistryAdapter/UMModuleRegistryHolderReactModule.m
generated
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright 2018-present 650 Industries. All rights reserved.
|
||||
|
||||
#import <UMReactNativeAdapter/UMModuleRegistryHolderReactModule.h>
|
||||
|
||||
@interface UMModuleRegistryHolderReactModule ()
|
||||
|
||||
@property (nonatomic, weak) UMModuleRegistry *moduleRegistry;
|
||||
|
||||
@end
|
||||
|
||||
@implementation UMModuleRegistryHolderReactModule
|
||||
|
||||
- (instancetype)initWithModuleRegistry:(UMModuleRegistry *)moduleRegistry
|
||||
{
|
||||
if (self = [super init]) {
|
||||
_moduleRegistry = moduleRegistry;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (UMModuleRegistry *)moduleRegistry
|
||||
{
|
||||
return _moduleRegistry;
|
||||
}
|
||||
|
||||
+ (NSString *)moduleName {
|
||||
return nil;
|
||||
}
|
||||
|
||||
@end
|
15
node_modules/@unimodules/react-native-adapter/ios/UMReactNativeAdapter/UMModuleRegistryAdapter/UMViewManagerAdapterClassesRegistry.h
generated
vendored
Normal file
15
node_modules/@unimodules/react-native-adapter/ios/UMReactNativeAdapter/UMModuleRegistryAdapter/UMViewManagerAdapterClassesRegistry.h
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
// Copyright 2018-present 650 Industries. All rights reserved.
|
||||
|
||||
#import <React/RCTViewManager.h>
|
||||
#import <UMCore/UMViewManager.h>
|
||||
|
||||
// A registry for view manager adapter classes.
|
||||
// As we have to create subclasses of UMViewManagerAdapters
|
||||
// at runtime to be able to respond with proper + (NSString *)moduleName
|
||||
// to React, let's cache these classes and not create them twice.
|
||||
|
||||
@interface UMViewManagerAdapterClassesRegistry : NSObject
|
||||
|
||||
- (Class)viewManagerAdapterClassForViewManager:(UMViewManager *)viewManager;
|
||||
|
||||
@end
|
57
node_modules/@unimodules/react-native-adapter/ios/UMReactNativeAdapter/UMModuleRegistryAdapter/UMViewManagerAdapterClassesRegistry.m
generated
vendored
Normal file
57
node_modules/@unimodules/react-native-adapter/ios/UMReactNativeAdapter/UMModuleRegistryAdapter/UMViewManagerAdapterClassesRegistry.m
generated
vendored
Normal file
@ -0,0 +1,57 @@
|
||||
// Copyright 2018-present 650 Industries. All rights reserved.
|
||||
|
||||
#import <UMReactNativeAdapter/UMViewManagerAdapterClassesRegistry.h>
|
||||
#import <UMReactNativeAdapter/UMViewManagerAdapter.h>
|
||||
#import <objc/runtime.h>
|
||||
|
||||
static const NSString *viewManagerAdapterModuleNamePrefix = @"ViewManagerAdapter_";
|
||||
|
||||
static IMP directEventBlockImplementation = nil;
|
||||
static dispatch_once_t directEventBlockImplementationOnceToken;
|
||||
|
||||
@interface UMViewManagerAdapterClassesRegistry ()
|
||||
|
||||
@property (nonatomic, strong) NSMutableDictionary<Class, Class> *viewManagerAdaptersClasses;
|
||||
|
||||
@end
|
||||
|
||||
@implementation UMViewManagerAdapterClassesRegistry
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
if (self = [super init]) {
|
||||
_viewManagerAdaptersClasses = [NSMutableDictionary dictionary];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (Class)viewManagerAdapterClassForViewManager:(UMViewManager *)viewManager
|
||||
{
|
||||
Class viewManagerClass = [viewManager class];
|
||||
if (_viewManagerAdaptersClasses[viewManagerClass] == nil) {
|
||||
_viewManagerAdaptersClasses[(id <NSCopying>)viewManagerClass] = [self _createViewManagerAdapterClassForViewManager:viewManager];
|
||||
}
|
||||
return _viewManagerAdaptersClasses[viewManagerClass];
|
||||
}
|
||||
|
||||
- (Class)_createViewManagerAdapterClassForViewManager:(UMViewManager *)viewManager
|
||||
{
|
||||
const char *viewManagerClassName = [[viewManagerAdapterModuleNamePrefix stringByAppendingString:[viewManager viewName]] UTF8String];
|
||||
Class viewManagerAdapterClass = objc_allocateClassPair([UMViewManagerAdapter class], viewManagerClassName, 0);
|
||||
[self _ensureDirectEventBlockImplementationIsPresent];
|
||||
for (NSString *eventName in [viewManager supportedEvents]) {
|
||||
class_addMethod(object_getClass(viewManagerAdapterClass), NSSelectorFromString([@"propConfig_" stringByAppendingString:eventName]), directEventBlockImplementation, "@@:");
|
||||
}
|
||||
return viewManagerAdapterClass;
|
||||
}
|
||||
|
||||
- (void)_ensureDirectEventBlockImplementationIsPresent
|
||||
{
|
||||
dispatch_once(&directEventBlockImplementationOnceToken, ^{
|
||||
directEventBlockImplementation = imp_implementationWithBlock(^{
|
||||
return @[@"RCTDirectEventBlock"];
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@end
|
Reference in New Issue
Block a user