mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/44888 In https://github.com/facebook/react/pull/29839 we removed the `Warning: ` prefix. This PR replaces the special cases in LogBox for `Warning: ` to use the presence of a component stack instead. This is what LogBox really cares about anyway, since the reason to let errors pass through to the exception manager is to let DevTools add the component stacks. Changelog: [General] [Fixed] - Fix logbox reporting for React errors Reviewed By: rickhanlonii Differential Revision: D58441017 fbshipit-source-id: 5355cd04ddcd5238dadbfcbd64fe1f43c8cd04dc
73 lines
2.2 KiB
JavaScript
73 lines
2.2 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
* @flow strict
|
|
*/
|
|
|
|
import typeof {enable} from 'promise/setimmediate/rejection-tracking';
|
|
|
|
import LogBox from './LogBox/LogBox';
|
|
|
|
let rejectionTrackingOptions: $NonMaybeType<Parameters<enable>[0]> = {
|
|
allRejections: true,
|
|
onUnhandled: (id, rejection = {}) => {
|
|
let message: string;
|
|
let stack: ?string;
|
|
|
|
// $FlowFixMe[method-unbinding] added when improving typing for this parameters
|
|
const stringValue = Object.prototype.toString.call(rejection);
|
|
if (stringValue === '[object Error]') {
|
|
// $FlowFixMe[method-unbinding] added when improving typing for this parameters
|
|
message = Error.prototype.toString.call(rejection);
|
|
const error: Error = (rejection: $FlowFixMe);
|
|
stack = error.stack;
|
|
} else {
|
|
try {
|
|
message = require('pretty-format')(rejection);
|
|
} catch {
|
|
message =
|
|
typeof rejection === 'string'
|
|
? 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 ?? ''
|
|
}`;
|
|
if (__DEV__) {
|
|
LogBox.addLog({
|
|
level: 'warn',
|
|
message: {
|
|
content: warning,
|
|
substitutions: [],
|
|
},
|
|
componentStack: [],
|
|
componentStackType: null,
|
|
stack,
|
|
category: 'possible_unhandled_promise_rejection',
|
|
});
|
|
} else {
|
|
console.warn(warning);
|
|
}
|
|
},
|
|
onHandled: id => {
|
|
const warning =
|
|
`Promise rejection handled (id: ${id})\n` +
|
|
'This means you can ignore any previous messages of the form ' +
|
|
`"Possible unhandled promise rejection (id: ${id}):"`;
|
|
console.warn(warning);
|
|
},
|
|
};
|
|
|
|
export default rejectionTrackingOptions;
|