123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- /*
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- #import <React/RCTBridge.h>
- @class RCTModuleData;
- @protocol RCTJavaScriptExecutor;
- RCT_EXTERN NSArray<Class> *RCTGetModuleClasses(void);
- RCT_EXTERN void RCTRegisterModule(Class);
- @interface RCTBridge ()
- // Private designated initializer
- - (instancetype)initWithDelegate:(id<RCTBridgeDelegate>)delegate
- bundleURL:(NSURL *)bundleURL
- moduleProvider:(RCTBridgeModuleListProvider)block
- launchOptions:(NSDictionary *)launchOptions NS_DESIGNATED_INITIALIZER;
- // Used for the profiler flow events between JS and native
- @property (nonatomic, assign) int64_t flowID;
- @property (nonatomic, assign) CFMutableDictionaryRef flowIDMap;
- @property (nonatomic, strong) NSLock *flowIDMapLock;
- // Used by RCTDevMenu
- @property (nonatomic, copy) NSString *bridgeDescription;
- + (instancetype)currentBridge;
- + (void)setCurrentBridge:(RCTBridge *)bridge;
- /**
- * Bridge setup code - creates an instance of RCTBachedBridge. Exposed for
- * test only
- */
- - (void)setUp;
- /**
- * This method is used to invoke a callback that was registered in the
- * JavaScript application context. Safe to call from any thread.
- */
- - (void)enqueueCallback:(NSNumber *)cbID args:(NSArray *)args;
- /**
- * This property is mostly used on the main thread, but may be touched from
- * a background thread if the RCTBridge happens to deallocate on a background
- * thread. Therefore, we want all writes to it to be seen atomically.
- */
- @property (atomic, strong) RCTBridge *batchedBridge;
- /**
- * The block that creates the modules' instances to be added to the bridge.
- * Exposed for RCTCxxBridge
- */
- @property (nonatomic, copy, readonly) RCTBridgeModuleListProvider moduleProvider;
- /**
- * Used by RCTDevMenu to override the `hot` param of the current bundleURL.
- */
- @property (nonatomic, strong, readwrite) NSURL *bundleURL;
- @end
- @interface RCTBridge (RCTCxxBridge)
- /**
- * Used by RCTModuleData
- */
- @property (nonatomic, weak, readonly) RCTBridge *parentBridge;
- /**
- * Used by RCTModuleData
- */
- @property (nonatomic, assign, readonly) BOOL moduleSetupComplete;
- /**
- * Called on the child bridge to run the executor and start loading.
- */
- - (void)start;
- /**
- * Used by RCTModuleData to register the module for frame updates after it is
- * lazily initialized.
- */
- - (void)registerModuleForFrameUpdates:(id<RCTBridgeModule>)module withModuleData:(RCTModuleData *)moduleData;
- /**
- * Dispatch work to a module's queue - this is also suports the fake RCTJSThread
- * queue. Exposed for the RCTProfiler
- */
- - (void)dispatchBlock:(dispatch_block_t)block queue:(dispatch_queue_t)queue;
- /**
- * Get the module data for a given module name. Used by UIManager to implement
- * the `dispatchViewManagerCommand` method.
- */
- - (RCTModuleData *)moduleDataForName:(NSString *)moduleName;
- /**
- * Registers additional classes with the ModuleRegistry.
- */
- - (void)registerAdditionalModuleClasses:(NSArray<Class> *)newModules;
- /**
- * Updates the ModuleRegistry with a pre-initialized instance.
- */
- - (void)updateModuleWithInstance:(id<RCTBridgeModule>)instance;
- /**
- * Systrace profiler toggling methods exposed for the RCTDevMenu
- */
- - (void)startProfiling;
- - (void)stopProfiling:(void (^)(NSData *))callback;
- /**
- * Synchronously call a specific native module's method and return the result
- */
- - (id)callNativeModule:(NSUInteger)moduleID method:(NSUInteger)methodID params:(NSArray *)params;
- /**
- * Hook exposed for RCTLog to send logs to JavaScript when not running in JSC
- */
- - (void)logMessage:(NSString *)message level:(NSString *)level;
- /**
- * Allow super fast, one time, timers to skip the queue and be directly executed
- */
- - (void)_immediatelyCallTimer:(NSNumber *)timer;
- @end
- @interface RCTBridge (Inspector)
- @property (nonatomic, readonly, getter=isInspectable) BOOL inspectable;
- @end
- @interface RCTCxxBridge : RCTBridge
- // TODO(cjhopman): this seems unsafe unless we require that it is only called on the main js queue.
- @property (nonatomic, readonly) void *runtime;
- - (instancetype)initWithParentBridge:(RCTBridge *)bridge NS_DESIGNATED_INITIALIZER;
- @end
|