Files

72 lines
2.6 KiB
Plaintext

/*!
* iOS SDK
*
* Tencent is pleased to support the open source community by making
* Hippy available.
*
* Copyright (C) 2019 THL A29 Limited, a Tencent company.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import "HippyExceptionModule.h"
#import "HippyBridge.h"
#import "HippyDefines.h"
#import "HippyAssert.h"
#import "HippyUtils.h"
@implementation HippyExceptionModule
@synthesize bridge = _bridge;
HIPPY_EXPORT_MODULE(ExceptionModule)
HIPPY_EXPORT_METHOD(handleException:(NSString *)title detail:(NSString *)detail
timeInterval:(nonnull NSNumber *)timeInterval
resolver:(__unused HippyPromiseResolveBlock)resolve
rejecter:(__unused HippyPromiseRejectBlock)reject) {
NSArray *stack = [detail componentsSeparatedByString: @"\n"];
NSMutableArray *formatStacks = [[NSMutableArray alloc] initWithCapacity: stack.count];
for(NSString *record in stack) {
NSArray *components = [record componentsSeparatedByString: @"@"];
if (components.count == 2) {
NSString *method = @"unknow";
NSString *file = @"unknow";
NSString *line = @"-1";
NSString *column = @"-1";
method = [components firstObject];
NSString *elsp = [components lastObject];
NSArray *elsps = [elsp componentsSeparatedByString: @":"];
if (elsps.count == 4) {
file = [NSString stringWithFormat: @"%@:%@", elsps[0], elsps[1]];
line = elsps[2];
column = [elsps lastObject];
}
[formatStacks addObject: @{@"methodName": method, @"file": file, @"lineNumber": line, @"column": column}];
}
}
NSDictionary *errorInfo = @{NSLocalizedDescriptionKey:title?:@"unknown",
NSLocalizedFailureReasonErrorKey: detail?:@"unkonwn",
HippyJSStackTraceKey:formatStacks,
@"HippyTimeIntervalKey":timeInterval ?:@(0),
HippyFatalModuleName:[[self bridge] moduleName]?:@"unknown"
};
NSError *error = [NSError errorWithDomain:HippyErrorDomain code:1 userInfo:errorInfo];
HippyFatal(error);
}
@end