Skip to content

Commit 60f483d

Browse files
committed
Skip frames that are too close
1 parent 76d2d84 commit 60f483d

File tree

2 files changed

+38
-9
lines changed

2 files changed

+38
-9
lines changed

packages/react-error-overlay/src/components/frame.js

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,20 @@ function createFrame(
146146
functionName = '(anonymous function)';
147147
}
148148

149+
let isTooClose = false;
150+
if (
151+
omits.lastFileName != null &&
152+
sourceFileName === omits.lastFileName &&
153+
omits.lastLineNumber != null &&
154+
sourceLineNumber != null &&
155+
Math.abs(sourceLineNumber - omits.lastLineNumber) < 3
156+
) {
157+
isTooClose = true;
158+
} else {
159+
omits.lastFileName = sourceFileName;
160+
omits.lastLineNumber = sourceLineNumber;
161+
}
162+
149163
let url;
150164
if (!compiled && sourceFileName && sourceLineNumber) {
151165
// Remove everything up to the first /src/
@@ -168,13 +182,18 @@ function createFrame(
168182
}
169183

170184
let needsHidden = false;
171-
const internalUrl = isInternalFile(url, sourceFileName);
172-
if (internalUrl) {
185+
let internalUrl = isInternalFile(url, sourceFileName);
186+
187+
let shouldCollapse = internalUrl || isTooClose;
188+
let shouldSkipCode = internalUrl;
189+
190+
if (shouldCollapse) {
173191
++omits.value;
174192
needsHidden = true;
175193
}
194+
176195
let collapseElement = null;
177-
if (!internalUrl || lastElement) {
196+
if (!shouldCollapse || lastElement) {
178197
if (omits.value > 0) {
179198
const capV = omits.value;
180199
const omittedFrames = getGroupToggle(document, capV, omitBundle);
@@ -187,7 +206,7 @@ function createFrame(
187206
omittedFrames
188207
);
189208
});
190-
if (lastElement && internalUrl) {
209+
if (lastElement && shouldCollapse) {
191210
collapseElement = omittedFrames;
192211
} else {
193212
parentContainer.appendChild(omittedFrames);
@@ -197,14 +216,14 @@ function createFrame(
197216
omits.value = 0;
198217
}
199218

200-
const elem = frameDiv(document, functionName, url, internalUrl);
219+
const elem = frameDiv(document, functionName, url, shouldCollapse);
201220
if (needsHidden) {
202221
applyStyles(elem, hiddenStyle);
203222
elem.setAttribute('name', 'bundle-' + omitBundle);
204223
}
205224

206225
let hasSource = false;
207-
if (!internalUrl) {
226+
if (!shouldSkipCode) {
208227
if (
209228
compiled && scriptLines && scriptLines.length !== 0 && lineNumber != null
210229
) {

packages/react-error-overlay/src/components/frames.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@ import { traceStyle, toggleStyle } from '../styles';
55
import { enableTabClick } from '../utils/dom/enableTabClick';
66
import { createFrame } from './frame';
77

8-
type OmitsObject = { value: number, bundle: number };
8+
type OmitsObject = {
9+
value: number,
10+
bundle: number,
11+
lastFileName: ?string,
12+
lastLineNumber: ?number,
13+
};
914
type FrameSetting = { compiled: boolean };
1015
export type { OmitsObject, FrameSetting };
1116

@@ -54,7 +59,7 @@ function createFrameWrapper(
5459
}
5560
});
5661
compiledDiv.appendChild(compiledText);
57-
elemWrapper.appendChild(compiledDiv);
62+
elem.appendChild(compiledDiv);
5863
}
5964

6065
if (collapseElement != null) {
@@ -80,7 +85,12 @@ function createFrames(
8085

8186
let index = 0;
8287
let critical = true;
83-
const omits: OmitsObject = { value: 0, bundle: 1 };
88+
const omits: OmitsObject = {
89+
value: 0,
90+
bundle: 1,
91+
lastFileName: null,
92+
lastLineNumber: null,
93+
};
8494
resolvedFrames.forEach(function(frame) {
8595
const lIndex = index++;
8696
const elem = createFrameWrapper(

0 commit comments

Comments
 (0)