Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 32 additions & 20 deletions packages/react-native/React/Base/RCTBridgeModule.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,13 @@
@class RCTCallableJSModules;
@class RCTPerformanceLogger;

NS_ASSUME_NONNULL_BEGIN

/**
* The type of a block that is capable of sending a response to a bridged
* operation. Use this for returning callback methods to JS.
*/
typedef void (^RCTResponseSenderBlock)(NSArray *response);
typedef void (^RCTResponseSenderBlock)(NSArray *_Nullable response);

/**
* The type of a block that is capable of sending an error response to a
Expand All @@ -40,14 +42,14 @@ typedef void (^RCTResponseErrorBlock)(NSError *error);
* Block that bridge modules use to resolve the JS promise waiting for a result.
* Nil results are supported and are converted to JS's undefined value.
*/
typedef void (^RCTPromiseResolveBlock)(id result);
typedef void (^RCTPromiseResolveBlock)(id _Nullable result);

/**
* Block that bridge modules use to reject the JS promise waiting for a result.
* The error may be nil but it is preferable to pass an NSError object for more
* precise error messages.
*/
typedef void (^RCTPromiseRejectBlock)(NSString *code, NSString *message, NSError *error);
typedef void (^RCTPromiseRejectBlock)(NSString *_Nullable code, NSString *_Nullable message, NSError *_Nullable error);

RCT_EXTERN_C_BEGIN

Expand Down Expand Up @@ -127,15 +129,23 @@ RCT_EXTERN_C_END

// Implemented by RCT_EXPORT_MODULE. When absent, callers fall back to the ObjC class
// name, so a TurboModule resolved via a provider or plugin socket need not declare it.
// Deliberately left without nullability: implementations inside NS_ASSUME_NONNULL regions
// are implicitly nonnull while others (e.g. Expo's EXModuleRegistryHolderReactModule) are
// explicitly nullable, and either specifier here would conflict with one of them.
#pragma clang assume_nonnull end
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnullability-completeness"
+ (NSString *)moduleName;
#pragma clang diagnostic pop
#pragma clang assume_nonnull begin

/**
* A reference to the RCTModuleRegistry. Useful for modules that require access
* to other NativeModules. To implement this in your module, just add `@synthesize
* moduleRegistry = _moduleRegistry;`. If using Swift, add
* `@objc var moduleRegistry: RCTModuleRegistry!` to your module.
*/
@property (nonatomic, weak, readwrite) RCTModuleRegistry *moduleRegistry;
@property (nonatomic, weak, nullable, readwrite) RCTModuleRegistry *moduleRegistry;

/**
* A reference to the RCTViewRegistry. Useful for modules that query UIViews,
Expand All @@ -146,7 +156,7 @@ RCT_EXTERN_C_END
* viewRegistry_DEPRECATED = _viewRegistry_DEPRECATED;`. If using Swift, add
* `@objc var viewRegistry_DEPRECATED: RCTViewRegistry!` to your module.
*/
@property (nonatomic, weak, readwrite) RCTViewRegistry *viewRegistry_DEPRECATED;
@property (nonatomic, weak, nullable, readwrite) RCTViewRegistry *viewRegistry_DEPRECATED;

/**
* A reference to the RCTBundleManager. Useful for modules that need to read
Expand All @@ -156,7 +166,7 @@ RCT_EXTERN_C_END
* _bundleManager;`. If using Swift, add `@objc var bundleManager:
* RCTBundleManager!` to your module.
*/
@property (nonatomic, weak, readwrite) RCTBundleManager *bundleManager;
@property (nonatomic, weak, nullable, readwrite) RCTBundleManager *bundleManager;

/**
* A reference to an RCTCallableJSModules. Useful for modules that need to
Expand All @@ -167,7 +177,7 @@ RCT_EXTERN_C_END
* _callableJSModules;`. If using Swift, add `@objc var callableJSModules:
* RCTCallableJSModules!` to your module.
*/
@property (nonatomic, weak, readwrite) RCTCallableJSModules *callableJSModules;
@property (nonatomic, weak, nullable, readwrite) RCTCallableJSModules *callableJSModules;

/**
* The launch options that were used to initialize the React instance.
Expand Down Expand Up @@ -195,7 +205,7 @@ RCT_EXTERN_C_END
* To implement this in your module, just add `@synthesize bridge = _bridge;`
* If using Swift, add `@objc var bridge: RCTBridge!` to your module.
*/
@property (nonatomic, weak, readonly) RCTBridge *bridge RCT_DEPRECATED;
@property (nonatomic, weak, nullable, readonly) RCTBridge *bridge RCT_DEPRECATED;

/**
* This property is deprecated. This selector used to support two functionalities.
Expand Down Expand Up @@ -379,7 +389,7 @@ RCT_EXTERN_C_END
* methods defined using the macros above. This method is called only once,
* before registration.
*/
- (NSArray<id<RCTBridgeMethod>> *)methodsToExport;
- (nullable NSArray<id<RCTBridgeMethod>> *)methodsToExport;

/**
* Injects constants into JS. These constants are made accessible via NativeModules.ModuleName.X. It is only called once
Expand All @@ -405,15 +415,15 @@ RCT_EXTERN_C_END
@interface RCTModuleRegistry : NSObject
- (void)setTurboModuleRegistry:(id<RCTTurboModuleRegistry>)turboModuleRegistry;

- (id)moduleForName:(const char *)moduleName;
- (id)moduleForName:(const char *)moduleName lazilyLoadIfNecessary:(BOOL)lazilyLoad;
- (nullable id)moduleForName:(const char *)moduleName;
- (nullable id)moduleForName:(const char *)moduleName lazilyLoadIfNecessary:(BOOL)lazilyLoad;
- (BOOL)moduleIsInitialized:(Class)moduleClass;

// Note: This method lazily load the module as necessary.
- (id)moduleForClass:(Class)moduleClass;
- (nullable id)moduleForClass:(Class)moduleClass;
@end

typedef UIView * (^RCTBridgelessComponentViewProvider)(NSNumber *);
typedef UIView *_Nullable (^RCTBridgelessComponentViewProvider)(NSNumber *);

typedef void (^RCTViewRegistryUIBlock)(RCTViewRegistry *viewRegistry);

Expand All @@ -423,15 +433,15 @@ typedef void (^RCTViewRegistryUIBlock)(RCTViewRegistry *viewRegistry);
@interface RCTViewRegistry : NSObject
- (void)setBridgelessComponentViewProvider:(RCTBridgelessComponentViewProvider)bridgelessComponentViewProvider;

- (UIView *)viewForReactTag:(NSNumber *)reactTag;
- (void)addUIBlock:(RCTViewRegistryUIBlock)block;
- (nullable UIView *)viewForReactTag:(NSNumber *)reactTag;
- (void)addUIBlock:(nullable RCTViewRegistryUIBlock)block;
@end

typedef void (^RCTBridgelessJSModuleMethodInvoker)(
NSString *moduleName,
NSString *methodName,
NSArray *args,
dispatch_block_t onComplete);
NSArray *_Nullable args,
dispatch_block_t _Nullable onComplete);

/**
* A class that allows NativeModules to call methods on JavaScript modules registered
Expand All @@ -440,9 +450,11 @@ typedef void (^RCTBridgelessJSModuleMethodInvoker)(
@interface RCTCallableJSModules : NSObject
- (void)setBridgelessJSModuleMethodInvoker:(RCTBridgelessJSModuleMethodInvoker)bridgelessJSModuleMethodInvoker;

- (void)invokeModule:(NSString *)moduleName method:(NSString *)methodName withArgs:(NSArray *)args;
- (void)invokeModule:(NSString *)moduleName method:(NSString *)methodName withArgs:(nullable NSArray *)args;
- (void)invokeModule:(NSString *)moduleName
method:(NSString *)methodName
withArgs:(NSArray *)args
onComplete:(dispatch_block_t)onComplete;
withArgs:(nullable NSArray *)args
onComplete:(nullable dispatch_block_t)onComplete;
@end

NS_ASSUME_NONNULL_END
16 changes: 8 additions & 8 deletions scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -785,8 +785,8 @@ interface RCTCallInvoker : public NSObject {
}

interface RCTCallableJSModules : public NSObject {
public virtual void invokeModule:method:withArgs:(NSString* moduleName, NSString* methodName, NSArray* args);
public virtual void invokeModule:method:withArgs:onComplete:(NSString* moduleName, NSString* methodName, NSArray* args, dispatch_block_t onComplete);
public virtual void invokeModule:method:withArgs:(NSString* moduleName, NSString* methodName, _Nullable NSArray* args);
public virtual void invokeModule:method:withArgs:onComplete:(NSString* moduleName, NSString* methodName, _Nullable NSArray* args, _Nullable dispatch_block_t onComplete);
public virtual void setBridgelessJSModuleMethodInvoker:(RCTBridgelessJSModuleMethodInvoker bridgelessJSModuleMethodInvoker);
}

Expand Down Expand Up @@ -1382,9 +1382,9 @@ interface RCTModuleProviders : public NSObject {

interface RCTModuleRegistry : public NSObject {
public virtual BOOL moduleIsInitialized:(Class moduleClass);
public virtual id moduleForClass:(Class moduleClass);
public virtual id moduleForName:(const char* moduleName);
public virtual id moduleForName:lazilyLoadIfNecessary:(const char* moduleName, BOOL lazilyLoad);
public virtual _Nullable id moduleForClass:(Class moduleClass);
public virtual _Nullable id moduleForName:(const char* moduleName);
public virtual _Nullable id moduleForName:lazilyLoadIfNecessary:(const char* moduleName, BOOL lazilyLoad);
public virtual void setTurboModuleRegistry:(id<RCTTurboModuleRegistry> turboModuleRegistry);
}

Expand Down Expand Up @@ -2099,8 +2099,8 @@ interface RCTViewManager : public NSObject <RCTBridgeModule> {
}

interface RCTViewRegistry : public NSObject {
public virtual UIView* viewForReactTag:(NSNumber* reactTag);
public virtual void addUIBlock:(RCTViewRegistryUIBlock block);
public virtual _Nullable UIView* viewForReactTag:(NSNumber* reactTag);
public virtual void addUIBlock:(_Nullable RCTViewRegistryUIBlock block);
public virtual void setBridgelessComponentViewProvider:(RCTBridgelessComponentViewProvider bridgelessComponentViewProvider);
}

Expand Down Expand Up @@ -2563,8 +2563,8 @@ protocol RCTBridgeModule : public NSObject {
public @property (weak) RCTCallableJSModules* callableJSModules;
public @property (weak) RCTModuleRegistry* moduleRegistry;
public @property (weak, readonly) RCTBridge* bridge;
public virtual NSArray<id<RCTBridgeMethod>>* methodsToExport();
public virtual NSDictionary* constantsToExport();
public virtual _Nullable NSArray<id<RCTBridgeMethod>>* methodsToExport();
public virtual static BOOL requiresMainQueueSetup();
public virtual static NSString* moduleName();
public virtual void batchDidComplete();
Expand Down
16 changes: 8 additions & 8 deletions scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -794,8 +794,8 @@ interface RCTCallInvoker : public NSObject {
}

interface RCTCallableJSModules : public NSObject {
public virtual void invokeModule:method:withArgs:(NSString* moduleName, NSString* methodName, NSArray* args);
public virtual void invokeModule:method:withArgs:onComplete:(NSString* moduleName, NSString* methodName, NSArray* args, dispatch_block_t onComplete);
public virtual void invokeModule:method:withArgs:(NSString* moduleName, NSString* methodName, _Nullable NSArray* args);
public virtual void invokeModule:method:withArgs:onComplete:(NSString* moduleName, NSString* methodName, _Nullable NSArray* args, _Nullable dispatch_block_t onComplete);
public virtual void setBridgelessJSModuleMethodInvoker:(RCTBridgelessJSModuleMethodInvoker bridgelessJSModuleMethodInvoker);
}

Expand Down Expand Up @@ -1425,9 +1425,9 @@ interface RCTModuleProviders : public NSObject {

interface RCTModuleRegistry : public NSObject {
public virtual BOOL moduleIsInitialized:(Class moduleClass);
public virtual id moduleForClass:(Class moduleClass);
public virtual id moduleForName:(const char* moduleName);
public virtual id moduleForName:lazilyLoadIfNecessary:(const char* moduleName, BOOL lazilyLoad);
public virtual _Nullable id moduleForClass:(Class moduleClass);
public virtual _Nullable id moduleForName:(const char* moduleName);
public virtual _Nullable id moduleForName:lazilyLoadIfNecessary:(const char* moduleName, BOOL lazilyLoad);
public virtual void setTurboModuleRegistry:(id<RCTTurboModuleRegistry> turboModuleRegistry);
}

Expand Down Expand Up @@ -2157,8 +2157,8 @@ interface RCTViewManager : public NSObject <RCTBridgeModule> {
}

interface RCTViewRegistry : public NSObject {
public virtual UIView* viewForReactTag:(NSNumber* reactTag);
public virtual void addUIBlock:(RCTViewRegistryUIBlock block);
public virtual _Nullable UIView* viewForReactTag:(NSNumber* reactTag);
public virtual void addUIBlock:(_Nullable RCTViewRegistryUIBlock block);
public virtual void setBridgelessComponentViewProvider:(RCTBridgelessComponentViewProvider bridgelessComponentViewProvider);
}

Expand Down Expand Up @@ -2621,8 +2621,8 @@ protocol RCTBridgeModule : public NSObject {
public @property (weak) RCTCallableJSModules* callableJSModules;
public @property (weak) RCTModuleRegistry* moduleRegistry;
public @property (weak, readonly) RCTBridge* bridge;
public virtual NSArray<id<RCTBridgeMethod>>* methodsToExport();
public virtual NSDictionary* constantsToExport();
public virtual _Nullable NSArray<id<RCTBridgeMethod>>* methodsToExport();
public virtual static BOOL requiresMainQueueSetup();
public virtual static NSString* moduleName();
public virtual void batchDidComplete();
Expand Down
16 changes: 8 additions & 8 deletions scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -785,8 +785,8 @@ interface RCTCallInvoker : public NSObject {
}

interface RCTCallableJSModules : public NSObject {
public virtual void invokeModule:method:withArgs:(NSString* moduleName, NSString* methodName, NSArray* args);
public virtual void invokeModule:method:withArgs:onComplete:(NSString* moduleName, NSString* methodName, NSArray* args, dispatch_block_t onComplete);
public virtual void invokeModule:method:withArgs:(NSString* moduleName, NSString* methodName, _Nullable NSArray* args);
public virtual void invokeModule:method:withArgs:onComplete:(NSString* moduleName, NSString* methodName, _Nullable NSArray* args, _Nullable dispatch_block_t onComplete);
public virtual void setBridgelessJSModuleMethodInvoker:(RCTBridgelessJSModuleMethodInvoker bridgelessJSModuleMethodInvoker);
}

Expand Down Expand Up @@ -1382,9 +1382,9 @@ interface RCTModuleProviders : public NSObject {

interface RCTModuleRegistry : public NSObject {
public virtual BOOL moduleIsInitialized:(Class moduleClass);
public virtual id moduleForClass:(Class moduleClass);
public virtual id moduleForName:(const char* moduleName);
public virtual id moduleForName:lazilyLoadIfNecessary:(const char* moduleName, BOOL lazilyLoad);
public virtual _Nullable id moduleForClass:(Class moduleClass);
public virtual _Nullable id moduleForName:(const char* moduleName);
public virtual _Nullable id moduleForName:lazilyLoadIfNecessary:(const char* moduleName, BOOL lazilyLoad);
public virtual void setTurboModuleRegistry:(id<RCTTurboModuleRegistry> turboModuleRegistry);
}

Expand Down Expand Up @@ -2092,8 +2092,8 @@ interface RCTViewManager : public NSObject <RCTBridgeModule> {
}

interface RCTViewRegistry : public NSObject {
public virtual UIView* viewForReactTag:(NSNumber* reactTag);
public virtual void addUIBlock:(RCTViewRegistryUIBlock block);
public virtual _Nullable UIView* viewForReactTag:(NSNumber* reactTag);
public virtual void addUIBlock:(_Nullable RCTViewRegistryUIBlock block);
public virtual void setBridgelessComponentViewProvider:(RCTBridgelessComponentViewProvider bridgelessComponentViewProvider);
}

Expand Down Expand Up @@ -2555,8 +2555,8 @@ protocol RCTBridgeModule : public NSObject {
public @property (weak) RCTCallableJSModules* callableJSModules;
public @property (weak) RCTModuleRegistry* moduleRegistry;
public @property (weak, readonly) RCTBridge* bridge;
public virtual NSArray<id<RCTBridgeMethod>>* methodsToExport();
public virtual NSDictionary* constantsToExport();
public virtual _Nullable NSArray<id<RCTBridgeMethod>>* methodsToExport();
public virtual static BOOL requiresMainQueueSetup();
public virtual static NSString* moduleName();
public virtual void batchDidComplete();
Expand Down
16 changes: 8 additions & 8 deletions scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -785,8 +785,8 @@ interface RCTCallInvoker : public NSObject {
}

interface RCTCallableJSModules : public NSObject {
public virtual void invokeModule:method:withArgs:(NSString* moduleName, NSString* methodName, NSArray* args);
public virtual void invokeModule:method:withArgs:onComplete:(NSString* moduleName, NSString* methodName, NSArray* args, dispatch_block_t onComplete);
public virtual void invokeModule:method:withArgs:(NSString* moduleName, NSString* methodName, _Nullable NSArray* args);
public virtual void invokeModule:method:withArgs:onComplete:(NSString* moduleName, NSString* methodName, _Nullable NSArray* args, _Nullable dispatch_block_t onComplete);
public virtual void setBridgelessJSModuleMethodInvoker:(RCTBridgelessJSModuleMethodInvoker bridgelessJSModuleMethodInvoker);
}

Expand Down Expand Up @@ -1382,9 +1382,9 @@ interface RCTModuleProviders : public NSObject {

interface RCTModuleRegistry : public NSObject {
public virtual BOOL moduleIsInitialized:(Class moduleClass);
public virtual id moduleForClass:(Class moduleClass);
public virtual id moduleForName:(const char* moduleName);
public virtual id moduleForName:lazilyLoadIfNecessary:(const char* moduleName, BOOL lazilyLoad);
public virtual _Nullable id moduleForClass:(Class moduleClass);
public virtual _Nullable id moduleForName:(const char* moduleName);
public virtual _Nullable id moduleForName:lazilyLoadIfNecessary:(const char* moduleName, BOOL lazilyLoad);
public virtual void setTurboModuleRegistry:(id<RCTTurboModuleRegistry> turboModuleRegistry);
}

Expand Down Expand Up @@ -2099,8 +2099,8 @@ interface RCTViewManager : public NSObject <RCTBridgeModule> {
}

interface RCTViewRegistry : public NSObject {
public virtual UIView* viewForReactTag:(NSNumber* reactTag);
public virtual void addUIBlock:(RCTViewRegistryUIBlock block);
public virtual _Nullable UIView* viewForReactTag:(NSNumber* reactTag);
public virtual void addUIBlock:(_Nullable RCTViewRegistryUIBlock block);
public virtual void setBridgelessComponentViewProvider:(RCTBridgelessComponentViewProvider bridgelessComponentViewProvider);
}

Expand Down Expand Up @@ -2563,8 +2563,8 @@ protocol RCTBridgeModule : public NSObject {
public @property (weak) RCTCallableJSModules* callableJSModules;
public @property (weak) RCTModuleRegistry* moduleRegistry;
public @property (weak, readonly) RCTBridge* bridge;
public virtual NSArray<id<RCTBridgeMethod>>* methodsToExport();
public virtual NSDictionary* constantsToExport();
public virtual _Nullable NSArray<id<RCTBridgeMethod>>* methodsToExport();
public virtual static BOOL requiresMainQueueSetup();
public virtual static NSString* moduleName();
public virtual void batchDidComplete();
Expand Down
Loading