@@ -79,7 +79,13 @@ function insertBeforeBundle(
79
79
parent . insertBefore ( div , first ) ;
80
80
}
81
81
82
- function frameDiv ( document : Document , functionName , url , internalUrl ) {
82
+ function frameDiv (
83
+ document : Document ,
84
+ functionName ,
85
+ url ,
86
+ internalUrl ,
87
+ onSourceClick : ?Function
88
+ ) {
83
89
const frame = document . createElement ( 'div' ) ;
84
90
const frameFunctionName = document . createElement ( 'div' ) ;
85
91
@@ -112,6 +118,14 @@ function frameDiv(document: Document, functionName, url, internalUrl) {
112
118
frameLink . appendChild ( frameAnchor ) ;
113
119
frame . appendChild ( frameLink ) ;
114
120
121
+ if ( typeof onSourceClick === 'function' ) {
122
+ let handler = onSourceClick ;
123
+ frameAnchor . style . cursor = 'pointer' ;
124
+ frameAnchor . addEventListener ( 'click' , function ( ) {
125
+ handler ( ) ;
126
+ } ) ;
127
+ }
128
+
115
129
return frame ;
116
130
}
117
131
@@ -130,6 +144,43 @@ function isBultinErrorName(errorName: ?string) {
130
144
}
131
145
}
132
146
147
+ function getPrettyURL (
148
+ sourceFileName : ?string ,
149
+ sourceLineNumber : ?number ,
150
+ sourceColumnNumber : ?number ,
151
+ fileName : ?string ,
152
+ lineNumber : ?number ,
153
+ columnNumber : ?number ,
154
+ compiled : boolean
155
+ ) : string {
156
+ let prettyURL ;
157
+ if ( ! compiled && sourceFileName && typeof sourceLineNumber === 'number' ) {
158
+ // Remove everything up to the first /src/ or /node_modules/
159
+ const trimMatch = / ^ [ / | \\ ] .* ?[ / | \\ ] ( ( s r c | n o d e _ m o d u l e s ) [ / | \\ ] .* ) / . exec (
160
+ sourceFileName
161
+ ) ;
162
+ if ( trimMatch && trimMatch [ 1 ] ) {
163
+ prettyURL = trimMatch [ 1 ] ;
164
+ } else {
165
+ prettyURL = sourceFileName ;
166
+ }
167
+ prettyURL += ':' + sourceLineNumber ;
168
+ // Note: we intentionally skip 0's because they're produced by cheap Webpack maps
169
+ if ( sourceColumnNumber ) {
170
+ prettyURL += ':' + sourceColumnNumber ;
171
+ }
172
+ } else if ( fileName && typeof lineNumber === 'number' ) {
173
+ prettyURL = fileName + ':' + lineNumber ;
174
+ // Note: we intentionally skip 0's because they're produced by cheap Webpack maps
175
+ if ( columnNumber ) {
176
+ prettyURL += ':' + columnNumber ;
177
+ }
178
+ } else {
179
+ prettyURL = 'unknown' ;
180
+ }
181
+ return prettyURL ;
182
+ }
183
+
133
184
function createFrame (
134
185
document : Document ,
135
186
frameSetting : FrameSetting ,
@@ -165,29 +216,15 @@ function createFrame(
165
216
functionName = '(anonymous function)' ;
166
217
}
167
218
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
- ) ;
174
- if ( trimMatch && trimMatch [ 1 ] ) {
175
- prettyURL = trimMatch [ 1 ] ;
176
- } else {
177
- prettyURL = sourceFileName ;
178
- }
179
- prettyURL += ':' + sourceLineNumber ;
180
- if ( typeof sourceColumnNumber === 'number' ) {
181
- prettyURL += ':' + sourceColumnNumber ;
182
- }
183
- } else if ( fileName && typeof lineNumber === 'number' ) {
184
- prettyURL = fileName + ':' + lineNumber ;
185
- if ( typeof columnNumber === 'number' ) {
186
- prettyURL += ':' + columnNumber ;
187
- }
188
- } else {
189
- prettyURL = 'unknown' ;
190
- }
219
+ const prettyURL = getPrettyURL (
220
+ sourceFileName ,
221
+ sourceLineNumber ,
222
+ sourceColumnNumber ,
223
+ fileName ,
224
+ lineNumber ,
225
+ columnNumber ,
226
+ compiled
227
+ ) ;
191
228
192
229
let needsHidden = false ;
193
230
const isInternalUrl = isInternalFile ( sourceFileName , fileName ) ;
@@ -228,7 +265,25 @@ function createFrame(
228
265
omits . value = 0 ;
229
266
}
230
267
231
- const elem = frameDiv ( document , functionName , prettyURL , shouldCollapse ) ;
268
+ let onSourceClick = null ;
269
+ if ( sourceFileName ) {
270
+ onSourceClick = ( ) => {
271
+ fetch (
272
+ '/__open-stack-frame-in-editor?fileName=' +
273
+ window . encodeURIComponent ( sourceFileName ) +
274
+ '&lineNumber=' +
275
+ window . encodeURIComponent ( sourceLineNumber || 1 )
276
+ ) . then ( ( ) => { } , ( ) => { } ) ;
277
+ } ;
278
+ }
279
+
280
+ const elem = frameDiv (
281
+ document ,
282
+ functionName ,
283
+ prettyURL ,
284
+ shouldCollapse ,
285
+ onSourceClick
286
+ ) ;
232
287
if ( needsHidden ) {
233
288
applyStyles ( elem , hiddenStyle ) ;
234
289
elem . setAttribute ( 'name' , 'bundle-' + omitBundle ) ;
@@ -247,8 +302,7 @@ function createFrame(
247
302
columnNumber ,
248
303
contextSize ,
249
304
critical ,
250
- frame . _originalFileName ,
251
- frame . _originalLineNumber
305
+ onSourceClick
252
306
)
253
307
) ;
254
308
hasSource = true ;
@@ -266,8 +320,7 @@ function createFrame(
266
320
sourceColumnNumber ,
267
321
contextSize ,
268
322
critical ,
269
- frame . _originalFileName ,
270
- frame . _originalLineNumber
323
+ onSourceClick
271
324
)
272
325
) ;
273
326
hasSource = true ;
0 commit comments