@@ -25,7 +25,7 @@ export { Endpoint };
25
25
export const proxyMarker = Symbol ( "Comlink.proxy" ) ;
26
26
export const createEndpoint = Symbol ( "Comlink.endpoint" ) ;
27
27
export const releaseProxy = Symbol ( "Comlink.releaseProxy" ) ;
28
- const throwSet = new WeakSet ( ) ;
28
+ const throwMarker = Symbol ( "Comlink.thrown" ) ;
29
29
30
30
// prettier-ignore
31
31
type Promisify < T > =
@@ -100,24 +100,23 @@ export const transferHandlers = new Map<string, TransferHandler>([
100
100
[
101
101
"throw" ,
102
102
{
103
- canHandle : obj => throwSet . has ( obj ) ,
104
- serialize ( obj ) {
105
- const isError = obj instanceof Error ;
106
- let serialized = obj ;
103
+ canHandle : obj => typeof obj === "object" && throwMarker in obj ,
104
+ serialize ( { value } ) {
105
+ const isError = value instanceof Error ;
106
+ let serialized = { isError , value } ;
107
107
if ( isError ) {
108
- serialized = {
109
- isError,
110
- message : obj . message ,
111
- stack : obj . stack
108
+ serialized . value = {
109
+ message : value . message ,
110
+ stack : value . stack
112
111
} ;
113
112
}
114
113
return [ serialized , [ ] ] ;
115
114
} ,
116
- deserialize ( obj ) {
117
- if ( ( obj as any ) . isError ) {
118
- throw Object . assign ( new Error ( ) , obj ) ;
115
+ deserialize ( serialized ) {
116
+ if ( serialized . isError ) {
117
+ throw Object . assign ( new Error ( ) , serialized . value ) ;
119
118
}
120
- throw obj ;
119
+ throw serialized . value ;
121
120
}
122
121
}
123
122
]
@@ -173,14 +172,12 @@ export function expose(obj: any, ep: Endpoint = self as any) {
173
172
}
174
173
break ;
175
174
}
176
- } catch ( e ) {
177
- returnValue = e ;
178
- throwSet . add ( e ) ;
175
+ } catch ( value ) {
176
+ returnValue = { value, [ throwMarker ] : 0 } ;
179
177
}
180
178
Promise . resolve ( returnValue )
181
- . catch ( e => {
182
- throwSet . add ( e ) ;
183
- return e ;
179
+ . catch ( value => {
180
+ return { value, [ throwMarker ] : 0 } ;
184
181
} )
185
182
. then ( returnValue => {
186
183
const [ wireValue , transferables ] = toWireValue ( returnValue ) ;
0 commit comments