@@ -11,10 +11,13 @@ export function stringifyError(error: unknown, noStack = false): string {
11
11
// Has a custom toString() method
12
12
str = `${ ( error as any ) . toString ( ) } `
13
13
} else {
14
- str = ''
15
- if ( ( error as Error ) . message ) str += `${ ( error as Error ) . message } ` // Is an Error
16
- if ( ( error as any ) . reason ) str += `${ ( error as any ) . reason } ` // Is a Meteor.Error
17
- if ( ( error as any ) . details ) str += `${ ( error as any ) . details } `
14
+ const strings : ( string | undefined ) [ ] = [
15
+ stringify ( ( error as any ) . rawError ) , // UserError
16
+ stringify ( ( error as Error ) . message ) , // Error
17
+ stringify ( ( error as any ) . reason ) , // Meteor.Error
18
+ stringify ( ( error as any ) . details ) ,
19
+ ]
20
+ str = strings . filter ( Boolean ) . join ( ', ' )
18
21
}
19
22
20
23
if ( ! str ) {
@@ -34,7 +37,7 @@ export function stringifyError(error: unknown, noStack = false): string {
34
37
}
35
38
36
39
if ( ! noStack ) {
37
- if ( error && typeof error === 'object' && ( error as any ) . stack ) {
40
+ if ( error && typeof error === 'object' && typeof ( error as any ) . stack === 'string' ) {
38
41
str += ', ' + ( error as any ) . stack
39
42
}
40
43
}
@@ -43,3 +46,15 @@ export function stringifyError(error: unknown, noStack = false): string {
43
46
44
47
return str
45
48
}
49
+
50
+ function stringify ( v : any ) : string | undefined {
51
+ // Tries to stringify objects if they have a toString() that returns something sensible
52
+ if ( v === undefined ) return undefined
53
+ if ( v === null ) return 'null'
54
+
55
+ if ( typeof v === 'object' ) {
56
+ const str = `${ v } `
57
+ if ( str !== '[object Object]' ) return str
58
+ return undefined
59
+ } else return `${ v } `
60
+ }
0 commit comments