@@ -115,6 +115,21 @@ function frameDiv(document: Document, functionName, url, internalUrl) {
115
115
return frame ;
116
116
}
117
117
118
+ function isBultinErrorName ( errorName : ?string ) {
119
+ switch ( errorName ) {
120
+ case 'EvalError' :
121
+ case 'InternalError' :
122
+ case 'RangeError' :
123
+ case 'ReferenceError' :
124
+ case 'SyntaxError' :
125
+ case 'TypeError' :
126
+ case 'URIError' :
127
+ return true ;
128
+ default :
129
+ return false ;
130
+ }
131
+ }
132
+
118
133
function createFrame (
119
134
document : Document ,
120
135
frameSetting : FrameSetting ,
@@ -124,7 +139,8 @@ function createFrame(
124
139
omits : OmitsObject ,
125
140
omitBundle : number ,
126
141
parentContainer : HTMLDivElement ,
127
- lastElement : boolean
142
+ lastElement : boolean ,
143
+ errorName : ?string
128
144
) {
129
145
const { compiled } = frameSetting ;
130
146
let { functionName, _originalFileName : sourceFileName } = frame ;
@@ -149,35 +165,47 @@ function createFrame(
149
165
functionName = '(anonymous function)' ;
150
166
}
151
167
152
- let url ;
153
- if ( ! compiled && sourceFileName && sourceLineNumber ) {
154
- // Remove everything up to the first /src/
155
- const trimMatch = / ^ [ / | \\ ] .* ?[ / | \\ ] ( s r c [ / | \\ ] .* ) / . exec ( sourceFileName ) ;
168
+ let prettyURL ;
169
+ if ( ! compiled && sourceFileName && typeof sourceLineNumber === 'number' ) {
170
+ // Remove everything up to the first /src/ or /node_modules/
171
+ const trimMatch = / ^ [ / | \\ ] .* ?[ / | \\ ] ( ( s r c | n o d e _ m o d u l e s ) [ / | \\ ] .* ) / . exec (
172
+ sourceFileName
173
+ ) ;
156
174
if ( trimMatch && trimMatch [ 1 ] ) {
157
- sourceFileName = trimMatch [ 1 ] ;
175
+ prettyURL = trimMatch [ 1 ] ;
176
+ } else {
177
+ prettyURL = sourceFileName ;
158
178
}
159
-
160
- url = sourceFileName + ':' + sourceLineNumber ;
161
- if ( sourceColumnNumber ) {
162
- url += ':' + sourceColumnNumber ;
179
+ prettyURL += ':' + sourceLineNumber ;
180
+ if ( typeof sourceColumnNumber === 'number' ) {
181
+ prettyURL += ':' + sourceColumnNumber ;
163
182
}
164
- } else if ( fileName && lineNumber ) {
165
- url = fileName + ':' + lineNumber ;
166
- if ( columnNumber ) {
167
- url += ':' + columnNumber ;
183
+ } else if ( fileName && typeof lineNumber === 'number' ) {
184
+ prettyURL = fileName + ':' + lineNumber ;
185
+ if ( typeof columnNumber === 'number' ) {
186
+ prettyURL += ':' + columnNumber ;
168
187
}
169
188
} else {
170
- url = 'unknown' ;
189
+ prettyURL = 'unknown' ;
171
190
}
172
191
173
192
let needsHidden = false ;
174
- const internalUrl = isInternalFile ( url , sourceFileName ) ;
175
- if ( internalUrl ) {
193
+ const isInternalUrl = isInternalFile ( sourceFileName , fileName ) ;
194
+ const isThrownIntentionally = ! isBultinErrorName ( errorName ) ;
195
+ const shouldCollapse = isInternalUrl &&
196
+ ( isThrownIntentionally || omits . hasReachedAppCode ) ;
197
+
198
+ if ( ! isInternalUrl ) {
199
+ omits . hasReachedAppCode = true ;
200
+ }
201
+
202
+ if ( shouldCollapse ) {
176
203
++ omits . value ;
177
204
needsHidden = true ;
178
205
}
206
+
179
207
let collapseElement = null ;
180
- if ( ! internalUrl || lastElement ) {
208
+ if ( ! shouldCollapse || lastElement ) {
181
209
if ( omits . value > 0 ) {
182
210
const capV = omits . value ;
183
211
const omittedFrames = getGroupToggle ( document , capV , omitBundle ) ;
@@ -190,7 +218,7 @@ function createFrame(
190
218
omittedFrames
191
219
) ;
192
220
} ) ;
193
- if ( lastElement && internalUrl ) {
221
+ if ( lastElement && shouldCollapse ) {
194
222
collapseElement = omittedFrames ;
195
223
} else {
196
224
parentContainer . appendChild ( omittedFrames ) ;
@@ -200,14 +228,14 @@ function createFrame(
200
228
omits . value = 0 ;
201
229
}
202
230
203
- const elem = frameDiv ( document , functionName , url , internalUrl ) ;
231
+ const elem = frameDiv ( document , functionName , prettyURL , shouldCollapse ) ;
204
232
if ( needsHidden ) {
205
233
applyStyles ( elem , hiddenStyle ) ;
206
234
elem . setAttribute ( 'name' , 'bundle-' + omitBundle ) ;
207
235
}
208
236
209
237
let hasSource = false ;
210
- if ( ! internalUrl ) {
238
+ if ( ! shouldCollapse ) {
211
239
if (
212
240
compiled && scriptLines && scriptLines . length !== 0 && lineNumber != null
213
241
) {
0 commit comments