mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Merge pull request #42222 from joe-sam/patch-symbolication_0.71
Apply stack Symbolication patch part 1 & 2 to 0.71-stable (#41377) (#42079) (original #40914)
This commit is contained in:
@@ -30,6 +30,7 @@ export type LogData = $ReadOnly<{|
|
||||
message: Message,
|
||||
category: Category,
|
||||
componentStack: ComponentStack,
|
||||
stack?: string,
|
||||
|}>;
|
||||
|
||||
export type Observer = (
|
||||
@@ -154,7 +155,7 @@ function appendNewLog(newLog: LogBoxLog) {
|
||||
if (newLog.level === 'fatal') {
|
||||
// If possible, to avoid jank, we don't want to open the error before
|
||||
// it's symbolicated. To do that, we optimistically wait for
|
||||
// sybolication for up to a second before adding the log.
|
||||
// symbolication for up to a second before adding the log.
|
||||
const OPTIMISTIC_WAIT_TIME = 1000;
|
||||
|
||||
let addPendingLog: ?() => void = () => {
|
||||
@@ -198,7 +199,7 @@ export function addLog(log: LogData): void {
|
||||
// otherwise spammy logs would pause rendering.
|
||||
setImmediate(() => {
|
||||
try {
|
||||
const stack = parseErrorStack(errorForStackTrace?.stack);
|
||||
const stack = parseErrorStack(log.stack ?? errorForStackTrace?.stack);
|
||||
|
||||
appendNewLog(
|
||||
new LogBoxLog({
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
|
||||
import typeof {enable} from 'promise/setimmediate/rejection-tracking';
|
||||
|
||||
import LogBox from './LogBox/LogBox';
|
||||
|
||||
type ExtractOptionsType = <P>(((options?: ?P) => void)) => P;
|
||||
|
||||
let rejectionTrackingOptions: $Call<ExtractOptionsType, enable> = {
|
||||
@@ -34,19 +36,36 @@ let rejectionTrackingOptions: $Call<ExtractOptionsType, enable> = {
|
||||
? rejection
|
||||
: JSON.stringify((rejection: $FlowFixMe));
|
||||
}
|
||||
// It could although this object is not a standard error, it still has stack information to unwind
|
||||
// $FlowFixMe ignore types just check if stack is there
|
||||
if (rejection.stack && typeof rejection.stack === 'string') {
|
||||
stack = rejection.stack;
|
||||
}
|
||||
}
|
||||
|
||||
const warning =
|
||||
`Possible Unhandled Promise Rejection (id: ${id}):\n` +
|
||||
`${message ?? ''}\n` +
|
||||
(stack == null ? '' : stack);
|
||||
console.warn(warning);
|
||||
const warning = `Possible unhandled promise rejection (id: ${id}):\n${
|
||||
message ?? ''
|
||||
}`;
|
||||
if (__DEV__) {
|
||||
LogBox.addLog({
|
||||
level: 'warn',
|
||||
message: {
|
||||
content: warning,
|
||||
substitutions: [],
|
||||
},
|
||||
componentStack: [],
|
||||
stack,
|
||||
category: 'possible_unhandled_promise_rejection',
|
||||
});
|
||||
} else {
|
||||
console.warn(warning);
|
||||
}
|
||||
},
|
||||
onHandled: id => {
|
||||
const warning =
|
||||
`Promise Rejection Handled (id: ${id})\n` +
|
||||
`Promise rejection handled (id: ${id})\n` +
|
||||
'This means you can ignore any previous messages of the form ' +
|
||||
`"Possible Unhandled Promise Rejection (id: ${id}):"`;
|
||||
`"Possible unhandled promise rejection (id: ${id}):"`;
|
||||
console.warn(warning);
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user