Fix missing stacks in WWW warnings (#17638)

This commit is contained in:
Dan Abramov
2019-12-17 15:21:18 +00:00
committed by GitHub
parent c026dea3dd
commit e608c02fc6
2 changed files with 39 additions and 9 deletions
+2
View File
@@ -26,6 +26,8 @@ export function error(format, ...args) {
}
function printWarning(level, format, args) {
// When changing this logic, you might want to also
// update consoleWithStackDev.www.js as well.
if (__DEV__) {
const hasExistingStack =
args.length > 0 &&
@@ -8,15 +8,43 @@
// This refers to a WWW module.
const warningWWW = require('warning');
export function warn() {
// TODO: use different level for "warn".
const args = Array.prototype.slice.call(arguments);
args.unshift(false);
warningWWW.apply(null, args);
export function warn(format, ...args) {
if (__DEV__) {
printWarning('warn', format, args);
}
}
export function error() {
const args = Array.prototype.slice.call(arguments);
args.unshift(false);
warningWWW.apply(null, args);
export function error(format, ...args) {
if (__DEV__) {
printWarning('error', format, args);
}
}
function printWarning(level, format, args) {
if (__DEV__) {
const hasExistingStack =
args.length > 0 &&
typeof args[args.length - 1] === 'string' &&
args[args.length - 1].indexOf('\n in') === 0;
if (!hasExistingStack) {
const React = require('react');
const ReactSharedInternals =
React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
// Defensive in case this is fired before React is initialized.
if (ReactSharedInternals != null) {
const ReactDebugCurrentFrame =
ReactSharedInternals.ReactDebugCurrentFrame;
const stack = ReactDebugCurrentFrame.getStackAddendum();
if (stack !== '') {
format += '%s';
args.push(stack);
}
}
}
// TODO: don't ignore level and pass it down somewhere too.
args.unshift(format);
args.unshift(false);
warningWWW.apply(null, args);
}
}