@@ -2,6 +2,18 @@ var _ = require('../utility');
2
2
var errorParser = require ( './errorParser' ) ;
3
3
var logger = require ( './logger' ) ;
4
4
5
+ function handleDomException ( item , options , callback ) {
6
+ if ( item . err && errorParser . Stack ( item . err ) . name === 'DOMException' ) {
7
+ var originalError = new Error ( ) ;
8
+ originalError . name = item . err . name ;
9
+ originalError . message = item . err . message ;
10
+ originalError . stack = item . err . stack ;
11
+ originalError . nested = item . err ;
12
+ item . err = originalError ;
13
+ }
14
+ callback ( null , item ) ;
15
+ }
16
+
5
17
function handleItemWithError ( item , options , callback ) {
6
18
item . data = item . data || { } ;
7
19
if ( item . err ) {
@@ -109,7 +121,11 @@ function addPluginInfo(window) {
109
121
110
122
function addBody ( item , options , callback ) {
111
123
if ( item . stackInfo ) {
112
- addBodyTrace ( item , options , callback ) ;
124
+ if ( item . stackInfo . traceChain ) {
125
+ addBodyTraceChain ( item , options , callback ) ;
126
+ } else {
127
+ addBodyTrace ( item , options , callback ) ;
128
+ }
113
129
} else {
114
130
addBodyMessage ( item , options , callback ) ;
115
131
}
@@ -134,11 +150,51 @@ function addBodyMessage(item, options, callback) {
134
150
callback ( null , item ) ;
135
151
}
136
152
153
+ function stackFromItem ( item ) {
154
+ // Transform a TraceKit stackInfo object into a Rollbar trace
155
+ var stack = item . stackInfo . stack ;
156
+ if ( stack && stack . length === 0 && item . _unhandledStackInfo && item . _unhandledStackInfo . stack ) {
157
+ stack = item . _unhandledStackInfo . stack ;
158
+ }
159
+ return stack ;
160
+ }
161
+
162
+ function addBodyTraceChain ( item , options , callback ) {
163
+ var traceChain = item . stackInfo . traceChain ;
164
+ var traces = [ ] ;
165
+
166
+ var traceChainLength = traceChain . length ;
167
+ for ( var i = 0 ; i < traceChainLength ; i ++ ) {
168
+ var trace = buildTrace ( item , traceChain [ i ] , options ) ;
169
+ traces . push ( trace ) ;
170
+ }
171
+
172
+ _ . set ( item , 'data.body' , { trace_chain : traces } ) ;
173
+ callback ( null , item ) ;
174
+ }
137
175
138
176
function addBodyTrace ( item , options , callback ) {
139
- var description = item . data . description ;
140
- var stackInfo = item . stackInfo ;
141
- var custom = item . custom ;
177
+ var stack = stackFromItem ( item ) ;
178
+
179
+ if ( stack ) {
180
+ var trace = buildTrace ( item , item . stackInfo , options ) ;
181
+ _ . set ( item , 'data.body' , { trace : trace } ) ;
182
+ callback ( null , item ) ;
183
+ } else {
184
+ var stackInfo = item . stackInfo ;
185
+ var guess = errorParser . guessErrorClass ( stackInfo . message ) ;
186
+ var className = stackInfo . name || guess [ 0 ] ;
187
+ var message = guess [ 1 ] ;
188
+
189
+ item . message = className + ': ' + message ;
190
+ addBodyMessage ( item , options , callback ) ;
191
+ }
192
+ }
193
+
194
+ function buildTrace ( item , stackInfo , options ) {
195
+ var description = item && item . data . description ;
196
+ var custom = item && item . custom ;
197
+ var stack = stackFromItem ( item ) ;
142
198
143
199
var guess = errorParser . guessErrorClass ( stackInfo . message ) ;
144
200
var className = stackInfo . name || guess [ 0 ] ;
@@ -154,11 +210,6 @@ function addBodyTrace(item, options, callback) {
154
210
trace . exception . description = description ;
155
211
}
156
212
157
- // Transform a TraceKit stackInfo object into a Rollbar trace
158
- var stack = stackInfo . stack ;
159
- if ( stack && stack . length === 0 && item . _unhandledStackInfo && item . _unhandledStackInfo . stack ) {
160
- stack = item . _unhandledStackInfo . stack ;
161
- }
162
213
if ( stack ) {
163
214
if ( stack . length === 0 ) {
164
215
trace . exception . stack = stackInfo . rawStack ;
@@ -224,12 +275,9 @@ function addBodyTrace(item, options, callback) {
224
275
if ( custom ) {
225
276
trace . extra = _ . merge ( custom ) ;
226
277
}
227
- _ . set ( item , 'data.body' , { trace : trace } ) ;
228
- callback ( null , item ) ;
229
- } else {
230
- item . message = className + ': ' + message ;
231
- addBodyMessage ( item , options , callback ) ;
232
278
}
279
+
280
+ return trace ;
233
281
}
234
282
235
283
function scrubPayload ( item , options , callback ) {
@@ -239,6 +287,7 @@ function scrubPayload(item, options, callback) {
239
287
}
240
288
241
289
module . exports = {
290
+ handleDomException : handleDomException ,
242
291
handleItemWithError : handleItemWithError ,
243
292
ensureItemHasSomethingToSay : ensureItemHasSomethingToSay ,
244
293
addBaseInfo : addBaseInfo ,
0 commit comments