diff --git a/React/CoreModules/RCTExceptionsManager.h b/React/CoreModules/RCTExceptionsManager.h index 4da14cb67f780f..389715193b48cb 100644 --- a/React/CoreModules/RCTExceptionsManager.h +++ b/React/CoreModules/RCTExceptionsManager.h @@ -6,8 +6,8 @@ */ #import - #import +#import NS_ASSUME_NONNULL_BEGIN @@ -37,6 +37,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)reportFatalException:(nullable NSString *)message stack:(nullable NSArray *)stack exceptionId:(double)exceptionId; +- (void)reportEarlyJsException:(std::string)errorMap; @property (nonatomic, weak) id delegate; diff --git a/React/CoreModules/RCTExceptionsManager.mm b/React/CoreModules/RCTExceptionsManager.mm index ca1aafca6d4a34..a8f44ed28062b2 100644 --- a/React/CoreModules/RCTExceptionsManager.mm +++ b/React/CoreModules/RCTExceptionsManager.mm @@ -138,6 +138,27 @@ - (void)reportFatal:(NSString *)message stack:(NSArray *)stack e } } +- (void)reportEarlyJsException:(std::string)errorMap +{ + NSString *errprStr = [NSString stringWithUTF8String:errorMap.c_str()]; + NSData *jsonData = [errprStr dataUsingEncoding:NSUTF8StringEncoding]; + NSError *jsonError; + NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData + options:NSJSONWritingPrettyPrinted + error:&jsonError]; + + NSString *message = [dict objectForKey:@"message"]; + double exceptionId = [[dict objectForKey:@"id"] doubleValue]; + NSArray *stack = [dict objectForKey:@"stack"]; + BOOL isFatal = [[dict objectForKey:@"isFatal"] boolValue]; + + if (isFatal) { + [self reportFatalException:message stack:stack exceptionId:exceptionId]; + } else { + [self reportSoftException:message stack:stack exceptionId:exceptionId]; + } +} + - (std::shared_ptr)getTurboModule: (const facebook::react::ObjCTurboModule::InitParams &)params {