From 8d1ce80d299faa45bf81e677bd3d6a8195713f3d Mon Sep 17 00:00:00 2001 From: Oscar Franco Date: Fri, 13 Oct 2023 07:32:06 +0200 Subject: [PATCH 01/12] Symbolicate unhandled promise rejections and try to log them --- .../Libraries/LogBox/Data/LogBoxData.js | 2 ++ .../promiseRejectionTrackingOptions.js | 35 +++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js index d3e06b0451303c..6d4c6798c36dce 100644 --- a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js +++ b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js @@ -30,6 +30,7 @@ export type LogData = $ReadOnly<{| message: Message, category: Category, componentStack: ComponentStack, + codeFrame?: string, |}>; export type Observer = ( @@ -208,6 +209,7 @@ export function addLog(log: LogData): void { stack, category: log.category, componentStack: log.componentStack, + codeFrame: log.codeFrame, }), ); } catch (error) { diff --git a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js index b951f612ecf6c7..22930f6cef5c6a 100644 --- a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js +++ b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js @@ -10,9 +10,11 @@ import typeof {enable} from 'promise/setimmediate/rejection-tracking'; -let rejectionTrackingOptions: $NonMaybeType[0]> = { +type ExtractOptionsType =

(((options?: ?P) => void)) => P; + +let rejectionTrackingOptions: $Call = { allRejections: true, - onUnhandled: (id, rejection = {}) => { + onUnhandled: async (id, rejection = {}) => { let message: string; let stack: ?string; @@ -22,6 +24,35 @@ let rejectionTrackingOptions: $NonMaybeType[0]> = { // $FlowFixMe[method-unbinding] added when improving typing for this parameters message = Error.prototype.toString.call(rejection); const error: Error = (rejection: $FlowFixMe); + + // Print pretty unhandled rejections while on DEV + if (__DEV__) { + const parseErrorStack = require('react-native/Libraries/Core/Devtools/parseErrorStack'); + const symbolicateStackTrace = require('react-native/Libraries/Core/Devtools/symbolicateStackTrace'); + const LogBox = require('react-native/Libraries/LogBox/LogBox').default; + + stack = parseErrorStack(error.stack); + stack = await symbolicateStackTrace(stack); + if (stack) { + const warning = + `Possible Unhandled Promise Rejection (id: ${id}):\n` + + `${message ?? ''}\n` + + `at File: ${stack.codeFrame.fileName}, row: ${stack.codeFrame.location.row}, column: ${stack.codeFrame.location.column}`; + + console.log(stack.codeFrame.content) + + LogBox.addLog({ + level: 'warn', + message: {content: warning, substitutions: []}, + isComponentError: false, + codeFrame: stack.codeFrame, + stack: error.stack, + category: `${stack.codeFrame.fileName}-${stack.codeFrame.location.row}-${stack.codeFrame.location.column}`, + }); + return; + } + } + stack = error.stack; } else { try { From cb897d0c8f8c125079cd81e46c5fad31320158bb Mon Sep 17 00:00:00 2001 From: Oscar Franco Date: Fri, 13 Oct 2023 07:53:23 +0200 Subject: [PATCH 02/12] Linting --- .../Libraries/promiseRejectionTrackingOptions.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js index 22930f6cef5c6a..57601356ef2381 100644 --- a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js +++ b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js @@ -27,9 +27,9 @@ let rejectionTrackingOptions: $Call = { // Print pretty unhandled rejections while on DEV if (__DEV__) { - const parseErrorStack = require('react-native/Libraries/Core/Devtools/parseErrorStack'); - const symbolicateStackTrace = require('react-native/Libraries/Core/Devtools/symbolicateStackTrace'); - const LogBox = require('react-native/Libraries/LogBox/LogBox').default; + const parseErrorStack = require('Libraries/Core/Devtools/parseErrorStack'); + const symbolicateStackTrace = require('Libraries/Core/Devtools/symbolicateStackTrace'); + const LogBox = require('Libraries/LogBox/LogBox').default; stack = parseErrorStack(error.stack); stack = await symbolicateStackTrace(stack); @@ -39,7 +39,7 @@ let rejectionTrackingOptions: $Call = { `${message ?? ''}\n` + `at File: ${stack.codeFrame.fileName}, row: ${stack.codeFrame.location.row}, column: ${stack.codeFrame.location.column}`; - console.log(stack.codeFrame.content) + console.log(stack.codeFrame.content); LogBox.addLog({ level: 'warn', From c488217b1218d39bf7ad69dfa9ea29636d167c91 Mon Sep 17 00:00:00 2001 From: Oscar Franco Date: Fri, 13 Oct 2023 08:41:12 +0200 Subject: [PATCH 03/12] change paths for devtools --- .../Libraries/promiseRejectionTrackingOptions.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js index 57601356ef2381..80433b34cb78d1 100644 --- a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js +++ b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js @@ -27,9 +27,9 @@ let rejectionTrackingOptions: $Call = { // Print pretty unhandled rejections while on DEV if (__DEV__) { - const parseErrorStack = require('Libraries/Core/Devtools/parseErrorStack'); - const symbolicateStackTrace = require('Libraries/Core/Devtools/symbolicateStackTrace'); - const LogBox = require('Libraries/LogBox/LogBox').default; + const parseErrorStack = require('react-native/Libraries/Core/Devtools/parseErrorStack'); + const symbolicateStackTrace = require('react-native/Libraries/Core/Devtools/symbolicateStackTrace'); + const LogBox = require('react-native/Libraries/LogBox/LogBox').default; stack = parseErrorStack(error.stack); stack = await symbolicateStackTrace(stack); From 516deee5708edaa120dad9fc1a48af9cbb3052dd Mon Sep 17 00:00:00 2001 From: Oscar Franco Date: Fri, 13 Oct 2023 08:49:31 +0200 Subject: [PATCH 04/12] change paths for devtools --- .../Libraries/promiseRejectionTrackingOptions.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js index 80433b34cb78d1..76766772bff8ab 100644 --- a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js +++ b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js @@ -27,9 +27,9 @@ let rejectionTrackingOptions: $Call = { // Print pretty unhandled rejections while on DEV if (__DEV__) { - const parseErrorStack = require('react-native/Libraries/Core/Devtools/parseErrorStack'); - const symbolicateStackTrace = require('react-native/Libraries/Core/Devtools/symbolicateStackTrace'); - const LogBox = require('react-native/Libraries/LogBox/LogBox').default; + const parseErrorStack = require('./Core/Devtools/parseErrorStack'); + const symbolicateStackTrace = require('./Core/Devtools/symbolicateStackTrace'); + const LogBox = require('./LogBox/LogBox').default; stack = parseErrorStack(error.stack); stack = await symbolicateStackTrace(stack); From ff6be9cd8b6af82ad48533e0f6f45dc1bfb90445 Mon Sep 17 00:00:00 2001 From: Oscar Franco Date: Fri, 13 Oct 2023 14:13:14 +0200 Subject: [PATCH 05/12] Fix flow errors --- .../Libraries/LogBox/Data/LogBoxData.js | 4 +- .../promiseRejectionTrackingOptions.js | 54 ++++++++++++------- 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js index 6d4c6798c36dce..ef06207d260b01 100644 --- a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js +++ b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js @@ -9,7 +9,7 @@ */ ('use strict'); - +import type {CodeFrame} from '../../Core/Devtools/symbolicateStackTrace'; import type {ExtendedError} from '../../Core/ExtendedError'; import type {LogLevel} from './LogBoxLog'; import type { @@ -30,7 +30,7 @@ export type LogData = $ReadOnly<{| message: Message, category: Category, componentStack: ComponentStack, - codeFrame?: string, + codeFrame?: ?CodeFrame, |}>; export type Observer = ( diff --git a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js index 76766772bff8ab..e0edafb9b1e2c0 100644 --- a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js +++ b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js @@ -14,7 +14,7 @@ type ExtractOptionsType =

(((options?: ?P) => void)) => P; let rejectionTrackingOptions: $Call = { allRejections: true, - onUnhandled: async (id, rejection = {}) => { + onUnhandled: (id, rejection = {}) => { let message: string; let stack: ?string; @@ -31,29 +31,43 @@ let rejectionTrackingOptions: $Call = { const symbolicateStackTrace = require('./Core/Devtools/symbolicateStackTrace'); const LogBox = require('./LogBox/LogBox').default; - stack = parseErrorStack(error.stack); - stack = await symbolicateStackTrace(stack); - if (stack) { - const warning = - `Possible Unhandled Promise Rejection (id: ${id}):\n` + - `${message ?? ''}\n` + - `at File: ${stack.codeFrame.fileName}, row: ${stack.codeFrame.location.row}, column: ${stack.codeFrame.location.column}`; + const parsedStack = parseErrorStack(error.stack); - console.log(stack.codeFrame.content); + symbolicateStackTrace(parsedStack) + .then(prettyStack => { + let warning = + `Possible Unhandled Promise Rejection (id: ${id}):\n` + + `${message ?? ''}\n`; - LogBox.addLog({ - level: 'warn', - message: {content: warning, substitutions: []}, - isComponentError: false, - codeFrame: stack.codeFrame, - stack: error.stack, - category: `${stack.codeFrame.fileName}-${stack.codeFrame.location.row}-${stack.codeFrame.location.column}`, + if (prettyStack.codeFrame != null) { + warning += `at File: ${prettyStack.codeFrame.fileName}, row: ${ + prettyStack.codeFrame.location?.row ?? 'Unknown' + }, column: ${ + prettyStack.codeFrame.location?.column ?? 'Unknown' + }`; + + LogBox.addLog({ + level: 'warn', + message: {content: warning, substitutions: []}, + componentStack: [], + codeFrame: prettyStack.codeFrame, + category: `${prettyStack.codeFrame.fileName}-${ + prettyStack.codeFrame.location?.row ?? 'unknown' + }-${prettyStack.codeFrame.location?.column ?? 'unknown'}`, + }); + } else { + console.warn(warning); + } + }) + .catch(() => { + const warning = + `Possible Unhandled Promise Rejection (id: ${id}):\n` + + `${message ?? ''}\n` + + (stack == null ? '' : stack); + console.warn(warning); }); - return; - } + return; } - - stack = error.stack; } else { try { message = require('pretty-format')(rejection); From c460d5fddd1d03d70c3d52ea5a01e920182b1de2 Mon Sep 17 00:00:00 2001 From: Oscar Franco Date: Fri, 13 Oct 2023 14:35:29 +0200 Subject: [PATCH 06/12] Allow passing stack into addLog --- packages/react-native/Libraries/LogBox/Data/LogBoxData.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js index ef06207d260b01..d98ab158a780b8 100644 --- a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js +++ b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js @@ -12,6 +12,7 @@ import type {CodeFrame} from '../../Core/Devtools/symbolicateStackTrace'; import type {ExtendedError} from '../../Core/ExtendedError'; import type {LogLevel} from './LogBoxLog'; +import type {Stack} from './LogBoxSymbolication'; import type { Category, ComponentStack, @@ -31,6 +32,7 @@ export type LogData = $ReadOnly<{| category: Category, componentStack: ComponentStack, codeFrame?: ?CodeFrame, + stack?: Stack, |}>; export type Observer = ( @@ -199,14 +201,14 @@ export function addLog(log: LogData): void { // otherwise spammy logs would pause rendering. setImmediate(() => { try { - const stack = parseErrorStack(errorForStackTrace?.stack); + const defaultStack = parseErrorStack(errorForStackTrace?.stack); appendNewLog( new LogBoxLog({ level: log.level, message: log.message, isComponentError: false, - stack, + stack: log.stack ?? defaultStack, category: log.category, componentStack: log.componentStack, codeFrame: log.codeFrame, From a54fd6b25da4be6716d2e92fb3b61b9fefa6e8e4 Mon Sep 17 00:00:00 2001 From: Oscar Franco Date: Fri, 13 Oct 2023 19:26:38 +0200 Subject: [PATCH 07/12] Do not symbolicate stack on promiseRejectionTrackingOptions but let logbox symbolicate it --- .../Libraries/LogBox/Data/LogBoxData.js | 4 +- .../promiseRejectionTrackingOptions.js | 53 ++++++------------- 2 files changed, 19 insertions(+), 38 deletions(-) diff --git a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js index d98ab158a780b8..671b8aa62d3921 100644 --- a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js +++ b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js @@ -201,14 +201,14 @@ export function addLog(log: LogData): void { // otherwise spammy logs would pause rendering. setImmediate(() => { try { - const defaultStack = parseErrorStack(errorForStackTrace?.stack); + const stack = log.stack ?? parseErrorStack(errorForStackTrace?.stack); appendNewLog( new LogBoxLog({ level: log.level, message: log.message, isComponentError: false, - stack: log.stack ?? defaultStack, + stack, category: log.category, componentStack: log.componentStack, codeFrame: log.codeFrame, diff --git a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js index e0edafb9b1e2c0..d09419b02fcb77 100644 --- a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js +++ b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js @@ -10,6 +10,9 @@ import typeof {enable} from 'promise/setimmediate/rejection-tracking'; +const parseErrorStack = require('./Core/Devtools/parseErrorStack'); +const LogBox = require('./LogBox/LogBox').default; + type ExtractOptionsType =

(((options?: ?P) => void)) => P; let rejectionTrackingOptions: $Call = { @@ -25,48 +28,26 @@ let rejectionTrackingOptions: $Call = { message = Error.prototype.toString.call(rejection); const error: Error = (rejection: $FlowFixMe); + const warning = + `Possible Unhandled Promise Rejection (id: ${id}):\n` + + `${message ?? ''}\n` + + (stack == null ? '' : stack); + // Print pretty unhandled rejections while on DEV if (__DEV__) { - const parseErrorStack = require('./Core/Devtools/parseErrorStack'); - const symbolicateStackTrace = require('./Core/Devtools/symbolicateStackTrace'); - const LogBox = require('./LogBox/LogBox').default; - const parsedStack = parseErrorStack(error.stack); - symbolicateStackTrace(parsedStack) - .then(prettyStack => { - let warning = - `Possible Unhandled Promise Rejection (id: ${id}):\n` + - `${message ?? ''}\n`; - - if (prettyStack.codeFrame != null) { - warning += `at File: ${prettyStack.codeFrame.fileName}, row: ${ - prettyStack.codeFrame.location?.row ?? 'Unknown' - }, column: ${ - prettyStack.codeFrame.location?.column ?? 'Unknown' - }`; + LogBox.addLog({ + level: 'warn', + message: {content: warning, substitutions: []}, + componentStack: [], + stack: parsedStack, + category: 'possible_unhandled_promise_rejection', + }); - LogBox.addLog({ - level: 'warn', - message: {content: warning, substitutions: []}, - componentStack: [], - codeFrame: prettyStack.codeFrame, - category: `${prettyStack.codeFrame.fileName}-${ - prettyStack.codeFrame.location?.row ?? 'unknown' - }-${prettyStack.codeFrame.location?.column ?? 'unknown'}`, - }); - } else { - console.warn(warning); - } - }) - .catch(() => { - const warning = - `Possible Unhandled Promise Rejection (id: ${id}):\n` + - `${message ?? ''}\n` + - (stack == null ? '' : stack); - console.warn(warning); - }); return; + } else { + console.warn(warning); } } else { try { From 2a8a491038859191cb3dfcbd8a906be8cef10a5c Mon Sep 17 00:00:00 2001 From: Oscar Franco Date: Fri, 13 Oct 2023 19:28:22 +0200 Subject: [PATCH 08/12] remove unused codeFrame --- packages/react-native/Libraries/LogBox/Data/LogBoxData.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js index 671b8aa62d3921..6414cf289fcdce 100644 --- a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js +++ b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js @@ -9,7 +9,6 @@ */ ('use strict'); -import type {CodeFrame} from '../../Core/Devtools/symbolicateStackTrace'; import type {ExtendedError} from '../../Core/ExtendedError'; import type {LogLevel} from './LogBoxLog'; import type {Stack} from './LogBoxSymbolication'; @@ -31,7 +30,6 @@ export type LogData = $ReadOnly<{| message: Message, category: Category, componentStack: ComponentStack, - codeFrame?: ?CodeFrame, stack?: Stack, |}>; @@ -211,7 +209,6 @@ export function addLog(log: LogData): void { stack, category: log.category, componentStack: log.componentStack, - codeFrame: log.codeFrame, }), ); } catch (error) { From 352ab9f5cfdf32f57863001e2afd184ccf7ea7aa Mon Sep 17 00:00:00 2001 From: Oscar Franco Date: Fri, 13 Oct 2023 19:33:50 +0200 Subject: [PATCH 09/12] Revert outdated change to rejectionTrackingOptions type --- .../react-native/Libraries/promiseRejectionTrackingOptions.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js index d09419b02fcb77..374ecc034e5515 100644 --- a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js +++ b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js @@ -13,9 +13,7 @@ import typeof {enable} from 'promise/setimmediate/rejection-tracking'; const parseErrorStack = require('./Core/Devtools/parseErrorStack'); const LogBox = require('./LogBox/LogBox').default; -type ExtractOptionsType =

(((options?: ?P) => void)) => P; - -let rejectionTrackingOptions: $Call = { +let rejectionTrackingOptions: $NonMaybeType[0]> = { allRejections: true, onUnhandled: (id, rejection = {}) => { let message: string; From 07a48c260f1d5cc835e80c868d4f1fa473575eee Mon Sep 17 00:00:00 2001 From: Oscar Franco Date: Mon, 16 Oct 2023 11:30:58 +0200 Subject: [PATCH 10/12] Parse error stack on LogBoxData --- packages/react-native/Libraries/LogBox/Data/LogBoxData.js | 5 ++--- .../Libraries/promiseRejectionTrackingOptions.js | 5 +---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js index 6414cf289fcdce..ebcc7797a731e9 100644 --- a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js +++ b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js @@ -11,7 +11,6 @@ ('use strict'); import type {ExtendedError} from '../../Core/ExtendedError'; import type {LogLevel} from './LogBoxLog'; -import type {Stack} from './LogBoxSymbolication'; import type { Category, ComponentStack, @@ -30,7 +29,7 @@ export type LogData = $ReadOnly<{| message: Message, category: Category, componentStack: ComponentStack, - stack?: Stack, + stack?: string, |}>; export type Observer = ( @@ -199,7 +198,7 @@ export function addLog(log: LogData): void { // otherwise spammy logs would pause rendering. setImmediate(() => { try { - const stack = log.stack ?? parseErrorStack(errorForStackTrace?.stack); + const stack = parseErrorStack(log.stack ?? errorForStackTrace?.stack); appendNewLog( new LogBoxLog({ diff --git a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js index 374ecc034e5515..6ef8dcaa855fad 100644 --- a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js +++ b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js @@ -10,7 +10,6 @@ import typeof {enable} from 'promise/setimmediate/rejection-tracking'; -const parseErrorStack = require('./Core/Devtools/parseErrorStack'); const LogBox = require('./LogBox/LogBox').default; let rejectionTrackingOptions: $NonMaybeType[0]> = { @@ -33,13 +32,11 @@ let rejectionTrackingOptions: $NonMaybeType[0]> = { // Print pretty unhandled rejections while on DEV if (__DEV__) { - const parsedStack = parseErrorStack(error.stack); - LogBox.addLog({ level: 'warn', message: {content: warning, substitutions: []}, componentStack: [], - stack: parsedStack, + stack: error.stack, category: 'possible_unhandled_promise_rejection', }); From 14434524d07536870e2294189ef4067ee6577c4b Mon Sep 17 00:00:00 2001 From: Oscar Franco Date: Mon, 16 Oct 2023 11:37:18 +0200 Subject: [PATCH 11/12] re-insert blank line --- packages/react-native/Libraries/LogBox/Data/LogBoxData.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js index ebcc7797a731e9..abc2401ac42159 100644 --- a/packages/react-native/Libraries/LogBox/Data/LogBoxData.js +++ b/packages/react-native/Libraries/LogBox/Data/LogBoxData.js @@ -9,6 +9,7 @@ */ ('use strict'); + import type {ExtendedError} from '../../Core/ExtendedError'; import type {LogLevel} from './LogBoxLog'; import type { From e5eed45fcc8c96737d2c43a5b64b30767a192273 Mon Sep 17 00:00:00 2001 From: Oscar Franco Date: Mon, 16 Oct 2023 15:26:15 +0200 Subject: [PATCH 12/12] PR comments --- .../promiseRejectionTrackingOptions.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js index 6ef8dcaa855fad..8417ad8e1ae222 100644 --- a/packages/react-native/Libraries/promiseRejectionTrackingOptions.js +++ b/packages/react-native/Libraries/promiseRejectionTrackingOptions.js @@ -10,7 +10,7 @@ import typeof {enable} from 'promise/setimmediate/rejection-tracking'; -const LogBox = require('./LogBox/LogBox').default; +import LogBox from './LogBox/LogBox'; let rejectionTrackingOptions: $NonMaybeType[0]> = { allRejections: true, @@ -25,16 +25,16 @@ let rejectionTrackingOptions: $NonMaybeType[0]> = { message = Error.prototype.toString.call(rejection); const error: Error = (rejection: $FlowFixMe); - const warning = - `Possible Unhandled Promise Rejection (id: ${id}):\n` + - `${message ?? ''}\n` + - (stack == null ? '' : stack); - - // Print pretty unhandled rejections while on DEV + // Print correct unhandled rejections stack while on DEV if (__DEV__) { LogBox.addLog({ level: 'warn', - message: {content: warning, substitutions: []}, + message: { + content: + `Possible Unhandled Promise Rejection (id: ${id}):\n` + + `${message ?? ''}\n`, + substitutions: [], + }, componentStack: [], stack: error.stack, category: 'possible_unhandled_promise_rejection', @@ -42,7 +42,7 @@ let rejectionTrackingOptions: $NonMaybeType[0]> = { return; } else { - console.warn(warning); + stack = error.stack; } } else { try {