123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- /*
- * 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 <UIKit/UIKit.h>
- #import <React/RCTBridgeDelegate.h>
- #import <React/RCTBridgeModule.h>
- #import <React/RCTDefines.h>
- #import <React/RCTFrameUpdate.h>
- #import <React/RCTInvalidating.h>
- @class JSValue;
- @class RCTBridge;
- @class RCTEventDispatcher;
- @class RCTPerformanceLogger;
- /**
- * This notification fires when the bridge initializes.
- */
- RCT_EXTERN NSString *const RCTJavaScriptWillStartLoadingNotification;
- /**
- * This notification fires when the bridge starts executing the JS bundle.
- */
- RCT_EXTERN NSString *const RCTJavaScriptWillStartExecutingNotification;
- /**
- * This notification fires when the bridge has finished loading the JS bundle.
- */
- RCT_EXTERN NSString *const RCTJavaScriptDidLoadNotification;
- /**
- * This notification fires when the bridge failed to load the JS bundle. The
- * `error` key can be used to determine the error that occurred.
- */
- RCT_EXTERN NSString *const RCTJavaScriptDidFailToLoadNotification;
- /**
- * This notification fires each time a native module is instantiated. The
- * `module` key will contain a reference to the newly-created module instance.
- * Note that this notification may be fired before the module is available via
- * the `[bridge moduleForClass:]` method.
- */
- RCT_EXTERN NSString *const RCTDidInitializeModuleNotification;
- /**
- * This notification fires each time a module is setup after it is initialized. The
- * `RCTDidSetupModuleNotificationModuleNameKey` key will contain a reference to the module name and
- * `RCTDidSetupModuleNotificationSetupTimeKey` will contain the setup time in ms.
- */
- RCT_EXTERN NSString *const RCTDidSetupModuleNotification;
- /**
- * Key for the module name (NSString) in the
- * RCTDidSetupModuleNotification userInfo dictionary.
- */
- RCT_EXTERN NSString *const RCTDidSetupModuleNotificationModuleNameKey;
- /**
- * Key for the setup time (NSNumber) in the
- * RCTDidSetupModuleNotification userInfo dictionary.
- */
- RCT_EXTERN NSString *const RCTDidSetupModuleNotificationSetupTimeKey;
- /**
- * DEPRECATED - Use RCTReloadCommand instead. This notification fires just before the bridge starts
- * processing a request to reload.
- */
- RCT_EXTERN NSString *const RCTBridgeWillReloadNotification;
- /**
- * This notification fires whenever a fast refresh happens.
- */
- RCT_EXTERN NSString *const RCTBridgeFastRefreshNotification;
- /**
- * This notification fires just before the bridge begins downloading a script
- * from the packager.
- */
- RCT_EXTERN NSString *const RCTBridgeWillDownloadScriptNotification;
- /**
- * This notification fires just after the bridge finishes downloading a script
- * from the packager.
- */
- RCT_EXTERN NSString *const RCTBridgeDidDownloadScriptNotification;
- /**
- * This notification fires right after the bridge is about to invalidate NativeModule
- * instances during teardown. Handle this notification to perform additional invalidation.
- */
- RCT_EXTERN NSString *const RCTBridgeWillInvalidateModulesNotification;
- /**
- * This notification fires right after the bridge finishes invalidating NativeModule
- * instances during teardown. Handle this notification to perform additional invalidation.
- */
- RCT_EXTERN NSString *const RCTBridgeDidInvalidateModulesNotification;
- /**
- * This notification fires right before the bridge starting invalidation process.
- * Handle this notification to perform additional invalidation.
- * The notification can be issued on any thread.
- */
- RCT_EXTERN NSString *const RCTBridgeWillBeInvalidatedNotification;
- /**
- * Key for the RCTSource object in the RCTBridgeDidDownloadScriptNotification
- * userInfo dictionary.
- */
- RCT_EXTERN NSString *const RCTBridgeDidDownloadScriptNotificationSourceKey;
- /**
- * Key for the reload reason in the RCTBridgeWillReloadNotification userInfo dictionary.
- */
- RCT_EXTERN NSString *const RCTBridgeDidDownloadScriptNotificationReasonKey;
- /**
- * Key for the bridge description (NSString_ in the
- * RCTBridgeDidDownloadScriptNotification userInfo dictionary.
- */
- RCT_EXTERN NSString *const RCTBridgeDidDownloadScriptNotificationBridgeDescriptionKey;
- /**
- * This block can be used to instantiate modules that require additional
- * init parameters, or additional configuration prior to being used.
- * The bridge will call this block to instantiate the modules, and will
- * be responsible for invalidating/releasing them when the bridge is destroyed.
- * For this reason, the block should always return new module instances, and
- * module instances should not be shared between bridges.
- */
- typedef NSArray<id<RCTBridgeModule>> * (^RCTBridgeModuleListProvider)(void);
- /**
- * This function returns the module name for a given class.
- */
- RCT_EXTERN NSString *RCTBridgeModuleNameForClass(Class bridgeModuleClass);
- /**
- * Experimental.
- * Check/set if JSI-bound NativeModule is enabled. By default it's off.
- */
- RCT_EXTERN BOOL RCTTurboModuleEnabled(void);
- RCT_EXTERN void RCTEnableTurboModule(BOOL enabled);
- /**
- * Async batched bridge used to communicate with the JavaScript application.
- */
- @interface RCTBridge : NSObject <RCTInvalidating>
- /**
- * Creates a new bridge with a custom RCTBridgeDelegate.
- *
- * All the interaction with the JavaScript context should be done using the bridge
- * instance of the RCTBridgeModules. Modules will be automatically instantiated
- * using the default contructor, but you can optionally pass in an array of
- * pre-initialized module instances if they require additional init parameters
- * or configuration.
- */
- - (instancetype)initWithDelegate:(id<RCTBridgeDelegate>)delegate launchOptions:(NSDictionary *)launchOptions;
- /**
- * DEPRECATED: Use initWithDelegate:launchOptions: instead
- *
- * The designated initializer. This creates a new bridge on top of the specified
- * executor. The bridge should then be used for all subsequent communication
- * with the JavaScript code running in the executor. Modules will be automatically
- * instantiated using the default contructor, but you can optionally pass in an
- * array of pre-initialized module instances if they require additional init
- * parameters or configuration.
- */
- - (instancetype)initWithBundleURL:(NSURL *)bundleURL
- moduleProvider:(RCTBridgeModuleListProvider)block
- launchOptions:(NSDictionary *)launchOptions;
- /**
- * This method is used to call functions in the JavaScript application context.
- * It is primarily intended for use by modules that require two-way communication
- * with the JavaScript code. Safe to call from any thread.
- */
- - (void)enqueueJSCall:(NSString *)moduleDotMethod args:(NSArray *)args;
- - (void)enqueueJSCall:(NSString *)module
- method:(NSString *)method
- args:(NSArray *)args
- completion:(dispatch_block_t)completion;
- /**
- * This method registers the file path of an additional JS segment by its ID.
- *
- * @experimental
- */
- - (void)registerSegmentWithId:(NSUInteger)segmentId path:(NSString *)path;
- /**
- * Retrieve a bridge module instance by name or class. Note that modules are
- * lazily instantiated, so calling these methods for the first time with a given
- * module name/class may cause the class to be synchronously instantiated,
- * potentially blocking both the calling thread and main thread for a short time.
- *
- * Note: This method does NOT lazily load the particular module if it's not yet loaded.
- */
- - (id)moduleForName:(NSString *)moduleName;
- - (id)moduleForName:(NSString *)moduleName lazilyLoadIfNecessary:(BOOL)lazilyLoad;
- // Note: This method lazily load the module as necessary.
- - (id)moduleForClass:(Class)moduleClass;
- /**
- * When a NativeModule performs a lookup for a TurboModule, we need to query
- * the lookupDelegate.
- */
- - (void)setRCTTurboModuleLookupDelegate:(id<RCTTurboModuleLookupDelegate>)turboModuleLookupDelegate;
- /**
- * Convenience method for retrieving all modules conforming to a given protocol.
- * Modules will be synchronously instantiated if they haven't already been,
- * potentially blocking both the calling thread and main thread for a short time.
- */
- - (NSArray *)modulesConformingToProtocol:(Protocol *)protocol;
- /**
- * Test if a module has been initialized. Use this prior to calling
- * `moduleForClass:` or `moduleForName:` if you do not want to cause the module
- * to be instantiated if it hasn't been already.
- */
- - (BOOL)moduleIsInitialized:(Class)moduleClass;
- /**
- * All registered bridge module classes.
- */
- @property (nonatomic, copy, readonly) NSArray<Class> *moduleClasses;
- /**
- * URL of the script that was loaded into the bridge.
- */
- @property (nonatomic, strong, readonly) NSURL *bundleURL;
- /**
- * The class of the executor currently being used. Changes to this value will
- * take effect after the bridge is reloaded.
- */
- @property (nonatomic, strong) Class executorClass;
- /**
- * The delegate provided during the bridge initialization
- */
- @property (nonatomic, weak, readonly) id<RCTBridgeDelegate> delegate;
- /**
- * The launch options that were used to initialize the bridge.
- */
- @property (nonatomic, copy, readonly) NSDictionary *launchOptions;
- /**
- * Use this to check if the bridge is currently loading.
- */
- @property (nonatomic, readonly, getter=isLoading) BOOL loading;
- /**
- * Use this to check if the bridge has been invalidated.
- */
- @property (nonatomic, readonly, getter=isValid) BOOL valid;
- /**
- * Link to the Performance Logger that logs React Native perf events.
- */
- @property (nonatomic, readonly, strong) RCTPerformanceLogger *performanceLogger;
- /**
- * Reload the bundle and reset executor & modules. Safe to call from any thread.
- */
- - (void)reload __deprecated_msg("Use RCTReloadCommand instead");
- /**
- * Reload the bundle and reset executor & modules. Safe to call from any thread.
- */
- - (void)reloadWithReason:(NSString *)reason __deprecated_msg("Use RCTReloadCommand instead");
- /**
- * Handle notifications for a fast refresh. Safe to call from any thread.
- */
- - (void)onFastRefresh;
- /**
- * Inform the bridge, and anything subscribing to it, that it should reload.
- */
- - (void)requestReload __deprecated_msg("Use RCTReloadCommand instead");
- /**
- * Says whether bridge has started receiving calls from javascript.
- */
- - (BOOL)isBatchActive;
- @end
|