1
1
import { type DiffOptions , printDiffOrStringify } from './diff'
2
2
import { format , stringify } from './display'
3
+ import type { TestError } from './types'
3
4
4
5
// utils is bundled for any environment and might not support `Element`
5
6
declare class Element {
@@ -26,7 +27,7 @@ function getUnserializableMessage(err: unknown) {
26
27
}
27
28
28
29
// https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm
29
- export function serializeError ( val : any , seen : WeakMap < WeakKey , any > = new WeakMap ( ) ) : any {
30
+ export function serializeValue ( val : any , seen : WeakMap < WeakKey , any > = new WeakMap ( ) ) : any {
30
31
if ( ! val || typeof val === 'string' ) {
31
32
return val
32
33
}
@@ -41,7 +42,7 @@ export function serializeError(val: any, seen: WeakMap<WeakKey, any> = new WeakM
41
42
}
42
43
// cannot serialize immutables as immutables
43
44
if ( isImmutable ( val ) ) {
44
- return serializeError ( val . toJSON ( ) , seen )
45
+ return serializeValue ( val . toJSON ( ) , seen )
45
46
}
46
47
if (
47
48
val instanceof Promise
@@ -56,7 +57,7 @@ export function serializeError(val: any, seen: WeakMap<WeakKey, any> = new WeakM
56
57
return `${ val . toString ( ) } ${ format ( val . sample ) } `
57
58
}
58
59
if ( typeof val . toJSON === 'function' ) {
59
- return serializeError ( val . toJSON ( ) , seen )
60
+ return serializeValue ( val . toJSON ( ) , seen )
60
61
}
61
62
62
63
if ( seen . has ( val ) ) {
@@ -69,7 +70,7 @@ export function serializeError(val: any, seen: WeakMap<WeakKey, any> = new WeakM
69
70
seen . set ( val , clone )
70
71
val . forEach ( ( e , i ) => {
71
72
try {
72
- clone [ i ] = serializeError ( e , seen )
73
+ clone [ i ] = serializeValue ( e , seen )
73
74
}
74
75
catch ( err ) {
75
76
clone [ i ] = getUnserializableMessage ( err )
@@ -90,7 +91,7 @@ export function serializeError(val: any, seen: WeakMap<WeakKey, any> = new WeakM
90
91
return
91
92
}
92
93
try {
93
- clone [ key ] = serializeError ( val [ key ] , seen )
94
+ clone [ key ] = serializeValue ( val [ key ] , seen )
94
95
}
95
96
catch ( err ) {
96
97
// delete in case it has a setter from prototype that might throw
@@ -104,18 +105,22 @@ export function serializeError(val: any, seen: WeakMap<WeakKey, any> = new WeakM
104
105
}
105
106
}
106
107
108
+ export { serializeValue as serializeError }
109
+
107
110
function normalizeErrorMessage ( message : string ) {
108
111
return message . replace ( / _ _ ( v i t e _ s s r _ i m p o r t | v i _ i m p o r t ) _ \d + _ _ \. / g, '' )
109
112
}
110
113
111
114
export function processError (
112
- err : any ,
115
+ _err : any ,
113
116
diffOptions ?: DiffOptions ,
114
117
seen : WeakSet < WeakKey > = new WeakSet ( ) ,
115
118
) : any {
116
- if ( ! err || typeof err !== 'object' ) {
117
- return { message : err }
119
+ if ( ! _err || typeof _err !== 'object' ) {
120
+ return { message : String ( _err ) }
118
121
}
122
+ const err = _err as TestError
123
+
119
124
// stack is not serialized in worker communication
120
125
// we stringify it first
121
126
if ( err . stack ) {
@@ -133,7 +138,7 @@ export function processError(
133
138
) {
134
139
err . diff = printDiffOrStringify ( err . actual , err . expected , {
135
140
...diffOptions ,
136
- ...err . diffOptions ,
141
+ ...err . diffOptions as DiffOptions ,
137
142
} )
138
143
}
139
144
@@ -163,10 +168,10 @@ export function processError(
163
168
catch { }
164
169
165
170
try {
166
- return serializeError ( err )
171
+ return serializeValue ( err )
167
172
}
168
173
catch ( e : any ) {
169
- return serializeError (
174
+ return serializeValue (
170
175
new Error (
171
176
`Failed to fully serialize error: ${ e ?. message } \nInner error message: ${ err ?. message } ` ,
172
177
) ,
0 commit comments