Skip to content

Commit 3c13419

Browse files
gaearonromaindso
authored andcommitted
Make error box messages friendlier (facebook#2123)
1 parent e5366fc commit 3c13419

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

Diff for: packages/react-error-overlay/src/components/frame.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ function createFrame(
127127
lastElement: boolean
128128
) {
129129
const { compiled } = frameSetting;
130+
let { functionName } = frame;
130131
const {
131-
functionName,
132132
fileName,
133133
lineNumber,
134134
columnNumber,
@@ -139,6 +139,14 @@ function createFrame(
139139
_originalScriptCode: sourceLines,
140140
} = frame;
141141

142+
// TODO: find a better place for this.
143+
// Chrome has a bug with inferring function.name:
144+
// https://github.com/facebookincubator/create-react-app/issues/2097
145+
// Let's ignore a meaningless name we get for top-level modules.
146+
if (functionName === 'Object.friendlySyntaxErrorLabel') {
147+
functionName = '(anonymous function)';
148+
}
149+
142150
let url;
143151
if (!compiled && sourceFileName && sourceLineNumber) {
144152
url = sourceFileName + ':' + sourceLineNumber;

Diff for: packages/react-error-overlay/src/components/overlay.js

+13-5
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,19 @@ function createOverlay(
5050
// Create header
5151
const header = document.createElement('div');
5252
applyStyles(header, headerStyle);
53-
if (message.match(/^\w*:/)) {
54-
header.appendChild(document.createTextNode(message));
55-
} else {
56-
header.appendChild(document.createTextNode(name + ': ' + message));
57-
}
53+
54+
// Make message prettier
55+
let finalMessage = message.match(/^\w*:/) ? name + ': ' + message : message;
56+
finalMessage = finalMessage
57+
// TODO: maybe remove this prefix from fbjs?
58+
// It's just scaring people
59+
.replace('Invariant Violation: ', '')
60+
// Break the actionable part to the next line.
61+
// AFAIK React 16+ should already do this.
62+
.replace(' Check the render method', '\n\nCheck the render method');
63+
64+
// Put it in the DOM
65+
header.appendChild(document.createTextNode(finalMessage));
5866
container.appendChild(header);
5967

6068
// Create trace

Diff for: packages/react-error-overlay/src/styles.js

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ const headerStyle = {
6565
'font-size': '1.7em',
6666
'font-weight': 'bold',
6767
color: red,
68+
'white-space': 'pre-wrap',
6869
};
6970

7071
const functionNameStyle = {

0 commit comments

Comments
 (0)